📄 89c52.lst
字号:
Page 1
04-08-01
09:06:42
WAVE assembler version 5.00 Copyright (c) 1989, 99 by CHY
Addr Code Source Line
ORG 0000H
0000 020100 LJMP 0100H ;开机或者复位后,跳转到INIT初始化程序
ORG 0100H
0100 7400 INIT: MOV A,#0
0102 90FD00 MOV DPTR,#0FD00H ;初始化行复位端口,置全零
0105 F0 MOVX @DPTR,A
0106 90FE00 MOV DPTR,#0FE00H ;初始化行置位端口,置全零
0109 F0 MOVX @DPTR,A
010A 74FF MOV A,#0FFH
010C 90FB00 MOV DPTR,#0FB00H
010F F0 MOVX @DPTR,A ;初始化列选择1端口,送无效字
0110 90F700 MOV DPTR,#0F700H
0113 F0 MOVX @DPTR,A ;初始化列选择2端口,送无效字
0114 90EF00 MOV DPTR,#0EF00H
0117 F0 MOVX @DPTR,A ;初始化列选择3端口,送无效字
0118 7840 LOGO: MOV R0,#40H ;R0 IS DISPLAY BUFFER POINTER
011A 7900 MOV R1,#0 ;R1 IS DATA POINTER
011C 7A3C MOV R2,#60 ;THERE ARE 40 Bytes Logo Buffer
011E E9 LOG1: MOV A,R1 ;MOVE DATA POINER TO "A"
011F 900300 MOV DPTR,#300H ;LOAD LOGO ADDRESS
0122 93 MOVC A,@A+DPTR ;MOVE DISPLAY DATA TO "A"
0123 F6 MOV @R0,A ;MOVE "A" TO BUFFER
0124 08 INC R0 ;INCREASE BUFFER POINTER
0125 09 INC R1 ;INCREASE DATA POINTER
0126 DAF6 DJNZ R2,LOG1 ;IF !(R2=0) THEN GOTO LOG1
0128 7840 MOV R0,#40H ;LOAD DISPLAY BUFFER ADDRESS TO R0
012A 1201D5 LCALL FIRST ;GOTO DISPLAY SUBPROGRAM
012D 90BF00 TEST: MOV DPTR,#0BF00H ;加载DATA标志端口地址
0130 E0 TES1: MOVX A,@DPTR ;读入DATA标志
0131 5401 ANL A,#01H ;屏蔽高7位
0133 60FB JZ TES1 ;为低,则继续查询DATA标志
0135 74FF MOV A,#0FFH
0137 F590 MOV P1,A ;要从P1口读入,先置全“1”
0139 E590 MOV A,P1 ;读入P1口数据
013B B4F0F2 CJNE A,#0F0H,TES1 ;若不为F0H则继续查询
013E 907F00 MOV DPTR,#07F00H ;加载ACK端口地址
0141 7401 MOV A,#01H ;屏蔽高7位
0143 F0 MOVX @DPTR,A ;ACK置高
0144 120289 CALL DELAY1S ;延时1S
0147 7400 MOV A,#0
0149 F0 MOVX @DPTR,A ;ACK置低
014A 7830 MAIN: MOV R0,#30H ;加载接收数据缓冲区起始地址指针
D:\飞机泊位系统\ASM\89C52.ASM
Page 2
04-08-01
09:06:42
WAVE assembler version 5.00 Copyright (c) 1989, 99 by CHY
Addr Code Source Line
014C 90BF00 MAI1: MOV DPTR,#0BF00H ;加载DATA标志端口地址
014F E0 MAI2: MOVX A,@DPTR ;读入主控制器数据标志
0150 5401 ANL A,#01H ;屏蔽A高7位
0152 60FB JZ MAI2 ;查询DATA信号是否为高
0154 74FF MOV A,#0FFH
0156 F590 MOV P1,A ;P1口要读入数据,先置全"1"
0158 E590 MOV A,P1 ;读入P1口的数据
015A C0E0 PUSH A ;压入最新接收的数据
015C F6 MOV @R0,A ;将接收数据写入接收数据缓冲区
015D 08 INC R0 ;指向下一个缓冲存储单元
015E 7401 MOV A,#01H
0160 907F00 MOV DPTR,#07F00H ;加载ACK端口地址
0163 F0 MOVX @DPTR,A ;ACK端口置高
0164 90BF00 MOV DPTR,#0BF00H ;加载DATA标志端口地址
0167 E0 MAI3: MOVX A,@DPTR
0168 5401 ANL A,#01H ;屏蔽高7位数据
016A 70FB JNZ MAI3 ;若DATA未变低,等待
016C 7400 MOV A,#0
016E 907F00 MOV DPTR,#07F00H ;加载ACK端口地址
0171 F0 MOVX @DPTR,A ;ACK端口置低
0172 D0E0 POP A ;弹出读入的数据
0174 B4FFD5 CJNE A,#0FFH,MAI1 ;若不是0FFH结束符,读下一数据
0177 900400 DECODE: MOV DPTR,#0400H ;加载显示字库地址指针
017A 7830 MOV R0,#30H ;加载接收缓存地址指针
017C 7940 MOV R1,#40H ;加载显示缓存地址指针
017E 08 DECO1: INC R0 ;接收缓存指针加1
017F E6 MOV A,@R0 ;取一个接收缓存中的数据
0180 B4FF03 CJNE A,#0FFH,DECO2 ;不是FFH结束符,则继续译码
0183 02019A LJMP DRIVE ;若为FFH结束符,转驱动显示
0186 7A04 DECO2: MOV R2,#4 ;一个字符字库占用5字节
0188 26 CAL: ADD A,@R0
0189 DAFD DJNZ R2,CAL ;计算字库存储区偏移量
018B 7A05 MOV R2,#5 ;一个字符字库占用5字节
018D C0E0 GET: PUSH A ;保护偏移量
018F 93 MOVC A,@A+DPTR ;取ROM字库中点阵显示数据
0190 F7 MOV @R1,A ;保存点阵显示数据至显示缓冲区
0191 D0E0 POP A ;恢复偏移量
0193 04 INC A ;取下一字节字库数据
0194 09 INC R1 ;显示缓存指针加1
0195 DAF6 DJNZ R2,GET ;不到5字节,继续取字库数据
0197 02017E LJMP DECO1 ;开始下一字符译码
019A 7840 DRIVE: MOV R0,#40H ;加载显示缓存起始地址
019C 7930 MOV R1,#30H ;判断显示模式
019E E7 MOV A,@R1
019F B4F103 CJNE A,#0F1H,NEXT1
01A2 0201B4 LJMP MODE1 ;F1H表示显示模式一
D:\飞机泊位系统\ASM\89C52.ASM
Page 3
04-08-01
09:06:42
WAVE assembler version 5.00 Copyright (c) 1989, 99 by CHY
Addr Code Source Line
01A5 B4F203 NEXT1: CJNE A,#0F2H,NEXT2 ;F2H表示显示模式二
01A8 0201BA LJMP MODE2
01AB B4F303 NEXT2: CJNE A,#0F3H,NEXT3 ;F3H表示显示模式三
01AE 0201C3 LJMP MODE3
01B1 0201CF NEXT3: LJMP MODE4 ;F4H表示显示MODE4
01B4 1201D5 MODE1: lCALL FIRST ;刷新第一块显示板
01B7 02014A LJMP MAIN ;返回主程序
01BA 1201D5 MODE2: LCALL FIRST ;刷新第1块显示板
01BD 12020E LCALL SECOND ;刷新第2块显示板
01C0 02014A LJMP MAIN ;返回主程序
01C3 1201D5 MODE3: LCALL FIRST ;刷新第1块显示板
01C6 12020E LCALL SECOND ;刷新第2块显示板
01C9 120247 LCALL THIRD ;刷新第3块显示板
01CC 02014A LJMP MAIN ;返回主程序
01CF 120247 MODE4: LCALL THIRD ;单独刷新第3块显示板
01D2 02014A LJMP MAIN ;返回主程序
01D5 7900 FIRST: MOV R1,#0 ;列选择线指针置零,从第0列开始刷新
01D7 E6 FIR1: MOV A,@R0 ;取一列的行点阵显示数据
01D8 C0E0 PUSH A ;保护行置位数据
01DA F4 CPL A ;对A取反,得到行复位数据
01DB 90FD00 MOV DPTR,#0FD00H ;加载行复位端口地址
01DE F0 MOVX @DPTR,A ;行置位数据送行置位口
01DF 90FB00 MOV DPTR,#0FB00H ;加载第1块列驱动板地址
01E2 E9 MOV A,R1 ;列指针内容送A
01E3 F0 MOVX @DPTR,A ;选中相应的列选择线
01E4 120280 LCALL DELAY ;延时5ms
01E7 74FF MOV A,#0FFH ;送无效字
01E9 F0 MOVX @DPTR,A ;以关闭列译码器
01EA 7400 MOV A,#0
01EC 90FD00 MOV DPTR,#0FD00H ;加载行复位端口地址
01EF F0 MOVX @DPTR,A ;行复位口清零
01F0 09 INC R1 ;列选择数据加1
01F1 D0E0 POP A ;恢复行置位数据
01F3 90FE00 MOV DPTR,#0FE00H ;加载行置位端口地址
01F6 F0 MOVX @DPTR,A ;送行复位数据
01F7 90FB00 MOV DPTR,#0FB00H ;加载第1块列驱动板地址
01FA E9 MOV A,R1
01FB F0 MOVX @DPTR,A ;选中列置位驱动线
01FC 120280 LCALL DELAY ;延时5ms
01FF 74FF MOV A,#0FFH ;送无效字
0201 F0 MOVX @DPTR,A ;关闭列译码器
0202 7400 MOV A,#0
0204 90FE00 MOV DPTR,#0FE00H ;加载行置位端口地址
D:\飞机泊位系统\ASM\89C52.ASM
Page 4
04-08-01
09:06:42
WAVE assembler version 5.00 Copyright (c) 1989, 99 by CHY
Addr Code Source Line
0207 F0 MOVX @DPTR,A ;行置位口清零
0208 09 INC R1 ;修改列驱动选择指针
0209 08 INC R0 ;修改显示缓存指针
020A B928CA CJNE R1,#40,FIR1 ;不满二十列则继续刷新
020D 22 RET ;返回主程序
020E 7900 SECOND: MOV R1,#0 ;列选择线指针置零,从第0列开始刷新
0210 E6 SEC1: MOV A,@R0 ;取行点阵显示数据
0211 C0E0 PUSH A ;保护数据
0213 F4 CPL A ;对A取反,得到行复位数据
0214 90FD00 MOV DPTR,#0FD00H ;加载行复位端口地址
0217 F0 MOVX @DPTR,A ;行复位数据送行复位口
0218 90F700 MOV DPTR,#0F700H ;加载列驱动板2地址
021B E9 MOV A,R1
021C F0 MOVX @DPTR,A ;选中列复位选择线
021D 120280 LCALL DELAY ;延时5ms
0220 74FF MOV A,#0FFH ;送无效字
0222 F0 MOVX @DPTR,A ;以关闭列译码器
0223 7400 MOV A,#0 ;
0225 90FD00 MOV DPTR,#0FD00H ;加载行复位端口地址
0228 F0 MOVX @DPTR,A ;行复位口清零
0229 D0E0 POP A ;弹出行置位数据
022B 90FE00 MOV DPTR,#0FE00H ;加载行置位端口地址
022E F0 MOVX @DPTR,A ;送行置位数据
022F 09 INC R1 ;列选择数据指针加1
0230 90F700 MOV DPTR,#0F700H ;加载列驱动板2地址
0233 E9 MOV A,R1
0234 F0 MOVX @DPTR,A ;选中列置位驱动线
0235 120280 LCALL DELAY ;延时5ms
0238 74FF MOV A,#0FFH ;送无效字
023A F0 MOVX @DPTR,A ;关闭列译码器
023B 7400 MOV A,#0
023D 90FE00 MOV DPTR,#0FE00H ;加载行置位端口地址
0240 F0 MOVX @DPTR,A ;行置位口清零
0241 09 INC R1 ;修改列驱动选择指针
0242 08 INC R0 ;修改显示缓存指针
0243 B928CA CJNE R1,#40,SEC1 ;不满二十列则继续刷新
0246 22 RET ;返回主程序
0247 7900 THIRD: MOV R1,#0 ;列选择线指针置零,从第0列开始刷新
0249 E6 THI1: MOV A,@R0 ;取行点阵显示数据
024A C0E0 PUSH A ;保护数据
024C F4 CPL A ;对A取反,得到行复位数据
024D 90FD00 MOV DPTR,#0FD00H ;加载行复位端口地址
0250 F0 MOVX @DPTR,A ;行复位数据送行复位口
0251 90EF00 MOV DPTR,#0EF00H ;加载列驱动板3地址
0254 E9 MOV A,R1
0255 F0 MOVX @DPTR,A ;选中列复位选择线
D:\飞机泊位系统\ASM\89C52.ASM
Page 5
04-08-01
09:06:42
WAVE assembler version 5.00 Copyright (c) 1989, 99 by CHY
Addr Code Source Line
0256 120280 LCALL DELAY ;延时5ms
0259 74FF MOV A,#0FFH ;送无效字
025B F0 MOVX @DPTR,A ;以关闭列译码器
025C 7400 MOV A,#0 ;
025E 90FD00 MOV DPTR,#0FD00H ;加载行复位端口地址
0261 F0 MOVX @DPTR,A ;行复位口清零
0262 D0E0 POP A ;弹出行置位数据
0264 90FE00 MOV DPTR,#0FE00H ;加载行置位端口地址
0267 F0 MOVX @DPTR,A ;送行置位数据
0268 09 INC R1 ;列选择数据指针加1
0269 90EF00 MOV DPTR,#0EF00H ;加载列驱动板3地址
026C E9 MOV A,R1
026D F0 MOVX @DPTR,A ;选中列置位驱动线
026E 120280 LCALL DELAY ;延时5ms
0271 74FF MOV A,#0FFH ;送无效字
0273 F0 MOVX @DPTR,A ;关闭列译码器
0274 7400 MOV A,#0
0276 90FE00 MOV DPTR,#0FE00H ;加载行置位端口地址
0279 F0 MOVX @DPTR,A ;行置位口清零
027A 09 INC R1 ;修改列驱动选择指针
027B 08 INC R0 ;修改显示缓存指针
027C B928CA CJNE R1,#40,THI1 ;不满二十列则继续刷新
027F 22 RET ;返回主程序
0280 7F14 DELAY: MOV R7,#20 ;5ms延时子程序(12MHz)
0282 7E7D DEL1: MOV R6,#125
0284 DEFE DEL2: DJNZ R6,DEL2
0286 DFFA DJNZ R7,DEL1
0288 22 RET
0289 7F0A DELAY1s:MOV R7,#10 ;延时1S的子程序
028B 7EC8 DEL1S1: MOV R6,#200
028D 7D7D DEL1S2: MOV R5,#125
028F DDFE DEL1S3: DJNZ R5,DEL1S3
0291 DEFA DJNZ R6,DEL1S2
0293 DFF6 DJNZ R7,DEL1S1
0295 22 RET
ORG 0300H
0300 7F0408
0303 107F DB 7FH,04H,08H,10H,7FH
0305 3F4040
0308 403F DB 3FH,40H,40H,40H,3FH
030A 7C1211
030D 127C DB 7CH,12H,11H,12H,7CH
030F 7C1211
0312 127C DB 7CH,12H,11H,12H,7CH
D:\飞机泊位系统\ASM\89C52.ASM
Page 6
04-08-01
09:06:42
WAVE assembler version 5.00 Copyright (c) 1989, 99 by CHY
Addr Code Source Line
0314 000000
0317 0000 DB 0,0,0,0,0
0319 000000
031C 0000 DB 0,0,0,0,0
031E 000000
0321 0000 DB 0,0,0,0,0
0323 000000
0326 0000 DB 0,0,0,0,0
ORG 0400H
0400 3E5149
0403 453E DB 3EH,51H,49H,45H,3EH ;数字“0”的字库编码
0405 00427F
0408 4000 DB 00H,42H,7FH,40H,00H ;数字“1”的字库编码
040A 426151
040D 4946 DB 42H,61H,51H,49H,46H ;数字“2”的字库编码
040F 224949
0412 4936 DB 22H,49H,49H,49H,36H ;数字“3”的字库编码
0414 181412
0417 7F10 DB 18H,14H,12H,7FH,10H ;数字“4”的字库编码
0419 2F4949
041C 4931 DB 2FH,49H,49H,49H,31H ;数字“5”的字库编码
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -