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

📄 clock.lst

📁 at89s51单片机开发板演示试验
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  CLOCK                                                                04/20/2005 20:19:34 PAGE     1


MACRO ASSEMBLER A51 V1.05
OBJECT MODULE PLACED IN CLOCK.OBJ
ASSEMBLER INVOKED BY: C:\MANLEY\PMEDWIN\A51.EXE CLOCK.ASM DB

LOC  OBJ            LINE     SOURCE

0000                   1     ORG 0000H
0000 2100              2             AJMP MAIN
000B                   3             ORG 000BH
000B 2131              4             AJMP TIME
                       5            ;以下是主程序
0100                   6     ORG 0100H
0100 752000            7     MAIN:   MOV 20H,#00H        ;计时的0.05秒?秒?时和分单元清0
0103 752100            8                 MOV 21H,#00H
0106 752200            9                     MOV 22H,#00H
0109 752300           10                     MOV 23H,#00H
010C 75B802           11     MOV IP,#02H                 ;中断优先级寄存器IP设置为定时中断0优先
010F D2AF             12                     SETB   EA          ;开中断
0111 D2A9             13             SETB   ET0         ;开定时/计数中断T0
0113 758901           14                     MOV TMOD,#01H   ;工作方式设置为定时器T0的方式1
0116 758AB0           15                     MOV TL0,#0B0H
0119 758C3C           16                     MOV TH0,#3CH
011C D28C             17                     SETB TR0                    ;启动定时器工作
011E 758140           18                     MOV SP,#40H             ;堆栈指针设为40H
0121 120173           19     NEXT:   LCALL DISP                  ;调用显示子程序
0124 1201E7           20                     LCALL KEY                   ;调按键判断子程序
0127 60F8             21                     JZ NEXT                    ;无键按下转NEXT
0129 12020D           22                     LCALL ANKEY             ;有键按下转按键处理子程序
012C 80F3             23                     SJMP NEXT                   ;按键处理完转NEXT
012E 00               24                     NOP
012F 00               25                     NOP
0130 00               26                     NOP
                      27     ;以下是定时中断处理程序
0131 C0E0             28     TIME:   PUSH ACC                    ;现场保护
0133 C0D0             29                     PUSH PSW
0135 758AB4           30                     MOV TL0,#0B4H       ;重置初值
0138 758C3C           31                     MOV TH0,#3CH
013B 0520             32                     INC 20H                 ;计时处理,20H中存放50ms
013D E520             33                     MOV A,20H
013F B4142A           34                     CJNE A,#20,RETI1   ;A的值不等20,则转RETI1
0142 752000           35                     MOV 20H,#00H      ;1秒钟到,20H清0
0145 E521             36                     MOV A,21H         ;将21H(存放秒)的内容送A
0147 2401             37                     ADD A,#01H        ;将21H中的内容加1,即定时20次后秒加1
0149 D4               38                     DA  A             ;十进制调整
014A F521             39                     MOV 21H,A         ;将调整后的A送21H
014C B4601D           40                     CJNE A,#60H,RETI1  ;21H中的内容不等于60则转RET1
014F 752100           41                     MOV 21H,#00H      ;1分钟到,21H(秒)清0
0152 E522             42                     MOV A,22H         ;将22H(存放分)中的内容送A
0154 2401             43                     ADD A,#01H        ;将22H中的加1,即60秒后分加1
0156 D4               44                     DA  A             ;十进制调整
0157 F522             45                 MOV 22H,A         ;将A的内容送22H
0159 B46010           46     CJNE A,#60H,RETI1  ;22H中的内容不等于60则转RET1
015C 752200           47     MOV 22H,#00H       ;一小时时间到,22H(分)清0
015F E523             48     MOV A,23H          ;将23H(存放小时)中的内容送A
0161 2401             49     ADD A,#01H         ;23H中的内容加1
0163 D4               50     DA  A               ;十进制调整
0164 F523             51     MOV 23H,A          ;将A的内容送23H
0166 B42403           52     CJNE A,#24H,RETI1  ;23H中的内容不等于24,转RET1
0169 752300           53     MOV 23H,#00H       ;时间到达24小时,23H(小时)清0
016C D0D0             54     RETI1:  POP PSW            ;恢复现场
016E D0E0             55                     POP ACC
0170 32               56                     RETI               ;中断返回
0171 00               57                     NOP
0172 00               58                     NOP
A51 MACRO ASSEMBLER  CLOCK                                                                04/20/2005 20:19:34 PAGE     2

                      59       ;以下是显示子程序
