📄 i2c_control.lst
字号:
198 3 }
199 2 if(iAck)
200 2 {
201 3 iAck = Write(c2);
202 3 }
203 2 }
204 1 Stop();
205 1 return iAck;
206 1 }
207
208 /* ================================================================
209 Name : I2CReadByte
210 Purpose : Read i2c device one byte
211 Passed : Pass Device Addr, subaddress, then read one byte
212 Notes :
213 ================================================================ */
214
215 Byte I2CReadByte(Byte device, Byte subaddress)
216 {
217 1 Bool iAck;
218 1 Byte c;
219 1 Start();
220 1 iAck = Write(device | I2C_W);
221 1 if(iAck)
222 1 {
223 2 iAck = Write(subaddress);
224 2 if(iAck)
225 2 {
226 3 Start();
227 3 iAck = Write(device | I2C_R);
228 3 }
229 2 if(iAck)
230 2 c = Read();
231 2 Stop();
232 2 return c;
233 2 }
234 1 }
235
236 /* ================================================================
237 Name : I2CWrtCNByte
238 Purpose : Write Command Array to I2C Device
239 Passed : Pass Device Addr, code-array, start reg address, length
240 Notes :
241 ================================================================ */
C51 COMPILER V7.07 I2C_CONTROL 09/26/2006 08:56:41 PAGE 5
242
243 Bool I2CWrtCNByte(Byte byDEV, Byte code *ptr, Byte byStartReg, Byte byLen)
244 {
245 1 Byte i;
246 1 Bool iAck;
247 1
248 1 EX0 = 0;
249 1 Start();
250 1 iAck = Write(byDEV);
251 1 if (iAck)
252 1 {
253 2 iAck = Write(byStartReg);
254 2 if (iAck)
255 2 {
256 3 for (i = 0; i < byLen; i++)
257 3 {
258 4 if(!Write(*ptr++))
259 4 {
260 5 Stop();
261 5 EX0 = 1;
262 5 return FALSE;
263 5 }
264 4 }
265 3 }
266 2 }
267 1 Stop();
268 1 EX0 = 1;
269 1 return iAck;
270 1 }
271
272 /* ================================================================
273 Name : I2CWrite3Byte
274 Purpose : Write I2C Device three bytes
275 Passed : Pass Device Addr, code-array, start reg address, length
276 Notes :
277 ================================================================ */
278
279 Bool I2CWrite3Byte(Byte device, Byte subadr0, Byte c1, Byte c2, Byte c3 )
280 {
281 1 Bool iAck;
282 1 Start();
283 1 iAck = Write(device | I2C_W);
284 1 if(iAck)
285 1 {
286 2 iAck = Write(subadr0);
287 2 if(iAck) iAck = Write(c1);
288 2 if(iAck) iAck = Write(c2);
289 2 if(iAck) iAck = Write(c3);
290 2 }
291 1 Stop();
292 1 return iAck;
293 1 }
294
295 /* ----------------------------------------------------------
296 Name : I2CWrtHead -
297 Purpose :
298 Passed : device : device slave address
299 subadr : register address
300 Returns : return TRUE if success, otherwise return FALSE.
301 Notes :
302 ----------------------------------------------------------*/
303
C51 COMPILER V7.07 I2C_CONTROL 09/26/2006 08:56:41 PAGE 6
304 Bool I2CWrtHead(Byte device, Byte subadr)
305 {
306 1 Bool iAck;
307 1
308 1 Start();
309 1 iAck = Write(device | I2C_W);
310 1 if (iAck)
311 1 iAck = Write(subadr);
312 1 return iAck;
313 1
314 1 }
315
316 /* ----------------------------------------------------------
317 Name : I2CReadWord -
318 Purpose :
319 Passed : device : device slave address
320 subadr : register address
321 Returns : return TRUE if success, otherwise return FALSE.
322 Notes :
323 ----------------------------------------------------------*/
324 /*
325 Bool I2CReadWord( Byte device , Byte subaddress, Word idata *c)
326 {
327 if (I2CReadByte(device, subaddress,(Byte idata *)c+1) && I2CReadByte(device, subaddress+1,(Byte idata *)c
-))
328 return 1;
329 else
330 return 0;
331 }
332 */
333 /* ----------------------------------------------------------
334 Name : ReadWord
335 Purpose : Only Used for VPC3230
336 Passed :
337 Returns :
338 Notes :
339 ----------------------------------------------------------*/
340
341 Word ReadWord(void)
342 {
343 1 Byte byBitPos;
344 1 Byte c,d;
345 1
346 1 byBitPos = 0x80;
347 1 c = 0;
348 1 while(byBitPos)
349 1 {
350 2 ioI2cScl=BIT1;
351 2 while(ioI2cScl == BIT0);
352 2 _nop_();
353 2 if(ioI2cSda) c |= byBitPos;
354 2 ioI2cScl=BIT0;
355 2 _nop_();
356 2 byBitPos >>= 1;
357 2 }
358 1 ioI2cSda = BIT0;
359 1 _nop_();
360 1 ioI2cScl = BIT1;
361 1 _nop_();
362 1 ioI2cScl = BIT0;
363 1 _nop_();
364 1 ioI2cSda = BIT1;
C51 COMPILER V7.07 I2C_CONTROL 09/26/2006 08:56:41 PAGE 7
365 1 _nop_();
366 1
367 1 d = 0;
368 1 byBitPos = 0x80;
369 1 while(byBitPos)
370 1 {
371 2 ioI2cScl=BIT1;
372 2 while(ioI2cScl == BIT0);
373 2 _nop_();
374 2 if(ioI2cSda)
375 2 d |= byBitPos;
376 2 ioI2cScl=BIT0;
377 2 _nop_();
378 2 byBitPos >>= 1;
379 2 }
380 1 ioI2cSda=BIT1;
381 1 _nop_();
382 1 ioI2cScl=BIT1;
383 1 _nop_();
384 1 ioI2cScl=BIT0;
385 1 _nop_();
386 1 return c*0x0100 + d;
387 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 502 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
IDATA SIZE = ---- ----
BIT SIZE = ---- 7
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -