📄 16x16_80c52.lst
字号:
A51 MACRO ASSEMBLER 16X16_80C52 11/24/2008 12:05:32 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN 16X16_80C52.OBJ
ASSEMBLER INVOKED BY: E:\Program Files\keil\C51\BIN\A51.EXE 16X16_80C52.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
0030 1 ZISHU EQU 30H ;字数
0031 2 SHOWTIME EQU 31H ;一个字重复扫描的次数
0032 3 SAOMIAO EQU 32H ;扫描指针
0033 4 QUMA EQU 33H ;取码指针
0034 5 DIS_BUF_C EQU 34H ;缓冲区字数,这里是2
0035 6 OFFSET EQU 35H ;取码指针偏移量
7 ;********************************************
0040 8 DIS_BUFL EQU 40H ;显示缓冲低字节区(40H~60H攻32字节)
0060 9 DIS_BUFH EQU 60H ;显示缓冲高字节区(60H~80H攻32字节)
0080 10 LOD_BUFL EQU 80H ;加载缓冲低字节区(80H~90H)
0090 11 LOD_BUFH EQU 90H ;加载缓冲高字节区(90H~A0H)
0000 12 ORG 0000H
0000 020100 13 LJMP START
0100 14 ORG 0100H
0100 15 START:
0100 759800 16 MOV SCON,#00H ;串行口初始化为方式0
0103 75300E 17 MOV ZISHU,#14
0106 12017B 18 LCALL CLRBUF ;把显示缓冲区清零
0109 9001F8 19 MOV DPTR,#TABLE
010C AA30 20 MOV R2,ZISHU
21 ; SETB P1.4 ;初始状态译码器无效
010E 7880 22 NEXT: MOV R0,#LOD_BUFL
0110 7990 23 MOV R1,#LOD_BUFH
0112 120184 24 LCALL LOADING ;把字型码加载到加载缓冲区
0115 7B10 25 MOV R3,#16 ;这个字是否每一行都移动了?
0117 120198 26 LOOP3: LCALL SHIFT ;把显示缓冲区内的字型移位
011A 75310A 27 MOV SHOWTIME,#10
011D 7C10 28 LOOP2: MOV R4,#16 ;一个字需要扫描的16次行
011F 753200 29 MOV SAOMIAO,#0H ;扫描指针清零
0122 753300 30 MOV QUMA,#0H ;取码指针清零
0125 E532 31 LOOP1: MOV A,SAOMIAO
32
0127 F590 33 MOV P1,A ;扫描指针输入
0129 0532 34 INC SAOMIAO ;扫描指针+1
012B 753402 35 MOV DIS_BUF_C,#2H ;缓冲区有2个字
012E 120142 36 LCALL DIS_LINE
0131 0533 37 INC QUMA ;取码指针+1
0133 1201EF 38 LCALL DELAY
39 ; CLR P1.4
0136 DCED 40 DJNZ R4,LOOP1 ;一个字需要扫描的16次行
0138 D531E2 41 DJNZ SHOWTIME,LOOP2 ;一个字的显示时间是否完成?
013B DBDA 42 DJNZ R3,LOOP3 ;是否一个字的每一行的移动了
013D DACF 43 DJNZ R2,NEXT
44
013F 02013F 45 LJMP $
46 ;****************************************************************************
0142 47 DIS_LINE: ;输入一行子程序,入口参数DIS_BUF_C,与缓冲区字数相等
0142 C0D0 48 PUSH PSW
0144 C0E0 49 PUSH ACC
0146 753500 50 MOV OFFSET,#0H ;取码指针偏移量,多一个字就多+16
0149 7840 51 NE1: MOV R0,#DIS_BUFL
014B E8 52 MOV A,R0
014C 2533 53 ADD A,QUMA
014E 2535 54 ADD A,OFFSET
0150 F8 55 MOV R0,A
0151 E6 56 MOV A,@R0
0152 C299 57 CLR TI
0154 F599 58 MOV SBUF,A
A51 MACRO ASSEMBLER 16X16_80C52 11/24/2008 12:05:32 PAGE 2
0156 3099FD 59 JNB TI,$
0159 C299 60 CLR TI ;清发送完标志
015B 7860 61 MOV R0,#DIS_BUFH
015D E8 62 MOV A,R0
015E 2533 63 ADD A,QUMA
0160 2535 64 ADD A,OFFSET
0162 F8 65 MOV R0,A
0163 E6 66 MOV A,@R0
0164 C299 67 CLR TI
0166 F599 68 MOV SBUF,A
0168 3099FD 69 JNB TI,$
016B C299 70 CLR TI ;清发送完标志
71
016D E535 72 MOV A,OFFSET
016F 2410 73 ADD A,#16 ;取下一个字需要加16的偏移量
0171 F535 74 MOV OFFSET,A
0173 D534D3 75 DJNZ DIS_BUF_C,NE1
0176 D0E0 76 POP ACC
0178 D0D0 77 POP PSW
017A 22 78 RET
79
80 ;**********************************************************************************
81 ;把显示缓冲区清零
017B 82 CLRBUF:
017B 7840 83 MOV R0,#DIS_BUFL
017D 7600 84 L1: MOV @R0,#0
017F 08 85 INC R0
0180 B880FA 86 CJNE R0,#80H,L1
0183 22 87 RET
88 ;**********************************************************************************
89 ;把字型码加载到加载缓冲区
0184 90 LOADING:
0184 C002 91 PUSH 02h ;push r2
0186 7A10 92 MOV R2,#16
0188 93 L2:
0188 7400 94 MOV A,#0
018A 93 95 MOVC A,@A+DPTR
018B F6 96 MOV @R0,A ;把偶数个数字码存放在R0开始的缓冲区,共可以存放16个字码
018C 08 97 INC R0
018D A3 98 INC DPTR
018E E4 99 CLR A
018F 93 100 MOVC A,@A+DPTR
0190 F7 101 MOV @R1,A ;把奇数个数字码存放在R1开始的缓冲区,共可以存放16个字码
0191 09 102 INC R1
0192 A3 103 INC DPTR
0193 DAF3 104 DJNZ R2,L2
0195 D002 105 POP 02h ;pop r2
0197 22 106 RET
107 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0198 108 SHIFT:
0198 C0D0 109 PUSH PSW
019A C0E0 110 PUSH ACC
019C D2D4 111 SETB RS1 ;选择另外一组工作寄存器
019E 7B00 112 MOV R3,#00H ;偏移量
01A0 7C10 113 MOV R4,#16
01A2 114 LOOPS:
01A2 C3 115 CLR C ;清进位标志C
01A3 7490 116 MOV A,#LOD_BUFH
01A5 2B 117 ADD A,R3
01A6 F8 118 MOV R0,A
01A7 E6 119 MOV A,@R0
01A8 33 120 RLC A ;带进位左移,高字节的最高位移进Cy
01A9 F6 121 MOV @R0,A ;移位后放回缓冲区
01AA 7480 122 MOV A,#LOD_BUFL
01AC C0D0 123 PUSH PSW ;保护Cy,避免ADD进位影响
01AE 2B 124 ADD A,R3
A51 MACRO ASSEMBLER 16X16_80C52 11/24/2008 12:05:32 PAGE 3
01AF F8 125 MOV R0,A
01B0 E6 126 MOV A,@R0
01B1 D0D0 127 POP PSW
01B3 33 128 RLC A ;高字节最高位移进低字节最低位 低字节高位进入Cy
01B4 F6 129 MOV @R0,A
130
01B5 7460 131 MOV A,#DIS_BUFH
01B7 C0D0 132 PUSH PSW
01B9 2B 133 ADD A,R3
01BA 2410 134 ADD A,#16 ;取下一个字的高字节需要+16的偏移量
01BC F8 135 MOV R0,A
01BD E6 136 MOV A,@R0
01BE D0D0 137 POP PSW
01C0 33 138 RLC A
01C1 F6 139 MOV @R0,A
140
01C2 7440 141 MOV A,#DIS_BUFL
01C4 C0D0 142 PUSH PSW
01C6 2B 143 ADD A,R3
01C7 2410 144 ADD A,#16
01C9 F8 145 MOV R0,A
01CA E6 146 MOV A,@R0
01CB D0D0 147 POP PSW
01CD 33 148 RLC A
01CE F6 149 MOV @R0,A
150
01CF 7460 151 MOV A,#DIS_BUFH ;显示缓冲区地址送A
01D1 C0D0 152 PUSH PSW
01D3 2B 153 ADD A,R3
01D4 F8 154 MOV R0,A
01D5 E6 155 MOV A,@R0
01D6 D0D0 156 POP PSW
01D8 33 157 RLC A ;上缓冲区低字节的高位进入 这个缓冲区高字节低位,
01D9 F6 158 MOV @R0,A
159
01DA 7440 160 MOV A,#DIS_BUFL
01DC C0D0 161 PUSH PSW
01DE 2B 162 ADD A,R3
01DF F8 163 MOV R0,A
01E0 E6 164 MOV A,@R0
01E1 D0D0 165 POP PSW
01E3 33 166 RLC A
01E4 F6 167 MOV @R0,A
168
169
170
01E5 0B 171 INC R3 ;偏移量+1,准备移下一对字节(下一行)
01E6 DCBA 172 DJNZ R4,LOOPS ;一个字的16行是否都移动了?
01E8 C2D4 173 CLR RS1
01EA D0E0 174 POP ACC
01EC D0D0 175 POP PSW
01EE 22 176 RET
177
178 ;***********************************************************************************
01EF 179 DELAY:
01EF D2D3 180 SETB RS0
01F1 7AC8 181 MOV R2,#200
01F3 DAFE 182 J: DJNZ R2,J
01F5 C2D3 183 CLR RS0
01F7 22 184 RET
185 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
186
01F8 187 TABLE :
188
01F8 00007FFC 189 DB 00H, 00H, 7fH, 0fcH, 7fH, 0fcH, 66H, 0ccH
01FC 7FFC66CC
A51 MACRO ASSEMBLER 16X16_80C52 11/24/2008 12:05:32 PAGE 4
0200 66CC66CC 190 DB 66H, 0ccH, 66H, 0ccH, 66H, 0ccH, 66H, 0ccH
0204 66CC66CC
0208 6EFC7C7C 191 DB 6eH, 0fcH, 7cH, 7cH, 78H, 0cH, 60H, 0cH
020C 780C600C
0210 7FFC7FFC 192 DB 7fH, 0fcH, 7fH, 0fcH, 60H, 0cH, 00H, 00H
0214 600C0000
193
0218 0000180C 194 DB 00H, 00H, 18H, 0cH, 19H, 8cH, 19H, 8cH
021C 198C198C
0220 198C198C 195 DB 19H, 8cH, 19H, 8cH, 19H, 8cH, 19H, 8cH
0224 198C198C
0228 198C198C 196 DB 19H, 8cH, 19H, 8cH, 19H, 8cH, 31H, 8cH
022C 198C318C
0230 318C618C 197 DB 31H, 8cH, 61H, 8cH, 40H, 0cH, 00H, 00H
0234 400C0000
198
0238 18005AF8 199 DB 18h, 00h, 5ah, 0f8h, 5ah, 0f8h, 5ah, 0d8h
023C 5AF85AD8
0240 7ED800D8 200 DB 7eh, 0d8h, 00h, 0d8h, 0feh, 0d8h, 0feh, 0d8h
0244 FED8FED8
0248 06D87ED8 201 DB 06h, 0d8h, 7eh, 0d8h, 60h, 0d8h, 6eh, 0d8h
024C 60D86ED8
0250 7D9A731E 202 DB 7dh, 9ah, 73h, 1eh, 02h, 0eh, 00h, 00h
0254 020E0000
203
0258 00003FFC 204 DB 00h, 00h, 3fh, 0fch, 3fh, 0fch, 31h, 8ch
025C 3FFC318C
0260 3FFC3FFC 205 DB 3fh, 0fch, 3fh, 0fch, 31h, 8ch, 3fh, 0fch
0264 318C3FFC
0268 3FFC0100 206 DB 3fh, 0fch, 01h, 00h, 6dh, 8ch, 6ch, 86h
026C 6D8C6C86
0270 CC32CFF0 207 DB 0cch, 32h, 0cfh, 0f0h, 07h, 0f0h, 00h, 00h
0274 07F00000
208
209
0278 18601860 210 DB 18h, 60h, 18h, 60h, 59h, 0fch, 59h, 0fch, 7ch
027C 59FC59FC
0280 7C
0281 60FFFEDB 211 DB 60h, 0ffh, 0feh, 0dbh, 0feh, 18h, 18h
0285 FE1818
0288 3DFEF9FE 212 DB 3dh, 0feh, 0f9h, 0feh, 0d8h, 18h, 19h, 98h
028C D8181998
0290 18D81838 213 DB 18h, 0d8h, 18h, 38h, 18h, 30h, 00h, 00h
0294 18300000
214
215
0298 00000C60 216 DB 00H, 00H, 0cH, 60H, 0cH, 60H, 0cH, 60H
029C 0C600C60
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -