⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc0804_dis1602.asm

📁 自动测量多点线路电压,自动判断电压值确定电路是否短路,测试不通过发出报警信息,测试通过自动启动PCBA上电并加载COLD程序,液晶显示器上自动显示相关信息.
💻 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 + -