📄 2.lst
字号:
页 1
01-29-03
01:08:17
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; AT89C2051时钟程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; 定时器T0、T1溢出周期为50MS,T0为秒计数用, T1为调整时闪烁用,
; P3.7为调整按钮,P1口 为字符输出口,采用共阳显示管。
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 中断入口程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
ORG 0000H ;程序执行开始地址
0000 020024 LJMP START ;跳到标号START执行
ORG 0003H ;外中断0中断程序入口
0003 32 RETI ;外中断0中断返回
ORG 000BH ;定时器T0中断程序入口
000B 020055 LJMP INTT0 ;跳至INTTO执行
ORG 0013H ;外中断1中断程序入口
0013 32 RETI ;外中断1中断返回
ORG 001BH ;定时器T1中断程序入口
001B 0200A9 LJMP INTT1 ;跳至INTT1执行
ORG 0023H ;串行中断程序入口地址
0023 32 RETI ;串行中断程序返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 主 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
0024 7870 START: MOV R0,#70H ;清70H-7AH共11个内存单元
0026 7F0B MOV R7,#0BH ;
0028 7600 CLEARDISP: MOV @R0,#00H ;
002A 08 INC R0 ;
002B DFFB DJNZ R7,CLEARDISP ;
002D 752000 MOV 20H,#00H ;清20H(标志用)
0030 757A0A MOV 7AH,#0AH ;放入"熄灭符"数据
0033 758911 MOV TMOD,#11H ;设T0、T1为16位定时器
0036 758AB0 MOV TL0,#0B0H ;50MS定时初值(T0计时用)
0039 758C3C MOV TH0,#3CH ;50MS定时初值
003C 758BB0 MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)
003F 758D3C MOV TH1,#3CH ;50MS定时初值
0042 D2AF SETB EA ;总中断开放
0044 D2A9 SETB ET0 ;允许T0中断
0046 D28C SETB TR0 ;开启T0定时器
0048 7C14 MOV R4,#14H ;1秒定时用初值(50MS×20)
004A 12019A START1: LCALL DISPLAY ;调用显示子程序
004D 30B702 JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序
0050 80F8 SJMP START1 ;P3.7口为1时跳回START1
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例2\2.ASM
页 2
01-29-03
01:08:17
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
0052 020103 SETMM1: LJMP SETMM ;转到时间调整程序SETMM
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 1秒计时程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中断服务程序
0055 C0E0 INTT0: PUSH ACC ;累加器入栈保护
0057 C0D0 PUSH PSW ;状态字入栈保护
0059 C2A9 CLR ET0 ;关T0中断允许
005B C28C CLR TR0 ;关闭定时器T0
005D 74B7 MOV A,#0B7H ;中断响应时间同步修正
005F 258A ADD A,TL0 ;低8位初值修正
0061 F58A MOV TL0,A ;重装初值(低8位修正值)
0063 743C MOV A,#3CH ;高8位初值修正
0065 358C ADDC A,TH0 ;
0067 F58C MOV TH0,A ;重装初值(高8位修正值)
0069 D28C SETB TR0 ;开启定时器T0
006B DC29 DJNZ R4, OUTT0 ;20次中断未到中断退出
006D 7C14 ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值
006F 7871 MOV R0,#71H ;指向秒计时单元(71H-72H)
0071 11EC ACALL ADD1 ;调用加1程序(加1秒操作)
0073 EB MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)
0074 C3 CLR C ;清进位标志
0075 B46000 CJNE A,#60H,ADDMM ;
0078 401C ADDMM: JC OUTT0 ;小于60秒时中断退出
007A 11FE ACALL CLR0 ;大于或等于60秒时对秒计时单元清0
007C 7877 MOV R0,#77H ;指向分计时单元(76H-77H)
007E 11EC ACALL ADD1 ;分计时单元加1分钟
0080 EB MOV A,R3 ;分数据放入A
0081 C3 CLR C ;清进位标志
0082 B46000 CJNE A,#60H,ADDHH ;
0085 400F ADDHH: JC OUTT0 ;小于60分时中断退出
0087 11FE ACALL CLR0 ;大于或等于60分时分计时单元清0
0089 7879 MOV R0,#79H ;指向小时计时单元(78H-79H)
008B 11EC ACALL ADD1 ;小时计时单元加1小时
008D EB MOV A,R3 ;时数据放入A
008E C3 CLR C ;清进位标志
008F B42400 CJNE A,#24H,HOUR ;
0092 4002 HOUR: JC OUTT0 ;小于24小时中断退出
0094 11FE ACALL CLR0 ;大于或等于24小时小时计时单元清0
0096 857672 OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移
0099 857773 MOV 73H,77H ;入对应显示单元
009C 857874 MOV 74H,78H ;
009F 857975 MOV 75H,79H ;
00A2 D0D0 POP PSW ;恢复状态字(出栈)
00A4 D0E0 POP ACC ;恢复累加器
00A6 D2A9 SETB ET0 ;开放T0中断
00A8 32 RETI ;中断返回
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例2\2.ASM
页 3
01-29-03
01:08:17
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 闪动调时 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T1中断服务程序,用作时间调整时调整单元闪烁指示
00A9 C0E0 INTT1: PUSH ACC ;中断现场保护
00AB C0D0 PUSH PSW ;
00AD 758BB0 MOV TL1, #0B0H ;装定时器T1定时初值
00B0 758D3C MOV TH1, #3CH ;
00B3 DA13 DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)
00B5 7A06 MOV R2,#06H ;重装0.3秒定时用初值
00B7 B202 CPL 02H ;0.3秒定时到对闪烁标志取反
00B9 200211 JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"
00BC 857672 MOV 72H,76H ;02H位为0时正常显示
00BF 857773 MOV 73H,77H ;
00C2 857874 MOV 74H,78H ;
00C5 857975 MOV 75H,79H ;
00C8 D0D0 INTT1OUT: POP PSW ;恢复现场
00CA D0E0 POP ACC ;
00CC 32 RETI ;中断退出
00CD 20010E FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制
00D0 857A72 MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分
00D3 857A73 MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据
00D6 857874 MOV 74H,78H ;
00D9 857975 MOV 75H,79H ;
00DC 01C8 AJMP INTT1OUT ;转中断退出
00DE 857672 FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时
00E1 857773 MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示
00E4 857A74 MOV 74H,7AH ;
00E7 857A75 MOV 75H,7AH ;
00EA 01C8 AJMP INTT1OUT ;转中断退出
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 加1子 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
00EC E6 ADD1: MOV A,@R0 ;取当前计时单元数据到A
00ED 18 DEC R0 ;指向前一地址
00EE C4 SWAP A ;A中数据高四位与低四位交换
00EF 46 ORL A,@R0 ;前一地址中数据放入A中低四位
00F0 2401 ADD A,#01H ;A加1操作
00F2 D4 DA A ;十进制调整
00F3 FB MOV R3,A ;移入R3寄存器
00F4 540F ANL A,#0FH ;高四位变0
00F6 F6 MOV @R0,A ;放回前一地址单元
00F7 EB MOV A,R3 ;取回R3中暂存数据
00F8 08 INC R0 ;指向当前地址单元
00F9 C4 SWAP A ;A中数据高四位与低四位交换
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例2\2.ASM
页 4
01-29-03
01:08:17
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
00FA 540F ANL A,#0FH ;高四位变0
00FC F6 MOV @R0,A ;数据放入当削地址单元中
00FD 22 RET ;子程序返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 清零程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;对计时单元复零用
00FE E4 CLR0: CLR A ;清累加器
00FF F6 MOV @R0,A ;清当前地址单元
0100 18 DEC R0 ;指向前一地址
0101 F6 MOV @R0,A ;前一地址单元清0
0102 22 RET ;子程序返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 时钟调整程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;当调时按键按下时进入此程序
0103 C2A9 SETMM: cLR ET0 ;关定时器T0中断
0105 C28C CLR TR0 ;关闭定时器T0
0107 1201D5 LCALL DL1S ;调用1秒延时程序
010A 20B726 JB P3.7,CLOSEDIS ;键按下时间小于1秒,关闭显示(省电)
010D 7A06 MOV R2,#06H ;进入调时状态,赋闪烁定时初值
010F D2AB SETB ET1 ;允许T1中断
0111 D28E SETB TR1 ;开启定时器T1
0113 30B76B SET2: JNB P3.7,SET1 ;P3.7口为0(键未释放),等待
0116 D200 SETB 00H ;键释放,分调整闪烁标志置1
0118 20B76B SET4: JB P3.7,SET3 ;等待键按下
011B 1201DC LCALL DL05S ;有键按下,延时0.5秒
011E 30B725 JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态
0121 7877 MOV R0,#77H ;按下时间小于0.5秒加1分钟操作
0123 1200EC LCALL ADD1 ;调用加1子程序
0126 EB MOV A,R3 ;取调整单元数据
0127 C3 CLR C ;清进位标志
0128 B46000 CJNE A,#60H,HHH ;调整单元数据与60比较
012B 40EB HHH: JC SET4 ;调整单元数据小于60转SET4循环
012D 1200FE LCALL CLR0 ;调整单元数据大于或等于60时清0
0130 C3 CLR C ;清进位标志
0131 2118 AJMP SET4 ;跳转到SET4循环
0133 D2A9 CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。开T0中断
0135 D28C SETB TR0 ;开启T0定时器(开时钟)
0137 20B7FD CLOSE: JB P3.7,CLOSE ;无按键按下,等待。
013A 12019A LCALL DISPLAY ;有键按下,调显示子程序延时削抖
013D 20B7F7 JB P3.7,CLOSE ;是干扰返回CLOSE等待
0140 30B7FD WAITH: JNB P3.7,WAITH ;等待键释放
0143 02004A LJMP START1 ;返回主程序(LED数据显示亮)
0146 C200 SETHH: CLR 00H ;分闪烁标志清除(进入调小时状态)
0148 30B740 SETHH1: JNB P3.7,SET5 ;等待键释放
C:\MY DOCUMENTS\2003.02.12书稿\配套光盘源程序\实例2\2.ASM
页 5
01-29-03
01:08:17
伟福汇编器 V5.00 Copyright (c) 1989, 2001 by CHY
地址 机器码 源程序
014B D201 SETB 01H ;小时调整标志置1
014D 20B740 SET6: JB P3.7,SET7 ;等待按键按下
0150 1201DC LCALL DL05S ;有键按下延时0.5秒
0153 30B711 JNB P3.7,SETOUT ;按下时间大于0.5秒退出时间调整
0156 7879 MOV R0,#79H ;按下时间小于0.5秒加1小时操作
0158 1200EC LCALL ADD1 ;调加1子程序
015B EB MOV A,R3 ;
015C C3 CLR C ;
015D B42400 CJNE A,#24H,HOUU ;计时单元数据与24比较
0160 40EB HOUU: JC SET6 ;小于24转SET6循环
0162 1200FE LCALL CLR0 ;大于或等于24时清0操作
0165 214D AJMP SET6 ;跳转到SET6循环
0167 30B72B SETOUT: JNB P3.7,SETOUT1 ;调时退出程序。等待键释放
016A 12019A LCALL DISPLAY ;延时削抖
016D 30B7F7 JNB P3.7,SETOUT ;是抖动,返回SETOUT再等待
0170 C201 CLR 01H ;清调小时标志
0172 C200 CLR 00H ;清调分标志
0174 C202 CLR 02H ;清闪烁标志
0176 C28E CLR TR1 ;关闭定时器T1
0178 C2AB CLR ET1 ;关定时器T1中断
017A D28C SETB TR0 ;开启定时器T0
017C D2A9 SETB ET0 ;开定时器T0中断(计时开始)
017E 02004A LJMP START1 ;跳回主程序
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -