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 + -
显示快捷键?