📄 noname1.asm
字号:
TIME1S BIT 20H.0
TIME2MS BIT 20H.1
DISTEMP DATA 60H ;60h~65h显示缓冲区
DISWORK DATA 66H ;显示工作指示
LEDBIT DATA 67H
LEDCOUNT DATA 68H ;数码管个数
TIME1H DATA 69H
TIME1M DATA 6AH
TIME1L DATA 6BH
TIME1HTEMP DATA 70H
TIMECOUNT DATA 6CH
TIMECOUNT1 DATA 6DH
TIME0H DATA 6EH
TIME0L DATA 6FH
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INT0
ORG 001BH
LJMP INT1
ORG 30H
MAIN:MOV SP,#31H
LCALL INIT_DEVICES
L3: CPL P1.0
JNB TIME2MS,L3 ;判断定时2ms
CLR TIME2MS
CALL DIS
JNB TIME1S,L3 ;判断定时1s到标志
CLR TIME1S ;清标志
MOV R5,TIME1H
MOV R6,TIME1M
MOV R7,TIME1L
CALL HB2 ;定时到进行计算
CALL DBCD
SJMP L3
;************************************************************AT89S51初始化
INIT_DEVICES:
CLR TIME1S
SETB TIME2MS
MOV 60H,#00H
MOV 61H,#00H
MOV 62H,#00H
MOV 63H,#00H
MOV 64H,#00H
MOV 65H,#00H
MOV TIME1HTEMP,#00H
MOV TIME1H,#00H
MOV TIME1M,#00H
MOV TIME1L,#00H
MOV LEDCOUNT,#06H
MOV DISWORK,#00H
MOV LEDBIT,#0FEH
MOV TIMECOUNT,#100 ;
MOV TIMECOUNT1,#05
MOV TMOD,#51H ;定时器0方式1定时,定时器1方式1计数
MOV TH0,#0FCH ;定时10毫秒
MOV TL0,#18H
MOV TH1,#00H ;定时器1用于计数
MOV TL1,#00H
MOV IE,#8AH ;CPU开中断,T0开中断,T1开中断
SETB TR1
SETB TR0
ret
;************************************************************
;HB2 : 功能:双字节十六进制整数转换成双字节BCD码整数
;入口条件:待转换的双字节十六进制整数在R5,R6、R7中。
;出口信息:转换后的三字节BCD码整数在R1,R2,R3,R4中。
;影响资源:PSW、A、R2~R7 堆栈需求: 2字节
HB2: CLR A ;BCD码初始化
MOV R1,A
MOV R2,A
MOV R3,A
MOV R4,A
MOV R0,#18H ;转换双字节十六进制整数
HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5
RLC A
MOV R5,A
MOV A,R4 ;BCD码带进位自身相加,相当于乘2
ADDC A,R4
DA A ;十进制调整
MOV R4,A
MOV A,R3
ADDC A,R3
DA A
MOV R3,A
MOV A,R2
ADDC A,R2
DA A
MOV R2,A
MOV A,R1
ADDC A,R1
MOV R1,A;双字节十六进制数的万位数不超过6,不用调整
DJNZ R0,HB3 ;处理完16bit
RET
;DBCD 功能:拆分BCD码整数
;入口条件:R3、R4.R5。
;出口信息:转换后从高位到低位分别在60H~65H中。
;影响资源:A、B
DBCD:MOV A,R2
MOV B,#10H
DIV AB
MOV 60H,A
MOV 61H,B
MOV A,R3
MOV B,#10H
DIV AB
MOV 62H,A
MOV 63H,B
MOV A,R4
MOV B,#10H
DIV AB
MOV 64H,A
MOV 65H,B
RET
;*************************************************************
;;DIS 功能:显示子程序
;入口条件:待转换的双字节十六进制整数在60H~65H中。
;出口信息:
;影响资源:PSW、A、R0
DIS:
MOV DPTR,#TAB
MOV A,#5FH
ADD A,LEDCOUNT ;LEDCOUNT从左到右543210
MOV R0,A
MOV A,@R0 ;当地址大于等于66H显示
MOVC A,@A+DPTR
MOV P0,A
MOV A,LEDBIT
MOV P2,A
RL A
MOV LEDBIT,A
DJNZ LEDCOUNT,DISOUT
MOV LEDCOUNT,#06H
MOV LEDBIT,#0FEH
DISOUT:RET
;****************************************************中断子程序
INT1:PUSH A ; 增加扩展位
PUSH PSW
PUSH DPH
PUSH DPL
MOV TH1,#00H ;定时器1用于计数
MOV TL1,#00H
INC TIME1HTEMP ;扩展计数范围
POP DPL
POP DPH
POP PSW
POP A
RETI
INT0:
MOV TH0,#0FCH ;定时2毫秒
MOV TL0,#18H
SETB TIME2MS
DJNZ TIMECOUNT,INT01
MOV TIMECOUNT,#100
DJNZ TIMECOUNT1,INT01
MOV TIMECOUNT1,#05
MOV TIME1H,TIME1HTEMP
MOV TIME1M,TH1
MOV TIME1L,TL1
MOV TH1,#00H
MOV TL1,#00H
MOV TIME1HTEMP,#00H
SETB TIME1S
INT01:RETI
;0~10断码表
TAB:db 0c0h,0f9h,0a4h
db 0b0h,99h,92h,82h
db 0f8h,80h,90h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -