📄 good.lst
字号:
A51 MACRO ASSEMBLER GOOD 08/06/2005 16:36:06 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN GOOD.OBJ
ASSEMBLER INVOKED BY: D:\Keil\C51\BIN\A51.EXE GOOD.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;*****************************************************************
2 ;* 主 页 : HTTP:WWW.QLMCU.COM
3 ;*
4 ;* 程序功能 : 93C46的读写实验
5 ;*
6 ;* 硬 件: WS803A / WS806 /WS***
7 ;*
8 ;* 创建时间 : 2005.06.27
9 ;*
10 ;* Designer : benladn911
11 ;*******************************************************************
12 ;* 当选择8 位结构时93C46 有7 条10 位的指令
13 ;* 指令、地址和写入的数据在时钟信号SK 的上升沿时由DI 引脚输入
14 ;* DO 引脚除了从器件读取据或在进行了写操作后查询准备/繁忙ready/busy 的器件工作状态外平常是
高阻态的
15 ;*****************************************************************************************
*
16 ;程序首先从89S51的 ADDR,WDM 读出欲写入93C46的地址和数据,然后再把写入的数据读出来
17 ;存放在 RDM ,再把ADDR , RDM 同过四位数码管显示出来.
18
19 ;-------------端口和存储单元的定义---------------
00B5 20 CS EQU P3.5 ;片选端
00A6 21 SK EQU P2.6 ;模拟时钟信号输出端
00A5 22 DI EQU P2.5 ;串行数据输出端
00A4 23 DO EQU P2.4 ;串行数据输入端
24
0051 25 WDM EQU 51H ;欲写入数据存储单元
0050 26 RDM EQU 50H ;读出存放于 89S51 RAM 的存储单元
0042 27 ADDR EQU 42H ;欲写入93C46的地址
28 ;------------------------------------------------
29
0000 30 ORG 0000H
0000 020100 31 LJMP MAIN
32
0100 33 ORG 0100H ;主程序
0100 34 MAIN:
0100 754220 35 MOV ADDR,#20H ;欲写入的地址设置(可根据需要自行修改)
0103 7551FF 36 MOV WDM,#0ffH ;要写入的数据(可根据需要自行修改)
0106 120196 37 LCALL EWEN46 ;调用写允许子程序,93C46每次上电后在进行写操作前都要先写允许
0109 1201BB 38 LCALL WRITE ;调用写入子程序
010C 12026D 39 LCALL READ ;调用读子程序
40
41 ;----------------------------------------------
42 ;--------------显示处理子程--------------------
43
010F E550 44 MOV A,RDM ;对 RDM 的低四位处理
0111 540F 45 ANL A,#00001111B ;屏蔽高四位
0113 F553 46 MOV 53H,A
47
0115 E550 48 MOV A,RDM ;对 RDM 的高四位处理
0117 54F0 49 ANL A,#11110000B ;屏蔽低四位
0119 C4 50 SWAP A
011A F554 51 MOV 54H,A
52
011C E542 53 MOV A,ADDR ;对 ADDR 的低四位处理
011E 540F 54 ANL A,#00001111B
0120 F555 55 MOV 55H,A
56
A51 MACRO ASSEMBLER GOOD 08/06/2005 16:36:06 PAGE 2
0122 E542 57 MOV A,ADDR ;对 ADDR 的高四位处理
0124 54F0 58 ANL A,#11110000B
0126 C4 59 SWAP A
0127 F556 60 MOV 56H,A
61
0129 90016B 62 DISP:MOV DPTR,#TABLE
012C E553 63 MOV A,53H
012E 93 64 MOVC A,@A+DPTR
012F F580 65 MOV P0,A ;显示 RDM 的低位
0131 C293 66 CLR P1.3 ;选通第四位数码管
0133 12018D 67 LCALL DL2MS
0136 12018D 68 LCALL DL2MS
0139 D293 69 SETB P1.3 ;关闭显示
70
013B E554 71 MOV A,54H
013D 93 72 MOVC A,@A+DPTR
013E F580 73 MOV P0,A ;显示 RDM 的高位
0140 C292 74 CLR P1.2 ;选通第三位数码管
0142 12018D 75 LCALL DL2MS
0145 12018D 76 LCALL DL2MS
0148 D292 77 SETB P1.2 ;关闭显示
78
014A E555 79 MOV A,55H
014C 93 80 MOVC A,@A+DPTR
014D F580 81 MOV P0,A ;显示 ADDR的高位
014F C291 82 CLR P1.1 ;选通第二位数码管
0151 12018D 83 LCALL DL2MS
0154 12018D 84 LCALL DL2MS
0157 D291 85 SETB P1.1 ;关闭显示
86
0159 E556 87 MOV A,56H
015B 93 88 MOVC A,@A+DPTR
015C F580 89 MOV P0,A ;显示 ADDR 的高位
015E C290 90 CLR P1.0 ;选通第一位数码管
0160 12018D 91 LCALL DL2MS
0163 12018D 92 LCALL DL2MS
0166 D290 93 SETB P1.0 ;关闭显示
94
0168 020129 95 LJMP DISP
96
016B C0F9A4B0 97 TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;0~9
016F 999282F8
0173 8090
0175 8883C6A1 98 DB 88H,83H,0C6H,0A1H,86H,8EH ;A~F
0179 868E
99
100 ;*********************************************************************
101 ;********************** 各功能子程序 *****************************
102 ;*********************************************************************
103 ;----------------------------------------------------
104 ;发送高电平 1
105 ;-----------------------------------------------------
017B 106 HIGH46:
017B D2A5 107 SETB DI
017D D2A6 108 SETB SK
017F 00 109 NOP
0180 C2A6 110 CLR SK
0182 00 111 NOP
0183 22 112 RET
113
114 ;-----------------------------------------------------
115 ;发送低电平 0
116 ;-----------------------------------------------------
0184 117 LOW46:
0184 C2A5 118 CLR DI
0186 D2A6 119 SETB SK
A51 MACRO ASSEMBLER GOOD 08/06/2005 16:36:06 PAGE 3
0188 00 120 NOP
0189 C2A6 121 CLR SK
018B 00 122 NOP
018C 22 123 RET
124
125 ;-------------------------------------------
126 ;---------------------延时-------------------
018D 7C08 127 DL2MS: MOV R4,#8;
018F 7D7C 128 DD3:MOV R5,#124
0191 DDFE 129 DJNZ R5,$
0193 DCFA 130 DJNZ R4,DD3
0195 22 131 RET
132 ;--------------------------------------------
133
134 ;-----------------------------------------------------
135 ;-------------------写操作允许子程序--------------------
136 ;-----------------------------------------------------
0196 137 EWEN46: ; ( 10011***** )
0196 D2B5 138 SETB CS ;启动93C46
0198 00 139 NOP
0199 12017B 140 LCALL HIGH46 ;1
019C 120184 141 LCALL LOW46 ;0
019F 120184 142 LCALL LOW46 ;0
01A2 12017B 143 LCALL HIGH46 ;1
01A5 12017B 144 LCALL HIGH46 ;1
01A8 120184 145 LCALL LOW46 ;0
01AB 120184 146 LCALL LOW46 ;0
01AE 120184 147 LCALL LOW46 ;0
01B1 120184 148 LCALL LOW46 ;0
01B4 120184 149 LCALL LOW46 ;0
01B7 00 150 NOP
01B8 C2B5 151 CLR CS ;93C46 进入休眠,降低功耗
01BA 22 152 RET
153
154 ;-----------------------------------------------------------------
155 ;------------向指定的地址中写入一个字节数据(八位)子程序---------
156 ;-----------------------------------------------------------------
01BB 157 WRITE: ;101
158
01BB D2B5 159 SETB CS ;启动93C46
01BD 00 160 NOP
01BE E542 161 MOV A,ADDR ;把欲写入的数据的地址
162
01C0 12017B 163 LCALL HIGH46 ;1
01C3 120184 164 LCALL LOW46 ;0
01C6 12017B 165 LCALL HIGH46 ;1
166
01C9 167 WR_ADDR: ;欲写入地址的设置,93C46的地址为 7 位
01C9 A2E6 168 MOV C,ACC.6
01CB 92A5 169 MOV DI,C
01CD D2A6 170 SETB SK
01CF 00 171 NOP
01D0 C2A6 172 CLR SK
01D2 00 173 NOP
174
01D3 A2E5 175 MOV C,ACC.5
01D5 92A5 176 MOV DI,C
01D7 D2A6 177 SETB SK
01D9 00 178 NOP
01DA C2A6 179 CLR SK
01DC 00 180 NOP
181
01DD A2E4 182 MOV C,ACC.4
01DF 92A5 183 MOV DI,C
01E1 D2A6 184 SETB SK
01E3 00 185 NOP
A51 MACRO ASSEMBLER GOOD 08/06/2005 16:36:06 PAGE 4
01E4 C2A6 186 CLR SK
01E6 00 187 NOP
188
01E7 A2E3 189 MOV C,ACC.3
01E9 92A5 190 MOV DI,C
01EB D2A6 191 SETB SK
01ED 00 192 NOP
01EE C2A6 193 CLR SK
01F0 00 194 NOP
195
01F1 A2E2 196 MOV C,ACC.2
01F3 92A5 197 MOV DI,C
01F5 D2A6 198 SETB SK
01F7 00 199 NOP
01F8 C2A6 200 CLR SK
01FA 00 201 NOP
202
203
01FB A2E1 204 MOV C,ACC.1
01FD 92A5 205 MOV DI,C
01FF D2A6 206 SETB SK
0201 00 207 NOP
0202 C2A6 208 CLR SK
0204 00 209 NOP
210
0205 A2E0 211 MOV C,ACC.0
0207 92A5 212 MOV DI,C
0209 D2A6 213 SETB SK
020B 00 214 NOP
020C C2A6 215 CLR SK
020E 00 216 NOP
217
020F 218 WR_DAT: ;写入一个字节数据(8位)
219
020F E551 220 MOV A,WDM
221
0211 A2E7 222 MOV C,ACC.7
0213 92A5 223 MOV DI,C
0215 D2A6 224 SETB SK
0217 00 225 NOP
0218 C2A6 226 CLR SK
021A 00 227 NOP
228
021B A2E6 229 MOV C,ACC.6
021D 92A5 230 MOV DI,C
021F D2A6 231 SETB SK
0221 00 232 NOP
0222 C2A6 233 CLR SK
0224 00 234 NOP
235
0225 A2E5 236 MOV C,ACC.5
0227 92A5 237 MOV DI,C
0229 D2A6 238 SETB SK
022B 00 239 NOP
022C C2A6 240 CLR SK
022E 00 241 NOP
242
022F A2E4 243 MOV C,ACC.4
0231 92A5 244 MOV DI,C
0233 D2A6 245 SETB SK
0235 00 246 NOP
0236 C2A6 247 CLR SK
0238 00 248 NOP
249
0239 A2E3 250 MOV C,ACC.3
023B 92A5 251 MOV DI,C
A51 MACRO ASSEMBLER GOOD 08/06/2005 16:36:06 PAGE 5
023D D2A6 252 SETB SK
023F 00 253 NOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -