⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iic.lst

📁 用51单片机实现的在屏幕上显视文字,外接一颗MT230OSDIC
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.07   IIC                                                                   12/01/2003 15:27:33 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE IIC
OBJECT MODULE PLACED IN IIC.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\c51.exe IIC.c DB OE SMALL ROM(LARGE)

stmt level    source

   1          
   2          #include "golbal.h"
   3          
   4          sbit SCL2 = P1^6;
   5          sbit SDA2 = P1^7;
   6          
   7          union {
   8             BYTE ByteArray[32];
   9             WORD WordArray[16];
  10             LWORD DWordArray[8];
  11          }idata IICBuf;   // IIC data Address
  12          
  13          BYTE idata IICWait;
  14          
  15          BYTE * data IICBufPtr;
  16          
  17          bit error;
  18          
  19          void I2cStop(void)
  20          {
  21   1         byM230_IIC_CTR=0x00;
  22   1         ShortDelay(1);
  23   1         byM230_IIC_CTR=byM230_IIC_CTR|0x02;   //P rise
  24   1      }
  25          
  26          void InitialIIC(void)
  27          {    
  28   1      #ifdef  SOFTIIC2 
                               SCL2=1; 
                   SDA2=1;
              #else
  32   1                       I2cStop();
  33   1         //HSCL=1;     //han   4.3
  34   1         //HSDA=1;
  35   1      #endif
  36   1           IICBufPtr=IICBuf.ByteArray;
  37   1      }
  38          
  39          #ifdef  SOFTIIC2
              
              void CheckIIC2Bus(void)
              {
                 error=0;
                 if((SDA2!=1)||(SCL2!=1))
                 {
                    DelayX1ms(2);
                    if((SDA2!=1)||(SCL2!=1))
                    {
                       error=1;
                       return;
                    }
                 }
              }
              
              void IIC2_Start(void) {
C51 COMPILER V7.07   IIC                                                                   12/01/2003 15:27:33 PAGE 2   

                SDA2=1;                       
                IIC2Delay();
                SCL2=1;
                IIC2Delay(); //start condition setup time :4.7 us
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                SDA2=0;
                IIC2Delay(); //start condition hold time :4 us
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                SCL2=0;
                IIC2Delay();// bus free time for next transmission :4.7 us
              }
              
              void IIC2_Stop(void) {
              
                SDA2=0;                                    
                IIC2Delay();
                SCL2=1;
                IIC2Delay();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                SDA2=1;
                IIC2Delay();
              }
              
              bit IIC2_Data_In(BYTE bytedata) {
                
                BYTE data i;
                bit ack;
              
                for(i=0; i<8; i++) {
                  SDA2=bytedata & 0x80;
                  IIC2Delay(); //Clock Low Period : 4.7 us
                  SCL2=1;
                  IIC2Delay(); //Clock High Period
                  _nop_();
                  _nop_();
                  bytedata<<=1;
                  SCL2=0; 
                }
                _nop_();
                _nop_();
                IIC2Delay();
                SDA2=1;
                IIC2Delay();
                SCL2=1;
                IIC2Delay();
                _nop_();
                _nop_();
                ack=SDA2;
                SCL2=0; 
                IIC2Delay();
                //SDA2=0; 
              
                return ack;
C51 COMPILER V7.07   IIC                                                                   12/01/2003 15:27:33 PAGE 3   

              }
              
              
              //============================================================================== 
              BYTE IIC2_Data_Out(void) {
                
                BYTE data i;
                BYTE data bytedata=0;
                
                SDA2=1;  
                for(i=0; i<8; i++) {    
                  SCL2=1;          
                  bytedata<<=1;
                  bytedata|=SDA2;
                  IIC2Delay();
                  SCL2=0;           
                  IIC2Delay();
                }
              
                return bytedata;  
              }
              
              void Send2_Acknowledge(bit ack) {
              
                SDA2=ack; 
                IIC2Delay();
                SCL2=1;
                IIC2Delay();
                SCL2=0; 
                IIC2Delay();
              }
              
              void IICWrite(BYTE device, BYTE address, BYTE count)
              {
                 //CheckIIC2Bus();
                 //if(error)
                 //{
                 //   IIC2_Stop();
                 //   return;
                 ///}
                 IIC2_Start();
                 error=IIC2_Data_In(device);
                 if(error)
                 {
                    IIC2_Stop();
                    return;
                 }
                 error=IIC2_Data_In(address);
                 if(error)
                 {
                    IIC2_Stop();
                    return;
                 }
                 while(count!=0)
                 {
                    error=IIC2_Data_In(*IICBufPtr);
                    if(error)   break;
                    count--;
                    IICBufPtr++;
                 }
                 IIC2_Stop();
              }
C51 COMPILER V7.07   IIC                                                                   12/01/2003 15:27:33 PAGE 4   

              
              void IICRead(BYTE device, BYTE address, BYTE count)
              {
                 //CheckIIC2Bus();
                 //if(error)
                 //{
                 //   IIC2_Stop();
                 //   return;
                 //}
                 IIC2_Start();
                 error=IIC2_Data_In(device);
                 if(error)
                 {
                    IIC2_Stop();
                    return;
                 }
                 error=IIC2_Data_In(address);
                 if(error)
                 {
                    IIC2_Stop();
                    return;
                 }
                 IIC2_Start();
                 error=IIC2_Data_In(device|1);
                 if(error)
                 {
                    IIC2_Stop();
                    return;
                 }
                 while(count!=0)
                 {
                    *IICBufPtr=IIC2_Data_Out();
                    if(count==1)  // last byte
                    {
                       Send2_Acknowledge(1);
                    }
                    else
                    {
                       Send2_Acknowledge(0);
                    }
                    count--;
                    IICBufPtr++;
                 }
                 IIC2_Stop();
              }
              
              //iic write function with two byte address
              void IIC_Write2(BYTE device, WORD address, BYTE count)
              {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -