📄 kb.lst
字号:
A51 MACRO ASSEMBLER KB 12/03/2005 20:16:44 PAGE 1
MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN KB.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE KB.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;晶振: 11.0592
0090 2 RED_LED EQU P1.0
0091 3 GREEN_LED EQU P1.1
4
00B3 5 KEY_CLOCK EQU P3.3
00B4 6 KEY_DATA EQU P3.4
7
0014 8 DLY20 EQU 20;14H;17
001E 9 DLY30 EQU 30;1EH;27
0028 10 DLY40 EQU 40;28H;36
0032 11 DLY50 EQU 50;32H;45
12
0000 13 org 0000H
0000 020050 14 ljmp start
0050 15 org 0050H
0050 16 start:
0050 758130 17 mov sp,#0030H
0053 7590FF 18 mov p1,#0FFH
0056 75A0FF 19 mov p2,#0FFH
0059 79FF 20 mov r1,#0FFH
005B 7BFF 21 l1: mov r3,#0FFH
005D DBFE 22 djnz r3,$
005F D9FA 23 djnz r1,l1
24
0061 D2B3 25 setb KEY_CLOCK
0063 D2B4 26 setb KEY_DATA
0065 27 loop:
0065 D290 28 setb RED_LED
0067 C291 29 clr GREEN_LED
0069 30 key0:
0069 30A011 31 jnb P2.0,key1
006C 30A112 32 jnb P2.1,key2
006F 30A213 33 jnb P2.2,key3
0072 30A314 34 jnb P2.3,key4
0075 30A415 35 jnb P2.4,key5
0078 30A516 36 jnb P2.5,key6
007B 80EC 37 jmp key0;
007D 38 key1:
007D 7C16 39 mov r4,#16H ;1
007F 8012 40 jmp key
0081 41 key2:
0081 7C1E 42 mov r4,#1EH ;2
0083 800E 43 jmp key
0085 44 key3:
0085 7C26 45 mov r4,#26H ;3
0087 800A 46 jmp key
0089 47 key4:
0089 7C25 48 mov r4,#25H ;4
008B 8006 49 jmp key
008D 50 key5:
008D 7C2E 51 mov r4,#2EH ;5
008F 8002 52 jmp key
0091 53 key6:
0091 7C36 54 mov r4,#36H ;6
0093 55 key:
0093 D291 56 setb GREEN_LED
0095 C290 57 clr RED_LED
0097 58 loopa1:
A51 MACRO ASSEMBLER KB 12/03/2005 20:16:44 PAGE 2
0097 30B3FD 59 jnb KEY_CLOCK,$ ;1. 等待时钟转为高电平
009A 7932 60 mov r1,#DLY50 ;2. 延时 50us
009C D9FE 61 djnz r1,$ ; 50us*11.0592/12-1
009E 30B3F6 62 jnb KEY_CLOCK,loopa1;3. 不是高电平的话,回到第一步
00A1 30B4C1 63 jnb KEY_DATA,loop ;4. 不是高电平的话,放弃发送,转为接收
00A4 7914 64 mov r1,#DLY20 ;5. 延时20us
00A6 D9FE 65 djnz r1,$ ; 20us*11.0592/12-1
66 ;6. 发送起始位 0
00A8 C2B4 67 clr KEY_DATA
00AA 7914 68 mov r1,#DLY20 ;6.1 延时20us
00AC D9FE 69 djnz r1,$ ; 20us*11.0592/12-1
00AE C2B3 70 clr KEY_CLOCK ;6.2 拉低时钟
00B0 7928 71 mov r1,#DLY40 ;6.3 延时40us
00B2 D9FE 72 djnz r1,$ ; 40us*11.0592/12-1
00B4 D2B3 73 setb KEY_CLOCK ;6.4 释放时钟
00B6 7914 74 mov r1,#DLY20 ;6.5 延时20us
00B8 D9FE 75 djnz r1,$ ; 20us*11.0592/12-1
76 ;测试主机是否放弃这次传送
77
78 ;7. 发送8位数据
00BA E4 79 clr a
00BB FD 80 mov r5,a ;r5为发送计数
00BC 7B00 81 mov r3,#0 ;效验位计数复位
00BE 7E01 82 mov r6,#01
00C0 83 nexta1:
00C0 EE 84 mov a,r6
00C1 5C 85 anl a,r4 ;要发送的字符放在r4中
00C2 7004 86 jnz bita1
00C4 C2B4 87 clr KEY_DATA
00C6 8003 88 sjmp nexta2
00C8 89 bita1:
00C8 D2B4 90 setb KEY_DATA
00CA 0B 91 inc r3 ;为1的个数加1
00CB 92 nexta2:
00CB 7914 93 mov r1,#DLY20 ;延时20us
00CD D9FE 94 djnz r1,$ ; 20us*11.0592/12-1
00CF C2B3 95 clr KEY_CLOCK ;拉低时钟
00D1 7928 96 mov r1,#DLY40 ;延时40us
00D3 D9FE 97 djnz r1,$ ; 40us*11.0592/12-1
00D5 D2B3 98 setb KEY_CLOCK ;释放时钟
00D7 7914 99 mov r1,#DLY20 ;延时20us
00D9 D9FE 100 djnz r1,$ ; 20us*11.0592/12-1
101 ;测试主机是否放弃这次传送
102 ;JNB KEY_CLOCK,SEND_BYTE
00DB EE 103 mov a,r6
00DC 25E0 104 add a,acc
00DE FE 105 mov r6,a
00DF 0D 106 inc r5 ;发送位数加1
00E0 BD08DD 107 cjne r5,#08,nexta1 ;连续发送8位
108 ;发送效验位
00E3 EB 109 mov a,r3
00E4 5401 110 anl a,#01
00E6 6004 111 jz nexta3
00E8 C2B4 112 clr KEY_DATA
00EA 8002 113 sjmp nexta4
00EC 114 nexta3:
00EC D2B4 115 setb KEY_DATA
00EE 116 nexta4:
00EE 7914 117 mov r1,#DLY20 ;延时20us
00F0 D9FE 118 djnz r1,$ ; 20us*11.0592/12-1
00F2 C2B3 119 clr KEY_CLOCK
00F4 7928 120 mov r1,#DLY40 ;延时40us
00F6 D9FE 121 djnz r1,$ ; 40us*11.0592/12-1
00F8 D2B3 122 setb KEY_CLOCK
00FA 7914 123 mov r1,#DLY20 ;延时20us
00FC D9FE 124 djnz r1,$ ; 20us*11.0592/12-1
A51 MACRO ASSEMBLER KB 12/03/2005 20:16:44 PAGE 3
125 ;测试主机是否放弃这次传送
126 ;JNB KEY_CLOCK,SEND_BYTE
127 ;发送停止位
00FE D2B4 128 setb KEY_DATA
0100 7914 129 mov r1,#DLY20 ;延时20us
0102 D9FE 130 djnz r1,$ ; 20us*11.0592/12-1
0104 C2B3 131 clr KEY_CLOCK
0106 7928 132 mov r1,#DLY40 ;延时40us
0108 D9FE 133 djnz r1,$ ; 40us*11.0592/12-1
010A D2B3 134 setb KEY_CLOCK
010C 791E 135 mov r1,#DLY30 ;延时30us
010E D9FE 136 djnz r1,$ ; 30us*11.0592/12-1
137
138 ;==================================================================
0110 139 loopb1:
0110 30B3FD 140 jnb KEY_CLOCK,$ ;1. 等待时钟转为高电平
0113 7932 141 mov r1,#DLY50 ;2. 延时 50us
0115 D9FE 142 djnz r1,$ ; 50us*11.0592/12-1
0117 30B3F6 143 jnb KEY_CLOCK,loopb1;3. 不是高电平的话,回到第一步
011A 30B4F3 144 jnb KEY_DATA,loopb1 ;4. 不是高电平的话,放弃发送,转为接收
011D 7914 145 mov r1,#DLY20 ;5. 延时20us
011F D9FE 146 djnz r1,$ ; 20us*11.0592/12-1
147 ;6. 发送起始位 0
0121 C2B4 148 clr KEY_DATA
0123 7914 149 mov r1,#DLY20 ;6.1 延时20us
0125 D9FE 150 djnz r1,$ ; 20us*11.0592/12-1
0127 C2B3 151 clr KEY_CLOCK ;6.2 拉低时钟
0129 7928 152 mov r1,#DLY40 ;6.3 延时40us
012B D9FE 153 djnz r1,$ ; 40us*11.0592/12-1
012D D2B3 154 setb KEY_CLOCK ;6.4 释放时钟
012F 7914 155 mov r1,#DLY20 ;6.5 延时20us
0131 D9FE 156 djnz r1,$ ; 20us*11.0592/12-1
157 ;测试主机是否放弃这次传送
158
159 ;7. 发送8位数据
0133 E4 160 clr a
0134 FD 161 mov r5,a ;r5为发送计数
0135 7B00 162 mov r3,#0 ;效验位计数复位
0137 7E01 163 mov r6,#01
0139 164 nextb1:
0139 EE 165 mov a,r6
013A 54F0 166 anl a,#0F0H ;发送F0
013C 7004 167 jnz bitb1
013E C2B4 168 clr KEY_DATA
0140 8003 169 sjmp nextb2
0142 170 bitb1:
0142 D2B4 171 setb KEY_DATA
0144 0B 172 inc r3 ;为1的个数加1
0145 173 nextb2:
0145 7914 174 mov r1,#DLY20 ;延时20us
0147 D9FE 175 djnz r1,$ ; 20us*11.0592/12-1
0149 C2B3 176 clr KEY_CLOCK ;拉低时钟
014B 7928 177 mov r1,#DLY40 ;延时40us
014D D9FE 178 djnz r1,$ ; 40us*11.0592/12-1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -