📄 fm_i2cdrv2.lst
字号:
176 0000BC F5 PUSH AF
177 0000BD DBF3 IN A,(SDA_outport)
178 0000BF CB8F RES SDA_outport_num,A
179 0000C1 D3F3 OUT (SDA_outport),A
180 0000C3 DBF3 IN A,(SCL_outport)
181 0000C5 CB87 RES SCL_outport_num,A
182 0000C7 D3F3 OUT (SCL_outport),A
183 0000C9 F1 POP AF
184 0000CA C9 RET
185 0000CB //===============================================
186 0000CB I2C_start:
187 0000CB F5 PUSH AF
188 0000CC DBF4 IN A,(SDA_doport)
189 0000CE CB8F RES SDA_doport_num,A
190 0000D0 D3F4 OUT (SDA_doport),A
191 0000D2 CD.... CALL LWRD I2C_wait5us
192 0000D5 DBF4 IN A,(SCL_doport)
193 0000D7 CB87 RES SCL_doport_num,A
194 0000D9 D3F4 OUT (SCL_doport),A
195 0000DB F1 POP AF
196 0000DC C9 RET
197 0000DD //---------------------------------------------
198 0000DD I2C_stop:
199 0000DD F5 PUSH AF
200 0000DE DBF4 IN A,(SCL_doport)
201 0000E0 CBC7 SET SCL_doport_num,A
202 0000E2 D3F4 OUT (SCL_doport),A
203 0000E4 CD.... CALL LWRD I2C_wait5us
204 0000E7 DBF4 IN A,(SDA_doport)
205 0000E9 CBCF SET SDA_doport_num,A
206 0000EB D3F4 OUT (SDA_doport),A
207 0000ED F1 POP AF
208 0000EE C9 RET
209 0000EF //==================================================
======
210 0000EF
211 0000EF //==================================================
======
212 0000EF //A 为待传数据,返回时A中为响应类型,0为ACK, 1为NACK
213 0000EF //若为地址字节且欲读取数据,B为1,否则为0
214 0000EF I2Ctransbyte:
215 0000EF C5 PUSH BC
216 0000F0 4F LD C,A
217 0000F1 CD.... CALL LWRD I2CSendbyte
218 0000F4 //SDA output-->input
219 0000F4 DBF3 IN A,(SDA_outport)
220 0000F6 CB8F RES SDA_outport_num,A
221 0000F8 D3F3 OUT (SDA_outport),A
222 0000FA DBF3 IN A,(SDA_inport)
223 0000FC CBEF SET SDA_inport_num,A
224 0000FE D3F3 OUT (SDA_inport),A
225 000100 //SCL output 1
226 000100 CD.... CALL LWRD I2C_wait5us
227 000103 DBF4 IN A,(SCL_doport)
228 000105 CBC7 SET SCL_doport_num,A
229 000107 D3F4 OUT (SCL_doport),A
230 000109
231 000109 DBF4 IN A,(SDA_dinport)
232 00010B CB4F BIT SDA_dinport_num,A
233 00010D 2020 JR NZ,GetNACK
234 00010F
235 00010F 0E00 LD C,00H
236 000111 78 LD A,B
237 000112 FE01 CP 01H
238 000114 280E JR Z,I2Creadaddbyte
239 000116
240 000116 DBF3 IN A,(SDA_inport)
241 000118 CBAF RES SDA_inport_num,A
242 00011A D3F3 OUT (SDA_inport),A
243 00011C
244 00011C DBF4 IN A,(SDA_doport)
245 00011E CB8F RES SDA_doport_num,A
246 000120 D3F4 OUT (SDA_doport),A
247 000122 1813 JR ACKgetok
248 000124 I2Creadaddbyte:
249 000124 CD.... CALL LWRD I2C_wait5us
250 000127 DBF4 IN A,(SCL_doport)
251 000129 CB87 RES SCL_doport_num,A
252 00012B D3F4 OUT (SCL_doport),A
253 00012D 181D JR I2Ctransok
254 00012F GetNACK:
255 00012F 0E01 LD C,01H
256 000131 DBF4 IN A,(SDA_doport)
257 000133 CBCF SET SDA_doport_num,A
258 000135 D3F4 OUT (SDA_doport),A
259 000137 ACKgetok:
260 000137 DBF3 IN A,(SDA_outport)
261 000139 CBCF SET SDA_outport_num,A
262 00013B D3F3 OUT (SDA_outport),A
263 00013D
264 00013D CD.... CALL LWRD I2C_wait5us
265 000140
266 000140 DBF4 IN A,(SCL_doport)
267 000142 CB87 RES SCL_doport_num,A
268 000144 D3F4 OUT (SCL_doport),A
269 000146
270 000146 DBF4 IN A,(SDA_doport)
271 000148 CB8F RES SDA_doport_num,A
272 00014A D3F4 OUT (SDA_doport),A
273 00014C I2Ctransok:
274 00014C 79 LD A,C
275 00014D C1 POP BC
276 00014E C9 RET
277 00014F //==================================================
278 00014F
279 00014F //==================================================
280 00014F //A入口为准备响应,返回为接受到的数值
281 00014F I2Crecebyte:
282 00014F C5 PUSH BC
283 000150 47 LD B,A
284 000151 C5 PUSH BC
285 000152
286 000152 DBF3 IN A,(SCL_outport)
287 000154 CB87 RES SCL_outport_num,A
288 000156 D3F3 OUT (SCL_outport),A
289 000158 DBF3 IN A,(SCL_inport)
290 00015A CBE7 SET SCL_inport_num,A
291 00015C D3F3 OUT (SCL_inport),A
292 00015E waitsclrelease:
293 00015E DBF4 IN A,(SCL_dinport)
294 000160 CB47 BIT SCL_dinport_num,A
295 000162 28FA JR Z,waitsclrelease
296 000164
297 000164 DBF3 IN A,(SCL_inport)
298 000166 CBA7 RES SCL_inport_num,A
299 000168 D3F3 OUT (SCL_inport),A
300 00016A
301 00016A DBF4 IN A,(SCL_doport)
302 00016C CBC7 SET SCL_doport_num,A
303 00016E D3F4 OUT (SCL_doport),A
304 000170 DBF3 IN A,(SCL_outport)
305 000172 CBC7 SET SCL_outport_num,A
306 000174 D3F3 OUT (SCL_outport),A
307 000176
308 000176 0608 LD B,08H
309 000178 SDAInextbit:
310 000178 DBF4 IN A,(SCL_doport)
311 00017A CBC7 SET SCL_doport_num,A
312 00017C D3F4 OUT (SCL_doport),A
313 00017E
314 00017E CD.... CALL LWRD I2C_wait3us
315 000181
316 000181 DBF4 IN A,(SDA_dinport)
317 000183 CB4F BIT SDA_dinport_num,A
318 000185 2805 JR Z,SDAI0
319 000187 SDAI1:
320 000187 37 SCF
321 000188 CB11 RL C
322 00018A 1802 JR SDAI_OK
323 00018C SDAI0:
324 00018C CB21 SLA C
325 00018E SDAI_OK:
326 00018E 78 LD A,B
327 00018F FE01 CP 01H
328 000191 280D JR Z,I2CRlastbit
329 000193
330 000193 C5 PUSH BC
331 000194 C1 POP BC
332 000195
333 000195 DBF4 IN A,(SCL_doport)
334 000197 CB87 RES SCL_doport_num,A
335 000199 D3F4 OUT (SCL_doport),A
336 00019B
337 00019B CD.... CALL LWRD I2C_wait5us
338 00019E 10D8 DJNZ SDAInextbit
339 0001A0 I2CRlastbit:
340 0001A0 DBF3 IN A,(SDA_inport)
341 0001A2 CBAF RES SDA_inport_num,A
342 0001A4 D3F3 OUT (SDA_inport),A
343 0001A6
344 0001A6 CB41 BIT 0,C
345 0001A8 2008 JR NZ,I2CRlastbit1
346 0001AA DBF4 IN A,(SDA_doport)
347 0001AC CB8F RES SDA_doport_num,A
348 0001AE D3F4 OUT (SDA_doport),A
349 0001B0 1806 JR I2CRlastbitOK
350 0001B2 I2CRlastbit1:
351 0001B2 DBF4 IN A,(SDA_doport)
352 0001B4 CBCF SET SDA_doport_num,A
353 0001B6 D3F4 OUT (SDA_doport),A
354 0001B8 I2CRlastbitOK:
355 0001B8 DBF3 IN A,(SDA_outport)
356 0001BA CBCF SET SDA_outport_num,A
357 0001BC D3F3 OUT (SDA_outport),A
358 0001BE
359 0001BE DBF4 IN A,(SCL_doport)
360 0001C0 CB87 RES SCL_doport_num,A
361 0001C2 D3F4 OUT (SCL_doport),A
362 0001C4
363 0001C4 79 LD A,C
364 0001C5 C1 POP BC
365 0001C6 4F LD C,A
366 0001C7 78 LD A,B
367 0001C8 FE00 CP 00H
368 0001CA 2026 JR NZ,GenNACK
369 0001CC
370 0001CC DBF4 IN A,(SDA_doport)
371 0001CE CB8F RES SDA_doport_num,A
372 0001D0 D3F4 OUT (SDA_doport),A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -