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

📄 i2c_c51.lst

📁 这是USBD12芯片与PC机通讯的单片机固件程序
💻 LST
字号:
C51 COMPILER V7.20   I2C_C51                                                               11/16/2007 15:11:15 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE I2C_C51
OBJECT MODULE PLACED IN I2c_C51.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2c_C51.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          
   3          /*********************************************************************************
   4                                I2c_C51.c 
   5          **********************************************************************************/
   6          
   7          #include < reg922.h >  
   8          #include < intrins.h>
   9          #include "I2c_C51.h"
  10          #define uchar unsigned char
  11          #define uint unsigned int
  12          #define _Nop()  _nop_(); _nop_(); _nop_()
  13          bit   ack ;
  14          
  15            void Start_I2c(void);
  16            void Stop_I2c(void);
  17            void SendByte(uchar c);
  18            uchar RcvByte(void);
  19            void Ack_I2c(bit a);
  20            bit ISendByte(uchar sla,uchar c);
  21            bit IRcvByte(uchar sla, uchar *c);
  22          
  23          bit I2c_bit(bit SetBit,unsigned char BitNum,unsigned char Addr)
  24          {   
  25   1              unsigned char C_set=1;
  26   1              unsigned char BitSta;
  27   1              unsigned char KK=C_set<<BitNum;//=2的BitNum次方
  28   1              
  29   1              if(IRcvByte(Addr,&C_set) == 0)
  30   1                      return (0);
  31   1              
  32   1              BitSta=C_set&KK;
  33   1              
  34   1              if(SetBit==BitSta)
  35   1                      return(1);               //!RETURN !If current status equal to status want to be set then return
  36   1              
  37   1              if(SetBit==1)
  38   1                      C_set=(C_set | KK);
  39   1              else
  40   1                      C_set=(C_set&(255-KK));//!ZJ
  41   1              
  42   1              return ( ISendByte(Addr,C_set) );
  43   1      }
  44          unsigned char Read_port_bit(unsigned char Addr,unsigned char BitNum)
  45          {
  46   1              unsigned char C_set=1;
  47   1              unsigned char KK=C_set<<BitNum;//=2的BitNum次方
  48   1              
  49   1              if(IRcvByte(Addr,&C_set) == 0)
  50   1                      return (0xaa);//无ACK返回错误码0xaa
  51   1              if( (C_set&KK) != 0 )
  52   1              return (1);
  53   1          else
  54   1                      return (0);//返回实际的位状态
  55   1      }
C51 COMPILER V7.20   I2C_C51                                                               11/16/2007 15:11:15 PAGE 2   

  56          bit ISendByte(uchar sla,uchar c)
  57          {
  58   1              Start_I2c();
  59   1              SendByte(sla);
  60   1              if(ack==0)  return (0);
  61   1              SendByte(c);
  62   1              if (ack==0)  return (0);
  63   1              Stop_I2c();
  64   1              return(1);
  65   1      }
  66          bit IRcvByte(uchar sla, uchar *c)
  67          {
  68   1              Start_I2c();
  69   1              SendByte(sla+1);
  70   1          if(ack==0)return(0);
  71   1              *c=RcvByte();
  72   1              Ack_I2c(1);
  73   1              Stop_I2c();
  74   1              return(1);
  75   1      }
  76          void SendByte(uchar c)
  77          {  
  78   1              uchar  BitCnt ;
  79   1              for(BitCnt=0;BitCnt<8;BitCnt++)
  80   1              { 
  81   2                      if((c<<BitCnt)&0x80)  
  82   2                              SDA=1;
  83   2                      else  
  84   2                              SDA=0;
  85   2                      _Nop();
  86   2                      SCL=1;
  87   2                      _Nop();
  88   2                      _Nop();
  89   2                      _Nop();
  90   2                      _Nop();
  91   2                      _Nop();
  92   2                      SCL=0;
  93   2              }
  94   1              _Nop();
  95   1              _Nop();
  96   1              SDA=1;
  97   1              _Nop();
  98   1              _Nop();
  99   1              SCL=1;
 100   1              _Nop();
 101   1              _Nop();
 102   1              _Nop();
 103   1              if(SDA==1) 
 104   1                      ack=0;
 105   1              else 
 106   1                      ack=1;
 107   1              SCL=0;
 108   1              _Nop();
 109   1              _Nop();
 110   1      }
 111          
 112          uchar  RcvByte()
 113          {
 114   1              uchar  retc;
 115   1              uchar  BitCnt;
 116   1              retc = 0;
 117   1              SDA=1;
C51 COMPILER V7.20   I2C_C51                                                               11/16/2007 15:11:15 PAGE 3   

 118   1              for(BitCnt=0;BitCnt<8;BitCnt++)
 119   1              {
 120   2                      _Nop();
 121   2                      SCL=0;
 122   2                      _Nop();
 123   2                      _Nop();
 124   2                      _Nop();
 125   2                      _Nop();
 126   2                      _Nop();
 127   2                      SCL=1;
 128   2                      _Nop();
 129   2                      _Nop();
 130   2                      retc=retc<<1;
 131   2                      if(SDA==1) retc=retc+1;
 132   2                      _Nop();
 133   2                      _Nop();
 134   2              }
 135   1              SCL=0;
 136   1              _Nop();
 137   1              _Nop();
 138   1              return(retc);
 139   1      }
 140          void  Ack_I2c(bit a )
 141          {
 142   1              if(a==0) 
 143   1                      SDA =0;
 144   1          else 
 145   1                      SDA =1;
 146   1              _Nop();
 147   1              _Nop();
 148   1              _Nop();
 149   1              SCL=1;
 150   1              _Nop();
 151   1              _Nop();
 152   1              _Nop();
 153   1              _Nop();
 154   1              _Nop();
 155   1              SCL=0;
 156   1              _Nop();
 157   1              _Nop();
 158   1      }
 159          void  Start_I2c()
 160          {
 161   1              SDA=1 ;
 162   1              _Nop();
 163   1              SCL=1;
 164   1              _Nop();
 165   1              _Nop();
 166   1              _Nop();
 167   1              _Nop();
 168   1              _Nop();
 169   1              SDA=0 ;
 170   1              _Nop();
 171   1              _Nop();
 172   1              _Nop();
 173   1              _Nop();
 174   1              _Nop();
 175   1              SCL=0;
 176   1              _Nop();
 177   1              _Nop();
 178   1      }
 179          void Stop_I2c()
C51 COMPILER V7.20   I2C_C51                                                               11/16/2007 15:11:15 PAGE 4   

 180          {  
 181   1              SDA=0;
 182   1              _Nop();
 183   1              SCL=1;
 184   1              _Nop();
 185   1              _Nop();
 186   1              _Nop();
 187   1              _Nop();
 188   1              _Nop();
 189   1              SDA=1;
 190   1              _Nop();
 191   1              _Nop();
 192   1              _Nop();
 193   1              _Nop();
 194   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    471    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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