0173 532F10           60     DISP:   ANL 2FH,#10H      ;设置2FH的D4位为秒显示标志,以便处理秒后的小数点
0176 E521             61     MOV A,21H         ;将21H(秒)送A
0178 540F             62     ANL A,#0FH         ;取秒的低4位
017A 452F             63     ORL A,2FH          ;查带小数点的字形码,处理秒后的小数点
017C F52F             64     MOV 2FH,A          ;将秒的低4位送2FH
017E E521             65     MOV A,21H          ;将21H(秒)送A
0180 54F0             66     ANL A,#0F0H        ;取秒的高4位
0182 C4               67     SWAP  A             ;交换A的高4位和低4位
0183 F52E             68     MOV 2EH,A          ;将秒的高4位送2EH
0185 532D10           69     ANL 2DH,#10H      ;设置2DH的D4位为分显示标志,以便处理分后的小数点
0188 E522             70     MOV A,22H          ;将22H(分)送A
018A 540F             71     ANL A,#0FH          ;取分的低4位
018C 452D             72     ORL A,2DH          ;查带小数点的字形码,处理分后的小数点
018E F52D             73     MOV 2DH,A          ;将分的低4位送2DH
0190 E522             74     MOV A,22H           ;将22H送A
0192 54F0             75     ANL A,#0F0H         ;取分的高4位
0194 C4               76     SWAP  A              ;交换A的高4位和低4位
0195 F52C             77     MOV 2CH,A          ;将分的高4位送2CH
0197 532B10           78     ANL 2BH,#10H       ;设置2BH的D4小时显示标志,以便处理小时后的小数点
019A E523             79     MOV A,23H           ;将23H(小时)送A
019C 540F             80     ANL A,#0FH           ;取小时的低4位
019E 452B             81     ORL A,2BH            ;查带小数点的字形码,处理小时后的小数点
01A0 F52B             82     MOV 2BH,A           ;将小时的低4位送2BH
01A2 E523             83     MOV A,23H            ;将23H(小时)的内容送A
01A4 54F0             84     ANL A,#0F0H          ;取小时的高4位
01A6 C4               85     SWAP  A              ;交换A的高4位和低4位
01A7 F52A             86     MOV 2AH,A            ;将小时的高4位送2AH
01A9 782F             87     MOV R0,#2FH           ;显示偏移量
01AB 7B06             88     MOV R3,#06H           ;将6个显示器循环显示
01AD 9001C5           89     MOV DPTR,#TABLE      ;指向表首址
01B0 74FB             90     MOV A,#11111011B      ;将1111 1011B送A,准备动态扫描
01B2 F5F0             91     LOOP1: MOV B,A               ;将A存于B
01B4 F5A0             92     MOV P2,A             ;将A送P2位选端
01B6 E6               93     MOV A,@R0           ;将R0指针地址送A
01B7 93               94     MOVC A,@A+DPTR    ;查表
01B8 F580             95     MOV P0,A             ;送显示
01BA 7A80             96     MOV R2,#80H          ;延时
01BC DAFE             97     DJNZ R2,$
01BE 18               98     DEC R0                ;R0减1,以便进行小时?分和秒的切换
01BF E5F0             99     MOV A,B              ;将暂存在B中的内容送A
01C1 23              100     RL A                  ;左移1位
01C2 DBEE            101     DJNZ R3,LOOP1        ;6个显示器循环显示
01C4 22              102     RET
01C5 C0F9A4B0        103     TABLE: DB  0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;不带小数点
01C9 999282F8
01CD 8090
01CF 00000000        104     DB 00H,00H,00H,00H,00H,00H
01D3 0000
                     105     ;若2FH?2DH?2BH的第4位为0,可以从以上16个不带小数点的字形码中查找
01D5 40792430        106     DB  40H,79H,24H,30H,19H,12H,2H,78H,00H,10H;带小数点
01D9 19120278
01DD 0010
01DF 00000000        107     DB 00H,00H,00H,00H,00H,00H
01E3 0000
                     108     ;若2FH?2DH?2BH的第4位为1,可以从以上16个带小数点的字形码中查找
01E5 00              109     NOP
01E6 00              110     NOP
                     111     ;按键判断子程序
01E7 75B0FF          112     KEY:  MOV P3,#0FFH         ;向P3口写1
01EA E5B0            113     MOV A,P3              ;读P3口的状态,按键按下时,相应的位变为低电平
01EC F4              114     CPL A                  ;将A取反,按键按下时,相应的位变为高电平
01ED 543C            115     ANL A,#00111100B      ;将A与0011 1100B相与,以获取(P3.2~P3.5)是否有键被按下
01EF 6019            116     JZ RETX               ;若A的值为0,说明无键按下,转RETX
01F1 120173          117     LCALL DISP ;           ;若A的值为1,说明有键按下,调DISP显示子程序,延时
01F4 120173          118     LCALL DISP
A51 MACRO ASSEMBLER  CLOCK                                                                04/20/2005 20:19:34 PAGE     3

01F7 E5B0            119     MOV A,P3               ;再读P3口的状态
01F9 F4              120     CPL A
01FA 543C            121     ANL A, #00111100B
01FC 600C            122     JZ RETX               ;若A的值为0,说明是键抖动
01FE FE              123     MOV R6,A             ;若A的值为1,说明有键按下,将键值存入R6
01FF 120173          124     LOOP2: LCALL  DISP           ;调显示子程序
0202 E5B0            125     MOV A,P3             ;读P3口的状态
0204 F4              126     CPL A 
0205 543C            127     ANL A,#00111100B
0207 70F6            128     JNZ LOOP2           ;若A的值不等于0,说明键未释放,转LOOP2,等待键释放
0209 EE              129     MOV A,R6            ;若A的值为0,说明键已释放,将R6中的键值送A
020A 22              130     RETX: RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -