当前位置:文档之家› 单片机脉冲宽度测量程序

单片机脉冲宽度测量程序

AJMP MAIN
ORG 0003H
AJMP INTR0
ORG 0100H
;**********************初始化*********************************
MAIN: MOV DPTR,#TAB
MOV SP,#60H ;
MOV TMOD,#09H;工作在门控方式(GATE=1),定时器t0工作方式1
MOV TL0,#00H ;计数清零
MOV TH0,#01H
MOV IE,#81H ;开放定时器中断和总中断和外部中断0
MOV TCON,#11H
MOV R5,#05H
LOOP: ACALL BCD ;十六位二进制转换十进制的BCD码
ACALL UBCD ;把压缩BCD码转换成非压缩BCD码
LOOP1: ACALL LED ;显示
ACALL DELAY
DJNZ R5,LOOP1
MOV R5,08H
AJMP LOOP
;********************外部中断0服务程序************
INTR0: MOV 41H,TH0
MOV 40H,TL0
MOV TH0,#01H
MOV TL0,#00H;重新将定时器T0赋初值
RETI
;********************二—十进制转换*************
BCD: CLR A ;将41H,40H中值转换成BCD码存入3AH,3BH,3CH中MOV 3EH,40H
MOV 3FH,41H
MOV 3AH,A
MOV 3BH,A
MOV 3CH,A
MOV R7,#16
LOOP2: CLR C
MOV A,3EH
RLC A
MOV 3EH,A
MOV A,3FH
RLC A
MOV 3FH,A
ADDC A,3CH
DA A
MOV 3CH,A
MOV A,3BH
ADDC A,3BH
DA A
MOV 3BH,A
MOV A,3AH
ADDC A,3AH
DA A
MOV 3AH,A
DJNZ R7,LOOP2
RET
;*********************把压缩BCD码转换成非压缩BCD码**********
UBCD: MOV 35H,3AH
MOV A,3BH
ANL A,#0FH
MOV 37H,A
MOV A,3BH
ANL A,#0F0H
SWAP A
MOV 36H,A
MOV A,3CH
ANL A,#0FH
MOV 39H,A
MOV A,3CH
ANL A,#0F0H
SWAP A
MOV 38H,A
MOV A,35H
CJNE A,#00H,CHOOSE;判断第五位是否为零,为零则按照4位有效数值处理,小数点加在第一位(31h)上
MOV A,36H
ADD A,#10
MOV 31H,A
MOV 32H,37H
MOV 33H,38H
MOV 34H,39H
RET
CHOOSE: MOV 31H,35H;第五位不为零,小数点加在第二位(32h)上MOV A,36H
ADD A,#10
MOV 32H,A
MOV 33H,37H
MOV 34H,38H
RET
;*******************数码管显示************
LED: MOV A,31H ;显示第一位(高位)
MOVC A,@A+DPTR
MOV P0,A
MOV A,#0F7H
MOV P2,A
LCALL DELAY
MOV A,32H ;显示第二位
MOVC A,@A+DPTR
MOV P0,A
MOV A,#0FBH
MOV P2,A
LCALL DELAY
MOV A,33H ;显示第三位
MOVC A,@A+DPTR
MOV P0,A
MOV A,#0FDH
MOV P2,A
LCALL DELAY
MOV A,34H ;显示第四位
MOVC A,@A+DPTR
MOV P0,A
MOV A,#0FEH
MOV P2,A
LCALL DELAY
RET
;****************延时********************
DELAY: MOV R6,#2
DELAY1: MOV R4,#250;;;;;;延时时间:2*250*2=1ms
DJNZ R4,$
DJNZ R6,DELAY1
RET
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;不带小数点的字型码DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH;带小数点的字型码END。

相关主题