?? i2c.lst
字號:
301 1 }
302
C51 COMPILER V7.50 I2C 08/20/2007 10:23:30 PAGE 6
303 void ReadI2Cmn(BYTE addr, BYTE wcnt, BYTE rcnt, BYTE *rwdata)
304 {
305 1 BYTE i;
306 1
307 1 I2CStart();
308 1 I2CWriteData(addr);
309 1 for(i=0; i<wcnt; i++)
310 1 I2CWriteData( rwdata[i] );
311 1
312 1 I2CStart();
313 1 I2CWriteData(addr | 0x01);
314 1 for(i=0; i<rcnt-1; i++)
315 1 rwdata[i] = I2CReadDataWithACK();
316 1 rwdata[i++] = I2CReadDataWithNAK();
317 1 I2CStop();
318 1 }
319 /*
320 void ReadI2CStatusn(BYTE addr, BYTE rcnt, BYTE *rwdata)
321 {
322 BYTE i;
323
324 // I2CStart();
325 // I2CWriteData(addr);
326 // for(i=0; i<wcnt; i++)
327 // I2CWriteData( rwdata[i] );
328
329 I2CStart();
330 I2CWriteData(addr | 0x01);
331
332 for(i=0; i<rcnt-1; i++)
333 rwdata[i] = I2CReadDataWithACK();
334 rwdata[i++] = I2CReadDataWithNAK();
335 I2CStop();
336 }
337 */
338 #endif // SERIAL
339
340 /*****************************************************************************/
341 /* */
342 /*****************************************************************************/
343 BYTE I2CWriteData_Wait(BYTE value)
344 {
345 1 WORD i;
346 1 BYTE ack;
347 1
348 1 for(i=0; i<8; i++, value<<=1) {
349 2 if(value & 0x80) I2C_SDA = 1;
350 2 else I2C_SDA = 0;
351 2 I2Cdelay();
352 2 I2C_SCL = 1; I2Cdelay();
353 2 I2C_SCL = 0;
354 2 }
355 1 I2C_SDA = 1; I2Cdelay();
356 1 I2C_SCL = 1; I2Cdelay();
357 1 i=0;
358 1 while(1) {
359 2 if( I2C_SCL ) break;
360 2 i++;
361 2 }
362 1
363 1 ack = I2C_SDA; //I2Cdelay();
364 1 I2C_SCL = 0;
C51 COMPILER V7.50 I2C 08/20/2007 10:23:30 PAGE 7
365 1 return (1-ack);
366 1 }
367
368 #ifndef QVGA
369 void dd(void)
370 {
371 1 }
372 #else
#define dd() I2Cdelay()
#endif
375
376 void I2CStart()
377 {
378 1 I2C_SDA = 1; dd();
379 1 I2C_SCL = 1; dd();
380 1 I2C_SDA = 0; dd();
381 1 I2C_SCL = 0;
382 1 }
383
384 void I2CStop()
385 {
386 1 I2C_SDA = 0; dd();
387 1 I2C_SCL = 1; dd();
388 1 I2C_SDA = 1;
389 1 }
390
391 void I2CWriteData(BYTE value)
392 {
393 1 /*
394 1 int i;
395 1
396 1 for(i=0; i<8; i++, value<<=1) {
397 1 I2C_SCL = 0;
398 1 I2Cdelay(); // HHY 2.04 in special case, it was unstable
399 1 if(value & 0x80) I2C_SDA = 1;
400 1 else I2C_SDA = 0;
401 1 I2Cdelay();
402 1 I2C_SCL = 1;
403 1 }
404 1 */
405 1
406 1 I2C_SCL=0; I2C_SDA=(value & 0x80)? 1:0; I2C_SCL=1; dd();
407 1 I2C_SCL=0; I2C_SDA=(value & 0x40)? 1:0; I2C_SCL=1; dd();
408 1 I2C_SCL=0; I2C_SDA=(value & 0x20)? 1:0; I2C_SCL=1; dd();
409 1 I2C_SCL=0; I2C_SDA=(value & 0x10)? 1:0; I2C_SCL=1; dd();
410 1
411 1 I2C_SCL=0; I2C_SDA=(value & 0x08)? 1:0; I2C_SCL=1; dd();
412 1 I2C_SCL=0; I2C_SDA=(value & 0x04)? 1:0; I2C_SCL=1; dd();
413 1 I2C_SCL=0; I2C_SDA=(value & 0x02)? 1:0; I2C_SCL=1; dd();
414 1 I2C_SCL=0; I2C_SDA=(value & 0x01)? 1:0; I2C_SCL=1; dd();
415 1
416 1
417 1 I2C_SCL = 0; // HHY 3.00
418 1 I2C_SCL = 0; // HHY 3.00
419 1 I2C_SCL = 0; // I2Cdelay();
420 1 I2C_SDA = 1; // I2Cdelay();
421 1
422 1 I2C_SCL = 1; // HHY 3.00
423 1 I2C_SCL = 1; // HHY 3.00
424 1 I2C_SCL = 1; // I2Cdelay();
425 1 I2C_SCL = 0;
426 1 }
C51 COMPILER V7.50 I2C 08/20/2007 10:23:30 PAGE 8
427
428 BYTE I2CReadData()
429 {
430 1 int i;
431 1 BYTE value=0;
432 1
433 1 I2C_SDA = 1; dd();
434 1 I2C_SCL = 0;
435 1
436 1 for(i=0; i<8; i++) {
437 2 I2C_SCL = 1;
438 2 value <<= 1;
439 2 if(I2C_SDA) value |= 1;
440 2 I2C_SCL = 0;
441 2 }
442 1 dd();
443 1
444 1 I2C_SCL = 1; // HHY 3.00
445 1 I2C_SCL = 1; // HHY 3.00
446 1 I2C_SCL = 1;
447 1 I2C_SCL = 0;
448 1
449 1 return value;
450 1
451 1 }
452
453 BYTE I2CReadDataWithACK()
454 {
455 1 int i;
456 1 BYTE value=0;
457 1
458 1 I2C_SDA = 1; I2Cdelay();
459 1 I2C_SCL = 0;
460 1
461 1 for(i=0; i<8; i++) {
462 2 I2C_SCL = 1;
463 2 value <<= 1;
464 2 if(I2C_SDA) value |= 1;
465 2 I2C_SCL = 0;
466 2 }
467 1 I2C_SDA = 0; I2Cdelay(); //ack
468 1 I2C_SCL = 1; I2Cdelay();
469 1 I2C_SCL = 0;
470 1
471 1 return value;
472 1 }
473
474 //=============================================================================
475 // Slow I2C routine for Teletext Chip
476 //=============================================================================
477 #ifdef SUPPORT_TELETEXT
void I2Cdelay4(void)
{
BYTE i;
for(i=0; i < 5; i++)
I2Cdelay();
}
void I2CStartLong(void)
{
I2C_SDA = 1; I2Cdelay4();
C51 COMPILER V7.50 I2C 08/20/2007 10:23:30 PAGE 9
I2C_SCL = 1; I2Cdelay4();
I2C_SDA = 0; I2Cdelay4();
I2C_SCL = 0; I2Cdelay4();
}
void I2CStopLong(void)
{
I2C_SDA = 0; I2Cdelay4();
I2C_SCL = 1; I2Cdelay4();
I2C_SDA = 1; I2Cdelay4();
}
void I2CWriteData_(BYTE SendData) // Write SendData
{
BYTE SendCnt;
for( SendCnt=0; SendCnt<8; SendCnt++, SendData<<=1 ) {
I2C_SCL = 0;
I2Cdelay4();
if(SendData & 0x80) I2C_SDA = 1;
else I2C_SDA = 0;
I2Cdelay4();
I2C_SCL = 1;
I2Cdelay4();
}
I2C_SCL = 0; I2Cdelay4();
I2C_SDA = 1; I2Cdelay4();
I2C_SCL = 1;
I2C_SCL = 0; I2Cdelay4();
I2Cdelay4();
delay(1);
}
void WriteI2CnLong(BYTE addr, BYTE *val, BYTE cnt)
{
BYTE i;//rd=1, i;
I2Cdelay4();
I2Cdelay4();
I2CStartLong();
I2CWriteData_(addr);
for(i=0; i<cnt; i++)
I2CWriteData_(*(val+i));
I2CStopLong();
}
#ifdef DEBUG_TELETEXT
BYTE I2CReadDatatt(BYTE SelNack)
{
int i;
BYTE value=0;
I2C_SDA = 1; I2Cdelay4();
I2C_SCL = 0; I2Cdelay4();
for(i=0; i<8; i++) {
I2C_SCL = 1; I2Cdelay4();
value <<= 1;
if(I2C_SDA)
value |= 1;
C51 COMPILER V7.50 I2C 08/20/2007 10:23:30 PAGE 10
I2C_SCL = 0; I2Cdelay4();
}
if(SelNack == 0x01){
I2C_SDA = 1;
I2Cdelay4(); // nack
}
else{
I2C_SDA = 0;
I2Cdelay4(); // ack
}
I2C_SCL = 1; I2Cdelay4();
I2C_SCL = 0;
return value;
}
void ReadI2Ctt(BYTE addr, BYTE *ReData, BYTE cnt)
{
BYTE i;
I2CStartLong();
I2CWriteData_(addr | 0x01);
if(cnt != 0) {
for(i=0 ; i < cnt ; i++)
ReData[i] = I2CReadDatatt(0x00);
ReData[i] = I2CReadDatatt(0x01);
}
else
ReData[0] = I2CReadDatatt(0x01);
I2CStopLong();
delay(1);
}
#endif
#endif //SUPPORT_TELETEXT
591
592
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1094 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- 53
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -