📄 main.lst
字号:
76 001FA 0846 C bc SdaPort,@SDA
77 001FB 11C7 C call I2cDelay
78 001FC 0A86 C bs SclPort,@SCL
79 001FD 11C7 C call I2cDelay
80 001FE 0A46 C bs SdaPort,@SDA
81 001FF 11C7 C call I2cDelay
82 00200 11C7 C call I2cDelay
83 00201 0886 C bc SclPort,@SCL
84 00202 11C7 C call I2cDelay
85 00203 11C7 C call I2cDelay
86 C
87 00204 0012 C ret
88 C
89 C ;===============================================
90 C ; Function:I2cStop()
91 C ;===============================================
92 C
93 C
94 C ;===============================================
95 C ; Function:I2cGetAck()(GetAck(Read0),DoAck(Send1))
96 C ;===============================================
97 00205 C I2cGetAck:
98 C ;Set @SDA to input Modual
99 C
100 00205 0016 C ior SdaPort
101 00206 0051 C mov IO_buff,A
102 00207 0A51 C bs IO_buff,@SDA
103 00208 0411 C mov A,IO_buff
104 00209 0006 C iow SdaPort
105 C
106 0020A 00D0 C CLR A_buff
107 0020B 11C7 C call I2cDelay
108 C
109 C ;@SCL = 1
110 C
111 0020C 0A86 C bs SclPort,@SCL
112 0020D 11C7 C call I2cDelay
113 C ;if(@SDA == 0) A_buff=(1<<ACK);
114 0020E 0E46 C jbs SdaPort,@SDA
115 0020F 0A10 C bs A_buff,ACK
116 C
117 C ;@SCL = 0
118 00210 0886 C bc SclPort,@SCL
119 00211 11C7 C call I2cDelay
120 C ;Set @SDA output
121 00212 0016 C ior SdaPort
122 00213 0051 C mov IO_buff,A
123 00214 0851 C bc IO_buff,@SDA
124 00215 0411 C mov A,IO_buff
125 00216 0006 C iow SdaPort
126 C
127 00217 0410 C mov A,A_buff
128 00218 0012 C ret
129 C
130 C
131 C
132 C ;===============================================
133 C ; Function:I2cDoAck()
134 C ;===============================================
135 00219 C I2cDoAck:
136 C ;@SDA = 0;
137 00219 0846 C bc SdaPort,@SDA
138 0021A 11C7 C call I2cDelay
139 0021B 11C7 C call I2cDelay
140 C
141 C ;@SCL = 1;
142 0021C 0A86 C bs SclPort,@SCL
143 0021D 11C7 C call I2cDelay
144 0021E 11C7 C call I2cDelay
145 0021F 0886 C bc SclPort,@SCL
146 00220 11C7 C call I2cDelay
147 00221 11C7 C call I2cDelay
148 00222 0A46 C bs SclPort,@SDA
149 00223 11C7 C call I2cDelay
150 00224 11C7 C call I2cDelay
151 00225 0012 C ret
152 C
153 C
154 C
155 C ;===============================================
156 C ; Function:I2cDoAck()
157 C ;===============================================
158 00226 C I2cUnDoAck:
159 C ;@SDA = 0;
160 00226 0A46 C bs SdaPort,@SDA
161 00227 11C7 C call I2cDelay
162 00228 0A86 C bs SclPort,@SCL
163 00229 11C7 C call I2cDelay
164 0022A 11C7 C call I2cDelay
165 0022B 0886 C bc SclPort,@SCL
166 0022C 11C7 C call I2cDelay
167 0022D 11C7 C call I2cDelay
168 C ;@SCL = 0;
169 0022E 0846 C bc SclPort,@SDA
170 0022F 11C7 C call I2cDelay
171 00230 0012 C ret
172 C
173 C ;===============================================
174 C ; Function:I2cSendByte(A=Data)
175 C ;===============================================
176 00231 C I2cSendByte:
177 00231 0050 C mov A_buff,A
178 00232 1808 C mov A,@8
179 00233 0055 C mov Count,A
180 C
181 00234 C I2cLoopSend:
182 C ;if(A_buff & 0x80) Send1 else Send0;
183 00234 0FD0 C jbs A_buff,7
184 00235 1638 C jmp I2cSend0
185 C
186 00236 C I2cSend1:
187 00236 0A46 C bs SdaPort,@SDA
188 00237 1639 C jmp I2cSendBegin
189 C
190 00238 C I2cSend0:
191 00238 0846 C bc SdaPort,@SDA
192 C
193 00239 C I2cSendBegin:
194 00239 11C7 C call I2cDelay
195 C
196 C ;@SCL = 1;
197 0023A 0A86 C bs SclPort,@SCL
198 0023B 11C7 C call I2cDelay
199 0023C 11C7 C call I2cDelay
200 C
201 C ;@SCL = 0;
202 0023D 0886 C bc SclPort,@SCL
203 0023E 11C7 C call I2cDelay
204 C
205 0023F C I2cSendNext:
206 C ;A_buff <<= 1;
207 0023F 06D0 C rlc A_buff
208 00240 05D5 C djz Count
209 00241 1634 C jmp I2cLoopSend
210 C
211 00242 0012 C ret
212 C
213 C ;===============================================
214 C ; Function:I2cSendVByte(A=Data)
215 C ;===============================================
216 00243 C I2cSendVByte:
217 00243 0050 C mov A_buff,A
218 00244 1808 C mov A,@8
219 00245 0055 C mov Count,A
220 C
221 00246 C I2cLoopSendV:
222 C ;if(A_buff & 0x01) Send1 else Send 0;
223 00246 0E10 C jbs A_buff,0
224 00247 164A C jmp I2cSendV0
225 C
226 00248 C I2cSendV1:
227 C ;@SDA = 1;
228 00248 0A46 C bs SdaPort,@SDA
229 00249 164B C jmp I2cSendVBegin
230 C
231 0024A C I2cSendV0:
232 C ;@SDA = 0
233 0024A 0846 C bc SdaPort,@SDA
234 C
235 0024B C I2cSendVBegin:
236 0024B 11C7 C call I2cDelay
237 C
238 C ;@SCL = 1
239 0024C 0A86 C bs SclPort,@SCL
240 0024D 11C7 C call I2cDelay
241 0024E 11C7 C call I2cDelay
242 C
243 C ;@SCL = 0;
244 0024F 0886 C bc SclPort,@SCL
245 00250 11C7 C call I2cDelay
246 C
247 C ;A_buff >>= 1;
248 00251 0650 C rrc A_buff
249 00252 05D5 C djz Count
250 00253 1646 C jmp I2cLoopSendV
251 00254 0012 C ret
252 C
253 C ;===============================================
254 C ; Function:I2cReadByte()= A
255 C ;===============================================
256 00255 C I2cReadByte:
257 C ;Set Input @SDA
258 00255 0016 C ior SdaPort
259 00256 0051 C mov IO_buff,A
260 00257 0A51 C bs IO_buff,@SDA
261 00258 0411 C mov A,IO_buff
262 00259 0006 C iow SdaPort
263 C
264 0025A 00D0 C CLR A_buff
265 C
266 0025B 1808 C mov A,@8
267 0025C 0055 C mov Count,A
268 0025D C I2cLoopRead:
269 C ;@SDA = 1;
270 0025D 0A46 C bs SdaPort,@SDA
271 0025E 11C7 C call I2cDelay
272 C
273 C ;@SCL = 1
274 0025F 0A86 C bs SclPort,@SCL
275 00260 11C7 C call I2cDelay
276 00261 11C7 C call I2cDelay
277 C
278 C ;A_buff <<= 1;
279 00262 0A03 C bs FLAG,C
280 00263 06D0 C rlc A_buff
281 C
282 C ;if(@SDA)
283 00264 0E46 C jbs SdaPort,@SDA
284 00265 0810 C bc A_buff,0
285 00266 11C7 C call I2cDelay
286 C
287 C ;@SCL = 0;
288 00267 0886 C bc SclPort,@SCL
289 00268 11C7 C call I2cDelay
290 C
291 00269 05D5 C djz Count
292 0026A 165D C jmp I2cLoopRead
293 C
294 C ;Set @SDA output
295 0026B 0016 C ior SdaPort
296 0026C 0051 C mov IO_buff,A
297 0026D 0851 C bc IO_buff,@SDA
298 0026E 0411 C mov A,IO_buff
299 0026F 0006 C iow SdaPort
300 C
301 00270 0410 C mov A,A_buff
302 C
303 00271 0012 C ret
304 C
305 C ;**********************************************
306 C ;* 下面是标准协议,可以用于标准I2C传输
307 C ;**********************************************
308 C ;==============================================
309 C ; Function:I2cRead(I2cDevId,I2cAddr)
310 C ;===============================================
311 00272 C I2cRead:
312 00272 11F0 C call I2cStart
313 C
314 C ; Device Id:I2cAddr
315 00273 1821 C mov A,@0x21;I2cDevId
316 00274 1231 C call I2cSendByte
317 00275 1205 C call I2cGetAck
318 00276 0E10 C jbs A_buff,ACK
319 00277 1685 C jmp I2cReadDone
320 C
321 C ; Read Data:0AH
322 00278 1255 C call I2cReadByte
323 00279 005B C mov channel_cnt,a
324 0027A 1219 C call I2cDoAck
325 C
326 C
327 C ; Read Data:00AL
328 0027B 1255 C call I2cReadByte
329 0027C 005B C mov channel_cnt,A
330 0027D 1219 C call I2cDoAck
331 C
332 C ; Read Data:0BH
333 0027E 1255 C call I2cReadByte
334 0027F 005A C mov RSSI,a
335 00280 1219 C call I2cDoAck
336 C
337 C
338 C ; Read Data:0BL
339 00281 1255 C call I2cReadByte
340 C ;mov channel_cnt,A
341 C
342 00282 1226 C call I2cUnDoAck
343 C ; Set Ok flag!
344 00283 1801 C mov A,@1
345 00284 0000 C NOP
346 C
347 00285 C I2cReadDone:
348 C ;call I2cStop
349 00285 11FA C call I2cStop
350 00286 0410 C mov A,A_buff
351 00287 0012 C ret
352 C
353 C ;===============================================
354 C ; Function:I2cWrite(I2cDevId,I2cAddr,I2cData)
355 C ;===============================================
356 C ;I2cWrite:
357 C ; call I2cStart
358 C
359 C ; Device Id : (A = I2cDevId)
360 C ; mov A,I2cDevId
361 C ; call I2cSendByte
362 C ; call I2cGetAck
363 C ; jbs A_buff,ACK
364 C ; jmp I2cWriteDone
365 C ;
366 C ; Sub Address : (A = I2cAddr)
367 C ; mov A,I2cAddr
368 C ; call I2cSendByte
369 C ; call I2cGetAck
370 C ; jbs A_buff,ACK
371 C ; jmp I2cWriteDone
372 C
373 C ; Write Data : (A = I2cData)
374 C ; mov A,I2cData
375 C ; call I2cSendByte
376 C ; call I2cGetAck
377 C ; jbs A_buff,ACK
378 C ; jmp I2cWriteDone
379 C
380 C ; return true!
381 C ; mov A,@1
382 C ; NOP
383 C ;
384 C ;I2cWriteDone:
385 C ; call I2cStop
386 C ; mov A,A_buff
387 C ;
388 C ; ret
389 C
390 C
391 C
392 C
393 C ;===============================================
394 C ; END OF I2C
395 C ;===============================================
396 C
323 include "5800.asm"
1 C include "5800.inc"
1 C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -