📄 adc0804_dis1602.asm
字号:
;*******************************************************************************
;ADC0804转换和液晶1602显示程序
;12MHZ晶振,将转换后结果液晶1602显示
;当测试电阻小于5欧姆时判为短路
;制作:zhency E-mail:zhency@shinwa.com.cn 版本:V20090303
;********************************************************************************
;*********************************************
;ADC0804端口定义
;*********************************************
cs0804 equ p2.7 ;定义AD的片选信号线
wr0804 equ p3.6
rd0804 equ p3.7
out0804 equ p1 ;定义AD转换后的数字信号送P1口
ge_bit equ 30h
shi_bit equ 31h
bai_bit equ 32h
;**********************************************
;液晶块1602端口定义
;**********************************************
RS1602 EQU P2.0
RW1602 EQU P2.1
E1602 EQU P2.2
;*********************************************
;定义按键端口
;*********************************************
Kadd equ p2.6
Kin equ p3.4
;*********************************************
;主程序
;*********************************************
org 0000h
ajmp main
org 0030h
main: clr p3.5
mov 20h,#00h
mov 24h,#02h
call DIS1602
call setup
K_add: jnb Kadd,K
jmp K_in
K: call delay10ms
inc r7
cjne r7,#200,KK
setb p2.3
setb p2.4
setb p2.5
call DIS1602
call Poweroff
mov r7,#00h
KK: jnb Kadd,K
K_add1: mov a,24h
cjne a,#02h,K_in
inc 20h
call Shuju
mov a,20h
cjne a,#6,K_add
mov 20h,#00h
call Shuju
jmp K_add
K_in: jnb Kin,K1
jmp K_add
K1: call delay10ms
jnb Kin,K1
mov a,20h
cjne a,#00h,k2
call DIS1602
call No_setup
call delay1s
jmp main
K2: dec 24h
clr p3.5
mov r3,#3
T_10: call TEST
call delay1s
dec r3
cjne r3,#00h,T_10
call DIS1602
call Pass
call start1
call Poweron
call start1
mov a,24h
cjne a,#00h,K_in
mov 24h,#01h
jmp K_in
;***************************************
;测试主程序
;***************************************
TEST: mov 21h,20h
clr p2.3
clr p2.4
clr p2.5
call delay1s
call ADC0804
call DIS1602
MOV P0,#80H ;第一行数据存贮器地址
ACALL ENABLE
lcall D_test
lcall Panduan
dec 21h
mov r7,21h
cjne r7,#00h,next1
ljmp next5
next1: setb p2.3
clr p2.4
clr p2.5
call delay1s
call ADC0804
mov p0,#86h ;第一行第6个开始数据存贮器地址
ACALL ENABLE
lcall D_test
lcall Panduan
dec 21h
mov r7,21h
cjne r7,#00h,next2
ljmp next5
next2: clr p2.3
setb p2.4
clr p2.5
call delay1s
call ADC0804
mov p0,#8ch ;第一行第12个开始数据存贮器地址
acall enable
lcall D_test
lcall Panduan
dec 21h
mov r7,21h
cjne r7,#00h,next3
ljmp next5
next3: setb p2.3
setb p2.4
clr p2.5
call delay1s
call ADC0804
mov p0,#0c0h ;第二行第0个开始数据存贮器地址
acall enable
lcall D_test
lcall Panduan
dec 21h
mov r7,21h
cjne r7,#00h,next4
ljmp next5
next4: clr p2.3
clr p2.4
setb p2.5
call delay1s
call ADC0804
mov p0,#0c6h ;第二行第6个开始数据存贮器地址
acall enable
lcall D_test
lcall Panduan
dec 21h
mov r7,21h
cjne r7,#00h,next5
ljmp next5
next5: ret
;**********************************************
;自动判断子程序
;**********************************************
Panduan:
mov a,bai_bit
cjne a,#00,loop
mov a,shi_bit
cjne a,#00,loop
mov a,ge_bit
cjne a,#09,loop1
jmp loop
loop1: cjne a,#08,loop2
jmp loop
loop2: cjne a,#07,loop3
jmp loop
loop3: cjne a,#06,FF
jmp loop
FF: call DIS1602
call Fail
loop: ret
;*********************************************
;启动加载子程序
;*********************************************
start1: clr p2.3
setb p2.4
setb p2.5
ret
;********************************************
;AD转换子程序
;********************************************
ADC0804:
lcall Start ;调启动转换子程序
lcall delay1ms ;延时约1ms
lcall read ;调读取转换结果子程序
clr wr0804 ;清除转换结果?
mov r4,a
mov b,#50 ;求转换结果百位
div ab
mov bai_bit,a
mov a,b
mov b,#5 ;求转换结果十、个位
div ab
mov shi_bit,a
mov a,b
add a,b
mov ge_bit,a
ret
;*********************************************
;A/D转换开始
;*********************************************
Start:
clr cs0804 ;选中ADC0804
nop
clr wr0804
nop
setb wr0804
nop
setb cs0804
nop
ret
;*********************************************
;读A/D 转换结果
;*********************************************
Read:
mov out0804,#0ffh
clr cs0804
nop
clr rd0804
nop
nop
mov a,out0804
nop
setb rd0804
nop
setb cs0804
ret
;*********************************************
; 延时1ms子程序
;*********************************************
delay1ms:
mov r1,#2
tt1:
mov r0,#250
djnz r0,$
djnz r1,tt1
ret
;*********************************************
; 延时10ms子程序
;*********************************************
delay10ms:
mov r1,#20
tt:
mov r0,#248
djnz r0,$
djnz r1,tt
ret
;*********************************************
; 延时1s子程序
;*********************************************
delay1s:
mov r2,#30
tttt: mov r1,#20
ttt:
mov r0,#248
djnz r0,$
djnz r1,ttt
djnz r2,tttt
ret
;***********************************************
;液晶显示子程序
;************************************************
DIS1602: MOV P0,#01h ;清屏
ACALL ENABLE
MOV P0,#01h ;清屏
ACALL ENABLE
MOV P0,#38h ;显示功能
ACALL ENABLE
MOV P0,#0fh ;显示开关控制
ACALL ENABLE
MOV P0,#06h ;输入模式
ACALL ENABLE
ret
;**********************************************
;向液晶写测试数据
;**********************************************
D_test:
mov a,bai_bit
mov dptr,#tab
movc a,@a+dptr
call write
mov a,shi_bit
mov dptr,#tab
movc a,@a+dptr
call write
mov a,ge_bit
mov dptr,#tab
movc a,@a+dptr
call write
ret
;************************************************
;送开机设置信息
;************************************************
Setup:
MOV P0,#80H ;第一行数据存贮器地址
ACALL ENABLE
mov dptr,#msg2
mov r1,#00h
A1: mov a,r1
movc a,@a+dptr
call write
inc r1
cjne a,#00h,A1
MOV P0,#0C0H ;第二行数据存贮器地址
ACALL ENABLE
mov dptr,#msg3
mov r1,#00h
A2: mov a,r1
movc a,@a+dptr
call write
inc r1
cjne a,#00h,A2
ret
;**********************************************************
;送测试失败信息
;**********************************************************
Fail:
MOV P0,#80H ;第一行数据存贮器地址
ACALL ENABLE
mov dptr,#msg5
mov r1,#00h
A3: mov a,r1
movc a,@a+dptr
call write
inc r1
cjne a,#00h,A3
MOV P0,#0c0H ;第二行数据存贮器地址
ACALL ENABLE
mov dptr,#msg7
mov r1,#00h
A7: mov a,r1
movc a,@a+dptr
call write
inc r1
cjne a,#00h,A7
setb p3.5
jmp K_in
;**********************************************************
;送测试失败信息
;**********************************************************
Pass:
MOV P0,#80H ;第一行数据存贮器地址
ACALL ENABLE
mov dptr,#msg4
mov r1,#00h
A4: mov a,r1
movc a,@a+dptr
call write
inc r1
cjne a,#00h,A4
ret
;**********************************************************
;送电源加载信息
;**********************************************************
Poweron:
MOV P0,#0c0H ;第二行数据存贮器地址
ACALL ENABLE
mov dptr,#msg1
mov r1,#00h
A5: mov a,r1
movc a,@a+dptr
call write
inc r1
cjne a,#00h,A5
ret
;**********************************************************
;送切断电源信息
;**********************************************************
Poweroff:
MOV P0,#80H ;第一行数据存贮器地址
ACALL ENABLE
mov dptr,#msg8
mov r1,#00h
A8: mov a,r1
movc a,@a+dptr
call write
inc r1
cjne a,#00h,A8
MOV P0,#0c0H ;第二行数据存贮器地址
ACALL ENABLE
mov dptr,#msg9
mov r1,#00h
A9: mov a,r1
movc a,@a+dptr
call write
inc r1
cjne a,#00h,A9
ret
ret
;**********************************************************
;送无设置信息
;**********************************************************
No_setup:
MOV P0,#80H ;第一行数据存贮器地址
ACALL ENABLE
mov dptr,#msg6
mov r1,#00h
A6: mov a,r1
movc a,@a+dptr
call write
inc r1
cjne a,#00h,A6
ret
;***********************************************
;数字显示
;**********************************************
Shuju:
MOV P0,#0cdH ;第二行数据存贮器地址
ACALL ENABLE
mov a,20h
mov dptr,#tab
movc a,@a+dptr
call write
ret
;*********************************************
;向液晶写信息
;*********************************************
write: mov p0,a ;送字符ASCII码
SETB RS1602
CLR RW1602
CLR E1602
ACALL DELAY
SETB E1602
ret
ENABLE: CLR RS1602 ;送命令
CLR RW1602
CLR E1602
ACALL DELAY
SETB E1602
RET
DELAY: MOV P0,#0FFH
CLR RS1602
SETB RW1602
CLR E1602
NOP
SETB E1602
JB P0.7,DELAY ;判断忙标志
RET
tab: db "0","1","2","3","4","5","6","7","8","9"
msg1: db "Power on------->",00h
msg2: db "Input Q'ty of th",00h
msg3: db "e test point: ",00h
msg4: db "Short test Pass!",00h
msg5: db " Fail!!! ",00h
msg7: db "Remove the PCBA.",00h
msg6: db " No setup!!! ",00h
msg8: db "Power off------>",00h
msg9: db "Continue testing",00h
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -