📄 kb.lst
字号:
014F D2B3 179 setb KEY_CLOCK ;释放时钟
0151 7914 180 mov r1,#DLY20 ;延时20us
0153 D9FE 181 djnz r1,$ ; 20us*11.0592/12-1
182 ;测试主机是否放弃这次传送
183 ;JNB KEY_CLOCK,SEND_BYTE
0155 EE 184 mov a,r6
0156 25E0 185 add a,acc
0158 FE 186 mov r6,a
0159 0D 187 inc r5 ;发送位数加1
015A BD08DC 188 cjne r5,#08,nextb1 ;连续发送8位
189 ;发送效验位
015D EB 190 mov a,r3
A51 MACRO ASSEMBLER KB 12/03/2005 20:16:44 PAGE 4
015E 5401 191 anl a,#01
0160 6004 192 jz nextb3
0162 C2B4 193 clr KEY_DATA
0164 8002 194 sjmp nextb4
0166 195 nextb3:
0166 D2B4 196 setb KEY_DATA
0168 197 nextb4:
0168 7914 198 mov r1,#DLY20 ;延时20us
016A D9FE 199 djnz r1,$ ; 20us*11.0592/12-1
016C C2B3 200 clr KEY_CLOCK
016E 7928 201 mov r1,#DLY40 ;延时40us
0170 D9FE 202 djnz r1,$ ; 40us*11.0592/12-1
0172 D2B3 203 setb KEY_CLOCK
0174 7914 204 mov r1,#DLY20 ;延时20us
0176 D9FE 205 djnz r1,$ ; 20us*11.0592/12-1
206 ;测试主机是否放弃这次传送
207 ;JNB KEY_CLOCK,SEND_BYTE
208 ;发送停止位
0178 D2B4 209 setb KEY_DATA
017A 7914 210 mov r1,#DLY20 ;延时20us
017C D9FE 211 djnz r1,$ ; 20us*11.0592/12-1
017E C2B3 212 clr KEY_CLOCK
0180 7928 213 mov r1,#DLY40 ;延时40us
0182 D9FE 214 djnz r1,$ ; 40us*11.0592/12-1
0184 D2B3 215 setb KEY_CLOCK
0186 791E 216 mov r1,#DLY30 ;延时30us
0188 D9FE 217 djnz r1,$ ; 30us*11.0592/12-1
218 ;=
018A 219 loopc1:
018A 30B3FD 220 jnb KEY_CLOCK,$ ;1. 等待时钟转为高电平
018D 7932 221 mov r1,#DLY50 ;2. 延时 50us
018F D9FE 222 djnz r1,$ ; 50us*11.0592/12-1
0191 30B3F6 223 jnb KEY_CLOCK,loopc1;3. 不是高电平的话,回到第一步
0194 30B4F3 224 jnb KEY_DATA,loopc1 ;4. 不是高电平的话,放弃发送,转为接收
0197 7914 225 mov r1,#DLY20 ;5. 延时20us
0199 D9FE 226 djnz r1,$ ; 20us*11.0592/12-1
227 ;6. 发送起始位 0
019B C2B4 228 clr KEY_DATA
019D 7914 229 mov r1,#DLY20 ;6.1 延时20us
019F D9FE 230 djnz r1,$ ; 20us*11.0592/12-1
01A1 C2B3 231 clr KEY_CLOCK ;6.2 拉低时钟
01A3 7928 232 mov r1,#DLY40 ;6.3 延时40us
01A5 D9FE 233 djnz r1,$ ; 40us*11.0592/12-1
01A7 D2B3 234 setb KEY_CLOCK ;6.4 释放时钟
01A9 7914 235 mov r1,#DLY20 ;6.5 延时20us
01AB D9FE 236 djnz r1,$ ; 20us*11.0592/12-1
237 ;测试主机是否放弃这次传送
238
239 ;7. 发送8位数据
01AD E4 240 clr a
01AE FD 241 mov r5,a ;r5为发送计数
01AF 7B00 242 mov r3,#0 ;效验位计数复位
01B1 7E01 243 mov r6,#01
01B3 244 nextc1:
01B3 EE 245 mov a,r6
01B4 5C 246 anl a,r4 ;要发送的字符放在KEY_BUFF中
01B5 7004 247 jnz bitc1
01B7 C2B4 248 clr KEY_DATA
01B9 8003 249 sjmp nextc2
01BB 250 bitc1:
01BB D2B4 251 setb KEY_DATA
01BD 0B 252 inc r3 ;为1的个数加1
01BE 253 nextc2:
01BE 7914 254 mov r1,#DLY20 ;延时20us
01C0 D9FE 255 djnz r1,$ ; 20us*11.0592/12-1
01C2 C2B3 256 clr KEY_CLOCK ;拉低时钟
A51 MACRO ASSEMBLER KB 12/03/2005 20:16:44 PAGE 5
01C4 7928 257 mov r1,#DLY40 ;延时40us
01C6 D9FE 258 djnz r1,$ ; 40us*11.0592/12-1
01C8 D2B3 259 setb KEY_CLOCK ;释放时钟
01CA 7914 260 mov r1,#DLY20 ;延时20us
01CC D9FE 261 djnz r1,$ ; 20us*11.0592/12-1
262 ;测试主机是否放弃这次传送
263 ;JNB KEY_CLOCK,SEND_BYTE
01CE EE 264 mov a,r6
01CF 25E0 265 add a,acc
01D1 FE 266 mov r6,a
01D2 0D 267 inc r5 ;发送位数加1
01D3 BD08DD 268 cjne r5,#08,nextc1 ;连续发送8位
269 ;发送效验位
01D6 EB 270 mov a,r3
01D7 5401 271 anl a,#01
01D9 6004 272 jz nextc3
01DB C2B4 273 clr KEY_DATA
01DD 8002 274 sjmp nextc4
01DF 275 nextc3:
01DF D2B4 276 setb KEY_DATA
01E1 277 nextc4:
01E1 7914 278 mov r1,#DLY20 ;延时20us
01E3 D9FE 279 djnz r1,$ ; 20us*11.0592/12-1
01E5 C2B3 280 clr KEY_CLOCK
01E7 7928 281 mov r1,#DLY40 ;延时40us
01E9 D9FE 282 djnz r1,$ ; 40us*11.0592/12-1
01EB D2B3 283 setb KEY_CLOCK
01ED 7914 284 mov r1,#DLY20 ;延时20us
01EF D9FE 285 djnz r1,$ ; 20us*11.0592/12-1
286 ;测试主机是否放弃这次传送
287 ;JNB KEY_CLOCK,SEND_BYTE
288 ;发送停止位
01F1 D2B4 289 setb KEY_DATA
01F3 7914 290 mov r1,#DLY20 ;延时20us
01F5 D9FE 291 djnz r1,$ ; 20us*11.0592/12-1
01F7 C2B3 292 clr KEY_CLOCK
01F9 7928 293 mov r1,#DLY40 ;延时40us
01FB D9FE 294 djnz r1,$ ; 40us*11.0592/12-1
01FD D2B3 295 setb KEY_CLOCK
01FF 791E 296 mov r1,#DLY30 ;延时30us
0201 D9FE 297 djnz r1,$ ; 30us*11.0592/12-1
298
0203 79FF 299 mov r1,#0FFH
0205 7BFF 300 dly2: mov r3,#0FFH
0207 DBFE 301 djnz r3,$
0209 D9FA 302 djnz r1,dly2
303
020B 020065 304 ljmp loop
305
306 end
A51 MACRO ASSEMBLER KB 12/03/2005 20:16:44 PAGE 6
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
BITA1. . . . . . . C ADDR 00C8H A
BITB1. . . . . . . C ADDR 0142H A
BITC1. . . . . . . C ADDR 01BBH A
DLY2 . . . . . . . C ADDR 0205H A
DLY20. . . . . . . N NUMB 0014H A
DLY30. . . . . . . N NUMB 001EH A
DLY40. . . . . . . N NUMB 0028H A
DLY50. . . . . . . N NUMB 0032H A
GREEN_LED. . . . . B ADDR 0090H.1 A
KEY. . . . . . . . C ADDR 0093H A
KEY0 . . . . . . . C ADDR 0069H A
KEY1 . . . . . . . C ADDR 007DH A
KEY2 . . . . . . . C ADDR 0081H A
KEY3 . . . . . . . C ADDR 0085H A
KEY4 . . . . . . . C ADDR 0089H A
KEY5 . . . . . . . C ADDR 008DH A
KEY6 . . . . . . . C ADDR 0091H A
KEY_CLOCK. . . . . B ADDR 00B0H.3 A
KEY_DATA . . . . . B ADDR 00B0H.4 A
L1 . . . . . . . . C ADDR 005BH A
LOOP . . . . . . . C ADDR 0065H A
LOOPA1 . . . . . . C ADDR 0097H A
LOOPB1 . . . . . . C ADDR 0110H A
LOOPC1 . . . . . . C ADDR 018AH A
NEXTA1 . . . . . . C ADDR 00C0H A
NEXTA2 . . . . . . C ADDR 00CBH A
NEXTA3 . . . . . . C ADDR 00ECH A
NEXTA4 . . . . . . C ADDR 00EEH A
NEXTB1 . . . . . . C ADDR 0139H A
NEXTB2 . . . . . . C ADDR 0145H A
NEXTB3 . . . . . . C ADDR 0166H A
NEXTB4 . . . . . . C ADDR 0168H A
NEXTC1 . . . . . . C ADDR 01B3H A
NEXTC2 . . . . . . C ADDR 01BEH A
NEXTC3 . . . . . . C ADDR 01DFH A
NEXTC4 . . . . . . C ADDR 01E1H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
P3 . . . . . . . . D ADDR 00B0H A
RED_LED. . . . . . B ADDR 0090H.0 A
SP . . . . . . . . D ADDR 0081H A
START. . . . . . . C ADDR 0050H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -