📄 icmain.lst
字号:
A51 MACRO ASSEMBLER ICMAIN 05/24/2006 09:52:10 PAGE 1
MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN ICMAIN.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE ICMAIN.ASM SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;==============================================================
2 ; 文件名称: ICMAIN.ASM
3 ; 功能描述:
4 ;==============================================================
5
6 ;$INCLUDE (IIC_A51.ASM)
0096 7 SDA BIT P1.6
0097 8 SCL BIT P1.7
9
0000 10 ACK BIT 00H
11
0030 12 SLA DATA 30H ; 地址
0031 13 SUBA DATA 31H ; 子地址
14
0000 15 ORG 0000H
0000 020100 16 LJMP START
17
0100 18 ORG 0100H
0100 00 19 START: NOP
0101 12013B 20 LCALL INIT_IIC
21 ; MOV SLA, #0A0H
22 ; MOV SUBA, #00H
23 ; LCALL SEND_STR ; 向IC卡中写入8字节
24
0104 7FFF 25 MOV R7, #0FFH
0106 DFFE 26 DJNZ R7, $
27
0108 7530A0 28 MOV SLA, #0A0H ;
010B 753100 29 MOV SUBA, #00H
010E 1201F9 30 LCALL RCV_STR ; 从IC卡中读8个字节到RAM 40H中
31
0111 80FE 32 SJMP $
33
34 ; 总线启动函数
0113 35 START_IIC:
0113 D296 36 SETB SDA
0115 00 37 NOP
0116 00 38 NOP
0117 D297 39 SETB SCL
0119 00 40 NOP
011A 00 41 NOP
011B 00 42 NOP
011C 00 43 NOP
011D 00 44 NOP
011E C296 45 CLR SDA
0120 00 46 NOP
0121 00 47 NOP
0122 00 48 NOP
0123 00 49 NOP
0124 C297 50 CLR SCL
0126 00 51 NOP
0127 00 52 NOP
0128 22 53 RET
54
55 ; 停止总线函数
0129 56 STOP_IIC:
0129 C296 57 CLR SDA
012B 00 58 NOP
A51 MACRO ASSEMBLER ICMAIN 05/24/2006 09:52:10 PAGE 2
012C 00 59 NOP
012D D297 60 SETB SCL
012F 00 61 NOP
0130 00 62 NOP
0131 00 63 NOP
0132 00 64 NOP
0133 00 65 NOP
0134 00 66 NOP
0135 D296 67 SETB SDA
0137 00 68 NOP
0138 00 69 NOP
0139 00 70 NOP
013A 22 71 RET
72
73 ; 初始化IIC总线
013B 74 INIT_IIC:
013B C297 75 CLR SCL
013D 00 76 NOP
013E 120129 77 LCALL STOP_IIC
0141 22 78 RET
79
80 ; 字节发送函数
81 ; 入口参数: R1
0142 82 SENDBYTE:
0142 C0E0 83 PUSH ACC
0144 C002 84 PUSH 02H
0146 E9 85 MOV A, R1
0147 7A08 86 MOV R2, #8
0149 33 87 SBYTE1: RLC A
014A 4004 88 JC SBYTE2
014C C296 89 CLR SDA
014E 8002 90 SJMP SBYTE3
0150 D296 91 SBYTE2: SETB SDA
0152 00 92 SBYTE3: NOP
0153 D297 93 SETB SCL
0155 00 94 NOP
0156 00 95 NOP
0157 00 96 NOP
0158 00 97 NOP
0159 00 98 NOP
015A C297 99 CLR SCL
015C DAEB 100 DJNZ R2, SBYTE1
101
015E 00 102 NOP
015F D296 103 SETB SDA
0161 00 104 NOP
0162 D297 105 SETB SCL
0164 00 106 NOP
0165 00 107 NOP
0166 00 108 NOP
0167 00 109 NOP
0168 00 110 NOP
0169 209604 111 JB SDA, SBYTE4
016C D200 112 SETB ACK
016E 8002 113 SJMP SBYTE5
0170 C200 114 SBYTE4: CLR ACK
0172 00 115 SBYTE5: NOP
0173 C297 116 CLR SCL
0175 00 117 NOP
0176 00 118 NOP
0177 D002 119 POP 02H
0179 D0E0 120 POP ACC
017B 22 121 RET
122
123 ; 字节数据接收函数
124 ; 出口参数: R1
A51 MACRO ASSEMBLER ICMAIN 05/24/2006 09:52:10 PAGE 3
017C 125 RCVBYTE:
017C C0E0 126 PUSH ACC
017E C002 127 PUSH 02H
0180 D296 128 SETB SDA
129 ;CLR SCL
0182 7400 130 MOV A, #00H
0184 C3 131 CLR C
0185 7A08 132 MOV R2, #8
0187 133 RBYTE1:
0187 00 134 NOP
0188 C297 135 CLR SCL
018A 00 136 NOP
018B 00 137 NOP
018C 00 138 NOP
018D 00 139 NOP
018E 00 140 NOP
018F D297 141 SETB SCL
0191 00 142 NOP
0192 00 143 NOP
0193 00 144 NOP
0194 209603 145 JB SDA, RBYTE2
0197 C3 146 CLR C
0198 8001 147 SJMP RBYTE3
019A D3 148 RBYTE2: SETB C
019B 33 149 RBYTE3: RLC A
019C 00 150 NOP
019D DAE8 151 DJNZ R2, RBYTE1
019F C297 152 CLR SCL
01A1 F9 153 MOV R1, A
01A2 D002 154 POP 02H
01A4 D0E0 155 POP ACC
01A6 22 156 RET
157
158 ; 应答子函数
01A7 159 ACK_IIC:
01A7 C296 160 CLR SDA
01A9 00 161 NOP
01AA 00 162 NOP
01AB 00 163 NOP
01AC D297 164 SETB SCL
01AE 00 165 NOP
01AF 00 166 NOP
01B0 00 167 NOP
01B1 00 168 NOP
01B2 00 169 NOP
01B3 C297 170 CLR SCL
01B5 00 171 NOP
01B6 00 172 NOP
01B7 00 173 NOP
01B8 22 174 RET
175
176 ; 非应答子函数
01B9 177 NACK_IIC:
01B9 D296 178 SETB SDA
01BB 00 179 NOP
01BC 00 180 NOP
01BD 00 181 NOP
01BE D297 182 SETB SCL
01C0 00 183 NOP
01C1 00 184 NOP
01C2 00 185 NOP
01C3 00 186 NOP
01C4 00 187 NOP
01C5 C297 188 CLR SCL
01C7 00 189 NOP
01C8 00 190 NOP
A51 MACRO ASSEMBLER ICMAIN 05/24/2006 09:52:10 PAGE 4
01C9 00 191 NOP
01CA 22 192 RET
193
194 ; 向有子地址器件发送多字节数据函数
01CB 195 SEND_STR:
01CB C0E0 196 PUSH ACC
01CD 120113 197 LCALL START_IIC
01D0 A930 198 MOV R1, SLA
01D2 120142 199 LCALL SENDBYTE
01D5 30001E 200 JNB ACK, SSTR2
01D8 A931 201 MOV R1, SUBA
01DA 120142 202 LCALL SENDBYTE
01DD 300016 203 JNB ACK, SSTR2
01E0 7E08 204 MOV R6, #8 ; 一次发送8个字节
01E2 7B00 205 MOV R3, #00H
01E4 900238 206 MOV DPTR, #DTAB
01E7 EB 207 SSTR1: MOV A, R3
01E8 93 208 MOVC A, @A+DPTR
01E9 F9 209 MOV R1, A
01EA 120142 210 LCALL SENDBYTE
01ED 0B 211 INC R3
01EE 300005 212 JNB ACK, SSTR2
01F1 DEF4 213 DJNZ R6, SSTR1
01F3 120129 214 LCALL STOP_IIC
01F6 D0E0 215 SSTR2: POP ACC
01F8 22 216 RET
217
218 ; 从有子地址器件读取多字节数据函数
219 ; 读出数据保存到40H, 8个字节
01F9 220 RCV_STR:
01F9 C0E0 221 PUSH ACC
01FB 120113 222 LCALL START_IIC
01FE A930 223 MOV R1, SLA
0200 120142 224 LCALL SENDBYTE
0203 30002F 225 JNB ACK, RSTR2
0206 A931 226 MOV R1, SUBA
0208 120142 227 LCALL SENDBYTE
020B 300027 228 JNB ACK, RSTR2
020E 120113 229 LCALL START_IIC
0211 0530 230 INC SLA
0213 A930 231 MOV R1, SLA
0215 120142 232 LCALL SENDBYTE
0218 30001A 233 JNB ACK, RSTR2
021B 7E08 234 MOV R6, #8
021D 7840 235 MOV R0, #40H
021F 12017C 236 RSTR1: LCALL RCVBYTE
0222 E9 237 MOV A, R1
0223 F6 238 MOV @R0, A
0224 1201A7 239 LCALL ACK_IIC
0227 08 240 INC R0
0228 DEF5 241 DJNZ R6, RSTR1
022A 12017C 242 LCALL RCVBYTE
022D E9 243 MOV A, R1
022E F6 244 MOV @R0, A
022F 1201B9 245 LCALL NACK_IIC
0232 120129 246 LCALL STOP_IIC
0235 D0E0 247 RSTR2: POP ACC
0237 22 248 RET
249
0238 11223344 250 DTAB: DB 11H,22H,33H,44H,55H,66H,77H,88H
023C 55667788
251
252
253 END
A51 MACRO ASSEMBLER ICMAIN 05/24/2006 09:52:10 PAGE 5
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
ACK. . . . . . . . B ADDR 0020H.0 A
ACK_IIC. . . . . . C ADDR 01A7H A
DTAB . . . . . . . C ADDR 0238H A
INIT_IIC . . . . . C ADDR 013BH A
NACK_IIC . . . . . C ADDR 01B9H A
P1 . . . . . . . . D ADDR 0090H A
RBYTE1 . . . . . . C ADDR 0187H A
RBYTE2 . . . . . . C ADDR 019AH A
RBYTE3 . . . . . . C ADDR 019BH A
RCVBYTE. . . . . . C ADDR 017CH A
RCV_STR. . . . . . C ADDR 01F9H A
RSTR1. . . . . . . C ADDR 021FH A
RSTR2. . . . . . . C ADDR 0235H A
SBYTE1 . . . . . . C ADDR 0149H A
SBYTE2 . . . . . . C ADDR 0150H A
SBYTE3 . . . . . . C ADDR 0152H A
SBYTE4 . . . . . . C ADDR 0170H A
SBYTE5 . . . . . . C ADDR 0172H A
SCL. . . . . . . . B ADDR 0090H.7 A
SDA. . . . . . . . B ADDR 0090H.6 A
SENDBYTE . . . . . C ADDR 0142H A
SEND_STR . . . . . C ADDR 01CBH A
SLA. . . . . . . . D ADDR 0030H A
SSTR1. . . . . . . C ADDR 01E7H A
SSTR2. . . . . . . C ADDR 01F6H A
START. . . . . . . C ADDR 0100H A
START_IIC. . . . . C ADDR 0113H A
STOP_IIC . . . . . C ADDR 0129H A
SUBA . . . . . . . D ADDR 0031H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -