📄 i2c.lst
字号:
0128 00 147 NOP
0129 C294 148 CLR SCL ;保持数据时间,大于4.7us
012B 00 149 NOP
012C 00 150 NOP
012D 22 151 RET
152 ;*********************************************************************
153 ;名称:CACK
154 ;描述:检查应答位子程序,返回值:ACK=1时表示有应答
155 ;*********************************************************************
012E D295 156 CACK: SETB SDA
0130 00 157 NOP
0131 00 158 NOP
0132 D294 159 SETB SCL
0134 C210 160 CLR ACK
0136 00 161 NOP
0137 00 162 NOP
0138 A295 163 MOV C,SDA
013A 4002 164 JC CEND
013C D210 165 SETB ACK ;判断应答位
013E 00 166 CEND: NOP
013F C294 167 CLR SCL
0141 00 168 NOP
0142 22 169 RET
170 ;*********************************************************************
171 ;名称:WRBYTE
172 ;描述:发送字节子程序,字节数据放入ACC
173 ;*********************************************************************
0143 7808 174 WRBYTE: MOV R0,#08H
0145 33 175 WLP: RLC A ;取数据位
0146 4006 176 JC WRI
0148 8012 177 SJMP WRO ;判断数据位
014A D8F9 178 WLP1: DJNZ R0,WLP
014C 00 179 NOP
014D 22 180 RET
014E D295 181 WRI: SETB SDA ;发送1
0150 00 182 NOP
0151 D294 183 SETB SCL
0153 00 184 NOP
0154 00 185 NOP
0155 00 186 NOP
0156 00 187 NOP
0157 00 188 NOP
0158 C294 189 CLR SCL
015A 80EE 190 SJMP WLP1
A51 MACRO ASSEMBLER I2C 08/25/2006 15:57:59 PAGE 4
015C C295 191 WRO: CLR SDA ;发送0
015E 00 192 NOP
015F D294 193 SETB SCL
0161 00 194 NOP
0162 00 195 NOP
0163 00 196 NOP
0164 00 197 NOP
0165 00 198 NOP
0166 C294 199 CLR SCL
0168 80E0 200 SJMP WLP1
201 ;*********************************************************************
202 ;名称:RDBYTE
203 ;描述:读取字节子程序,读出的数据存放在ACC
204 ;*********************************************************************
016A 7808 205 RDBYTE: MOV R0,#08H
016C D295 206 RLP: SETB SDA
016E 00 207 NOP
016F D294 208 SETB SCL ;时钟线为高,接收数据位
0171 00 209 NOP
0172 00 210 NOP
0173 A295 211 MOV C,SDA ;读取数据位
0175 EA 212 MOV A,R2
0176 C294 213 CLR SCL ;将SCL拉低,时间大于4.7us
0178 33 214 RLC A ;进行数据位的处理
0179 FA 215 MOV R2,A
017A 00 216 NOP
017B 00 217 NOP
017C 00 218 NOP
017D D8ED 219 DJNZ R0,RLP ;未够8位,继续读入
017F 22 220 RET
221
222
0180 7CF0 223 MAIN: MOV R4,#0F0H ;延时,等待其它芯片复位完成
0182 DCFE 224 DJNZ R4,$
225 ;发送数据缓存区初始化,将16个连续字节分别赋值为00H到0FH
0184 7400 226 MOV A,#0
0186 7830 227 MOV R0,#30H
0188 F6 228 S1: MOV @R0,A
0189 08 229 INC R0
018A 04 230 INC A
018B B840FA 231 CJNE R0,#40H,S1
232 ;向24C01C中写数据,数据存放在24C01C中30H开始的16个字节中
018E 7550A0 233 MOV SLA,#0A0H ;24C01C地址字,写操作
0191 755130 234 MOV SUBA,#30H ;目标地址
0194 755210 235 MOV NUMBYTE,#16 ;字节数
0197 120080 236 LCALL IWRNBYTE ;写数据
237 ;从24C01C中读数据,数据送AT89C51中40H开始的16个字节中
238
239
019A 7D14 240 delay: mov r5,#20
019C 7EF8 241 d3: mov r6,#248
019E 7FF8 242 d2: mov r7,#248
01A0 DFFE 243 djnz r7,$
01A2 DEFA 244 djnz r6,d2
01A4 DDF6 245 djnz r5,d3
246
247
248
01A6 7550A0 249 MOV SLA,#0A0H ;24C01C地址字,伪写入操作
01A9 755130 250 MOV SUBA,#30H ;目标地址
01AC 755210 251 MOV NUMBYTE,#16 ;字节数
01AF 1200AB 252 LCALL IRDNBYTE ;写数据
253
254 END
A51 MACRO ASSEMBLER I2C 08/25/2006 15:57:59 PAGE 5
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACK. . . . . . . . B ADDR 0022H.0 A
CACK . . . . . . . C ADDR 012EH A
CEND . . . . . . . C ADDR 013EH A
D2 . . . . . . . . C ADDR 019EH A
D3 . . . . . . . . C ADDR 019CH A
DELAY. . . . . . . C ADDR 019AH A
IRDNBYTE . . . . . C ADDR 00ABH A
IWRNBYTE . . . . . C ADDR 0080H A
MACK . . . . . . . C ADDR 010EH A
MAIN . . . . . . . C ADDR 0180H A
MNACK. . . . . . . C ADDR 011EH A
MRD. . . . . . . . N NUMB 0040H A
MTD. . . . . . . . N NUMB 0030H A
NUMBYTE. . . . . . D ADDR 0052H A
P1 . . . . . . . . D ADDR 0090H A
RDBYTE . . . . . . C ADDR 016AH A
RETRDN . . . . . . C ADDR 00DDH A
RETWRN . . . . . . C ADDR 00A7H A
RLP. . . . . . . . C ADDR 016CH A
RON1 . . . . . . . C ADDR 00D4H A
S1 . . . . . . . . C ADDR 0188H A
SACK . . . . . . . C ADDR 00E1H A
SCL. . . . . . . . B ADDR 0090H.4 A
SDA. . . . . . . . B ADDR 0090H.5 A
SLA. . . . . . . . D ADDR 0050H A
START. . . . . . . C ADDR 00E7H A
STOP . . . . . . . C ADDR 00FBH A
SUBA . . . . . . . D ADDR 0051H A
WLP. . . . . . . . C ADDR 0145H A
WLP1 . . . . . . . C ADDR 014AH A
WRBYTE . . . . . . C ADDR 0143H A
WRDA . . . . . . . C ADDR 009AH A
WRI. . . . . . . . C ADDR 014EH A
WRO. . . . . . . . C ADDR 015CH A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -