iic.lst
来自「myson的MTV332的DEMO程序 主要功能有菜单的设计和无线遥控以及视频」· LST 代码 · 共 497 行 · 第 1/2 页
LST
497 行
EEP_Wait = 0;
byMTV_IIC_CTR = 0x0; // STOP
byMTV_IIC_CTR = 0x2; // STOP
}
//--------------------------------------------------------
C51 COMPILER V7.09 IIC 09/06/2006 13:39:47 PAGE 5
// Wait for MBUFL flag and clear it, return 1 if time out
//--------------------------------------------------------
void Wait_IIC_Ack(void)
{
Short_Delay(10);
IIC_Timer = 1;
while(IIC_Timer > 0 && (byMTV_IIC_INTFLG & 0x1) == 0);
if ((byMTV_IIC_STUS1 & 0x01 ) == 0)
bNoAck = 0;
else
bNoAck = 1;
byMTV_IIC_INTFLG = 0;
}
//--------------------------------------------------------
// IIC write address
//--------------------------------------------------------
void IIC_Write(BYTE id,BYTE addr,BYTE *databuf,WORD number)
{
int i;
BYTE count = 0;
do
{
count++;
// Stop
byMTV_IIC_CTR = 0x00;
byMTV_IIC_CTR = 0x02;
Short_Delay(20);
byMTV_IIC_INTFLG = 0x00;
// Slave ID
byMTV_IIC_MBUF = id;
// Start
byMTV_IIC_CTR = 0x00;
byMTV_IIC_CTR = 0x01;
Wait_IIC_Ack();
if (bNoAck)
continue;
// Address
byMTV_IIC_MBUF = addr;
Wait_IIC_Ack();
if (bNoAck)
continue;
// data
for(i = 0; i < number; i++)
{
byMTV_IIC_MBUF = databuf[i];
Wait_IIC_Ack();
C51 COMPILER V7.09 IIC 09/06/2006 13:39:47 PAGE 6
if(bNoAck)
break;
}
}
while(bNoAck && count < 10);
// Stop
byMTV_IIC_CTR = 0x00;
byMTV_IIC_CTR = 0x02;
}
//--------------------------------------------------------
// IIC Read address
//--------------------------------------------------------
void IIC_Read(BYTE id,BYTE addr,BYTE *databuf,WORD number)
{
int i;
BYTE count = 0;
do
{
count++;
// Stop
byMTV_IIC_CTR = 0x00;
byMTV_IIC_CTR = 0x02;
Short_Delay(20);
byMTV_IIC_INTFLG = 0x00;
// Slave ID
byMTV_IIC_MBUF = id;
// Start
byMTV_IIC_CTR = 0x00;
byMTV_IIC_CTR = 0x01;
Wait_IIC_Ack();
if (bNoAck)
continue;
// Address
byMTV_IIC_MBUF = addr;
Wait_IIC_Ack();
if (bNoAck)
continue;
// Stop
byMTV_IIC_CTR = 0;
byMTV_IIC_CTR = 0x2;
Short_Delay(20);
// Slave ID
byMTV_IIC_MBUF = id | 0x01;
// Start
byMTV_IIC_CTR = 0x0;
byMTV_IIC_CTR = 0x1;
C51 COMPILER V7.09 IIC 09/06/2006 13:39:47 PAGE 7
Wait_IIC_Ack();
if (bNoAck)
continue;
// useless data
databuf[0] = byMTV_IIC_MBUF;
// data
for(i = 0; i < number-1; i++)
{
Wait_IIC_Ack();
if(bNoAck)
break;
databuf[i] = byMTV_IIC_MBUF;
}
if(bNoAck)
continue;
byMTV_IIC_CTR = 0x05;
Wait_IIC_Ack();
if (bNoAck)
continue;
databuf[i] = byMTV_IIC_MBUF;
}
while(bNoAck && count < 10);
// Stop
byMTV_IIC_CTR = 0x00;
byMTV_IIC_CTR = 0x02;
}
#endif // #ifdef _IICSW_
403
404
405 /****************************************************************************/
406 void EEPROM_Write(WORD addr,BYTE *databuf,WORD number)
407 {
408 1 BYTE id,temp;
409 1 union W_TEMP addr1;
410 1
411 1 addr1.valW = addr;
412 1
413 1 while( number > 0)
414 1 {
415 2 id = I2C_EEP_ADDR + (addr1.valB[0] << 1);
416 2 temp = EEPROM_PBYTE -(addr1.valB[1]&(EEPROM_PBYTE-1));
417 2 if( temp > number)
418 2 temp = number;
419 2
420 2
421 2 while(EEP_Wait > 0);
422 2
423 2 WriteData(id,addr1.valB[1],databuf,temp);
424 2 EEP_Wait = EEPROM_PTIME;
425 2
426 2 number -= temp;
C51 COMPILER V7.09 IIC 09/06/2006 13:39:47 PAGE 8
427 2 addr1.valW += temp;
428 2 databuf += temp;
429 2 }
430 1
431 1 }
432
433 /****************************************************************************/
434 void EEPROM_Read(WORD addr,BYTE *databuf,WORD number)
435 {
436 1 BYTE id;
437 1 union W_TEMP addr1;
438 1
439 1 addr1.valW = addr;
440 1 id = I2C_EEP_ADDR + (addr1.valB[0] << 1);
441 1 while(EEP_Wait > 0);
442 1
443 1 ReadData(id,addr1.valB[1],databuf,number);
444 1
445 1 }
446 /****************************************************************************/
447 void CS7111_Read(WORD addr,BYTE *databuf,WORD number)
448 {
449 1 ReadData(I2C_CS7111_ADDR,addr,databuf,number);
450 1 }
451
452 /****************************************************************************/
453 void CS7111_Write(BYTE addr,BYTE databuf)
454 {
455 1 WriteData(I2C_CS7111_ADDR,addr,&databuf,1);
456 1
457 1 }
458
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 775 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 44
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?