📄 lesson9.lst
字号:
A51 MACRO ASSEMBLER LESSON9 05/03/2008 03:02:58 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN lesson9.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE lesson9.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
CFA0 1 PORT EQU 0CFA0H
0023 2 BUF EQU 23H ;存放计数值
0022 3 SBF EQU 22H ;存放秒值
0021 4 MBF EQU 21H ;存放分值
---- 5 CSEG AT 0000H
0000 024100 6 LJMP START
---- 7 CSEG AT 401BH
401B 02416E 8 LJMP CLOCK
---- 9 CSEG AT 4100H
4100 7840 10 START: MOV R0,#40H ;40H-45H是显示缓冲区,依次存放
4102 7400 11 MOV A,#00H ;分高位、分低位,0A,0A(横线)
4104 F6 12 MOV @R0,A ;以及秒高位、秒底位
4105 08 13 INC R0
4106 F6 14 MOV @R0,A
4107 08 15 INC R0
4108 740A 16 MOV A,#0AH
410A F6 17 MOV @R0,A
410B 08 18 INC R0
410C F6 19 MOV @R0,A
410D 08 20 INC R0
410E 7400 21 MOV A,#00H
4110 F6 22 MOV @R0,A
4111 08 23 INC R0
4112 F6 24 MOV @R0,A
25
4113 758910 26 MOV TMOD,#10H ;定时器1初始化为方式1
4116 758D38 27 MOV TH1,#38H ;置时间常数,延时0.1秒
4119 758B00 28 MOV TL1,#00H
29
411C 752300 30 MOV BUF,#00H ;置0
411F 752200 31 MOV SBF,#00H
4122 752100 32 MOV MBF,#00H
33
4125 D2AB 34 SETB ET1
4127 D2AF 35 SETB EA
4129 D28E 36 SETB TR1
37
412B 7840 38 DS1: MOV R0,#40H ;置显示缓冲区首址
412D 7A20 39 MOV R2,#20H ;置扫描初值,点亮最左边的LED6
412F 90CFA0 40 DS2: MOV DPTR,#PORT
4132 E6 41 MOV A,@R0 ;得到的段显码输出到段数据口
4133 3154 42 ACALL TABLE
4135 F0 43 MOVX @DPTR,A
44
4136 EA 45 MOV A,R2 ;向位数据口P1输出位显码
4137 F4 46 CPL A
4138 F590 47 MOV P1,A
48
413A 7BFF 49 MOV R3,#0FFH ;延时一小段时间
413C 00 50 DEL: NOP
413D DBFD 51 DJNZ R3,DEL
52
413F 08 53 INC R0 ;显示缓冲字节加一
4140 C3 54 CLR C
4141 EA 55 MOV A,R2
4142 13 56 RRC A ;显码右移一位
4143 FA 57 MOV R2,A ;最末一位是否显示完毕?,如无则
4144 70E9 58 JNZ DS2 ;继续往下显示
A51 MACRO ASSEMBLER LESSON9 05/03/2008 03:02:58 PAGE 2
59
4146 7845 60 MOV R0,#45H
4148 E522 61 MOV A,SBF ;把秒值分别放于44H,45H中
414A 3162 62 ACALL GET
63
414C 18 64 DEC R0 ;跳过负责显示"-"的两个字节
414D 18 65 DEC R0
414E E521 66 MOV A,MBF ;把分值分别放入40H,41H中
67
4150 3162 68 ACALL GET
4152 80D7 69 SJMP DS1 ;转DS1从头显示起
4154 04 70 TABLE: INC A ;取与数字对应的段码
4155 83 71 MOVC A,@A+PC
4156 22 72 RET
4157 3F065B4F 73 DB 3FH,06H,5BH,4FH,66H,6DH,7DH, 07H, 7FH,6FH, 40H
415B 666D7D07
415F 7F6F40
74
4162 F9 75 GET: MOV R1,A ;把从分或秒字节中取来的值的高
4163 540F 76 ANL A,#0FH ;位屏蔽掉,并送入缓冲区
4165 F6 77 MOV @R0,A
78
4166 18 79 DEC R0
4167 E9 80 MOV A,R1 ;把从分或秒字节中取来的值的低
4168 C4 81 SWAP A ;位屏蔽掉,并送入缓冲区
4169 540F 82 ANL A,#0FH
416B F6 83 MOV @R0,A
416C 18 84 DEC R0 ;R0指针下移一位
416D 22 85 RET
416E 758BAF 86 CLOCK: MOV TL1,#0AFH ;置时间常数
4171 758D3C 87 MOV TH1,#3CH
4174 C0D0 88 PUSH PSW
4176 C0E0 89 PUSH ACC
4178 0523 90 INC BUF ;计数加一
417A E523 91 MOV A,BUF ;计到10否?没有则转到QUIT退出中断
417C B40A1B 92 CJNE A,#0AH,QUIT
417F 752300 93 MOV BUF,#00H ;置初值
4182 E522 94 MOV A,SBF
4184 04 95 INC A ;秒值加一,经十进制调整后放入
4185 D4 96 DA A ;秒字节
4186 F522 97 MOV SBF,A
4188 B4600F 98 CJNE A,#60H,QUIT ;计到60否?没有则转到QUIT退出中断
418B 752200 99 MOV SBF,#00H ;是,秒字节清零
418E E521 100 MOV A,MBF
4190 04 101 INC A ;分值加一,经十进制调整后放入
4191 D4 102 DA A ;分字节
4192 F521 103 MOV MBF,A
4194 B46003 104 CJNE A,#60H,QUIT ;分值为60否?不是则退出中断
4197 752100 105 MOV MBF,#00H ;是,清零
419A D0E0 106 QUIT: POP ACC
419C D0D0 107 POP PSW
419E 32 108 RETI ;中断返回
109 END
A51 MACRO ASSEMBLER LESSON9 05/03/2008 03:02:58 PAGE 3
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
BUF. . . . . . . . N NUMB 0023H A
CLOCK. . . . . . . C ADDR 416EH A
DEL. . . . . . . . C ADDR 413CH A
DS1. . . . . . . . C ADDR 412BH A
DS2. . . . . . . . C ADDR 412FH A
EA . . . . . . . . B ADDR 00A8H.7 A
ET1. . . . . . . . B ADDR 00A8H.3 A
GET. . . . . . . . C ADDR 4162H A
MBF. . . . . . . . N NUMB 0021H A
P1 . . . . . . . . D ADDR 0090H A
PORT . . . . . . . N NUMB CFA0H A
PSW. . . . . . . . D ADDR 00D0H A
QUIT . . . . . . . C ADDR 419AH A
SBF. . . . . . . . N NUMB 0022H A
START. . . . . . . C ADDR 4100H A
TABLE. . . . . . . C ADDR 4154H A
TH1. . . . . . . . D ADDR 008DH A
TL1. . . . . . . . D ADDR 008BH A
TMOD . . . . . . . D ADDR 0089H A
TR1. . . . . . . . B ADDR 0088H.6 A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -