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

📄 main.lst

📁 IO口模拟I2C 读写操作
💻 LST
字号:
C51 COMPILER V8.02   MAIN                                                                  09/24/2007 16:51:01 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "C8051F340.h"
   2          #include <intrins.h>
   3          #define SomeNop()    _nop_();_nop_();_nop_();_nop_();_nop_();
   4          sbit SCL=P0^1;
   5          sbit SDA=P0^0;
   6          sbit RST=P0^6;
   7          /////////////////////////////////////
   8          //  Generated Initialization File  //
   9          /////////////////////////////////////
  10          // Peripheral specific initialization functions,
  11          // Called from the Init_Device() function
  12          void PCA_Init()
  13          {
  14   1          PCA0MD    &= ~0x40;
  15   1          PCA0MD    = 0x00;    //禁止看门狗
  16   1      }
  17          
  18          void Port_IO_Init()
  19          {
  20   1          // P0.0  -  Skipped,     Open-Drain, Digital
  21   1          // P0.1  -  Skipped,     Open-Drain, Digital
  22   1          // P0.2  -  Unassigned,  Open-Drain, Digital
  23   1          // P0.3  -  Unassigned,  Open-Drain, Digital
  24   1          // P0.4  -  Unassigned,  Open-Drain, Digital
  25   1          // P0.5  -  Unassigned,  Open-Drain, Digital
  26   1          // P0.6  -  Unassigned,  Push-Pull,  Digital
  27   1          // P0.7  -  Unassigned,  Open-Drain, Digital
  28   1      
  29   1          // P1.0  -  Unassigned,  Open-Drain, Digital
  30   1          // P1.1  -  Unassigned,  Open-Drain, Digital
  31   1          // P1.2  -  Unassigned,  Open-Drain, Digital
  32   1          // P1.3  -  Unassigned,  Open-Drain, Digital
  33   1          // P1.4  -  Unassigned,  Open-Drain, Digital
  34   1          // P1.5  -  Unassigned,  Open-Drain, Digital
  35   1          // P1.6  -  Unassigned,  Open-Drain, Digital
  36   1          // P1.7  -  Unassigned,  Open-Drain, Digital
  37   1      
  38   1          // P2.0  -  Unassigned,  Open-Drain, Digital
  39   1          // P2.1  -  Unassigned,  Open-Drain, Digital
  40   1          // P2.2  -  Unassigned,  Open-Drain, Digital
  41   1          // P2.3  -  Unassigned,  Open-Drain, Digital
  42   1          // P2.4  -  Unassigned,  Open-Drain, Digital
  43   1          // P2.5  -  Unassigned,  Open-Drain, Digital
  44   1          // P2.6  -  Unassigned,  Open-Drain, Digital
  45   1          // P2.7  -  Unassigned,  Open-Drain, Digital
  46   1      
  47   1          // P3.0  -  Unassigned,  Open-Drain, Digital
  48   1          // P3.1  -  Unassigned,  Open-Drain, Digital
  49   1          // P3.2  -  Unassigned,  Open-Drain, Digital
  50   1          // P3.3  -  Unassigned,  Open-Drain, Digital
  51   1          // P3.4  -  Unassigned,  Open-Drain, Digital
  52   1          // P3.5  -  Unassigned,  Open-Drain, Digital
  53   1          // P3.6  -  Unassigned,  Open-Drain, Digital
  54   1          // P3.7  -  Unassigned,  Open-Drain, Digital
  55   1          P0MDOUT   = 0x40;   
C51 COMPILER V8.02   MAIN                                                                  09/24/2007 16:51:01 PAGE 2   

  56   1          P0SKIP    = 0x03;
  57   1          XBR1      = 0x40;
  58   1      }
  59          
  60          void Oscillator_Init()
  61          {
  62   1          OSCICN    = 0x83;    //系统时钟12MHz;
  63   1      }
  64          
  65          // Initialization function for device,
  66          // Call Init_Device() from your main program
  67          void Init_Device(void)
  68          {
  69   1          PCA_Init();
  70   1          Port_IO_Init();
  71   1          Oscillator_Init();
  72   1      }
  73          //----------------------------------------------------------------------------
  74          void Delay(unsigned int x)
  75          {
  76   1          unsigned int i, j;
  77   1          
  78   1          for (i=0; i<x; i++)
  79   1          {
  80   2              for (j=0; j<0xff; j++)
  81   2              {;}
  82   2          }
  83   1      }
  84          //----------------------------------------------------------------------------
  85          void Init_TTQH6(void)
  86          {
  87   1          RST=0;
  88   1              Delay(1);
  89   1              RST=1;
  90   1              Delay(20);
  91   1          
  92   1      }
  93          
  94          void I2C_Delay(void)
  95          {
  96   1              
  97   1      // SomeNop();
  98   1      _nop_();//_nop_();//_nop_();_nop_();// 1uS ,>0.6uS
  99   1      
 100   1      }
 101          
 102          //----------------------------------------------------------------------------
 103          /*
 104          **start
 105          **    ________      
 106          **SCL         \______
 107          **    ____         
 108          **SDA     \__________
 109          **
 110          */
 111          void I2C_Start(void)
 112          {
 113   1          SCL = 0;
 114   1          I2C_Delay();
 115   1          I2C_Delay();
 116   1          SDA = 1;
 117   1          I2C_Delay();
C51 COMPILER V8.02   MAIN                                                                  09/24/2007 16:51:01 PAGE 3   

 118   1          SCL = 1;
 119   1          I2C_Delay();
 120   1          SDA = 0;
 121   1          I2C_Delay();
 122   1          SCL = 0;
 123   1          I2C_Delay();  //jm add
 124   1      }
 125          //----------------------------------------------------------------------------
 126          /*
 127          **stop
 128          **          _______
 129          **SCL  ____/       -------
 130          **             ____
 131          **SDA  _______/    ----
 132          **
 133          */
 134          void I2C_Stop(void)
 135          {
 136   1          SCL = 0;
 137   1          I2C_Delay();
 138   1          SDA = 0;
 139   1          I2C_Delay();
 140   1          SCL = 1;
 141   1          I2C_Delay();
 142   1          while(SCL != 1) SCL = 1;
 143   1          SDA = 1;
 144   1          I2C_Delay();
 145   1      }
 146          //----------------------------------------------------------------------------
 147          void I2C_Write_Byte(unsigned char w_dat)
 148          {
 149   1          unsigned char i;
 150   1          
 151   1          for (i=0; i<8; i++)
 152   1          {
 153   2              SDA = (bit)(w_dat & 0x80);
 154   2              I2C_Delay();
 155   2              SCL = 1;
 156   2              w_dat <<= 1;
 157   2              I2C_Delay();
 158   2              SCL = 0;
 159   2              I2C_Delay();  //jm add
 160   2      
 161   2      
 162   2          }
 163   1          SDA = 1;       //释放SDA数据线      
 164   1          I2C_Delay();
 165   1      
 166   1      }
 167          //----------------------------------------------------------------------------
 168          unsigned char I2C_Read_Ack(void)
 169          {       
 170   1           SCL = 1;
 171   1         do
 172   1          {
 173   2               SDA = 1;
 174   2      
 175   2          }while (SDA != 0);
 176   1              
 177   1              
 178   1          SCL = 0;
 179   1          I2C_Delay(); //jm add
C51 COMPILER V8.02   MAIN                                                                  09/24/2007 16:51:01 PAGE 4   

 180   1          return(0);
 181   1      }
 182          //----------------------------------------------------------------------------
 183          unsigned char I2C_Read_Byte(void)
 184          {
 185   1          unsigned char i, r_dat;
 186   1          
 187   1          SDA = 1;
 188   1          SCL = 1;
 189   1          while(SCL != 1)
 190   1          {                             //释放
 191   2              SCL = 1;
 192   2          }
 193   1      
 194   1          for (i=0; i<8; i++)
 195   1          {
 196   2              SCL = 1;
 197   2              I2C_Delay();
 198   2              r_dat <<= 1;
 199   2              r_dat |= (char)SDA;
 200   2              SCL = 0;
 201   2              I2C_Delay();  //jm add
 202   2              I2C_Delay(); //jm add
 203   2          }
 204   1          SDA = 1;            //释放
 205   1          I2C_Delay();
 206   1          SCL = 1;
 207   1          I2C_Delay();
 208   1          SCL = 0;
 209   1          return(r_dat);
 210   1      }
 211          //----------------------------------------------------------------------------
 212          //---------------------------------------------------------------------------
 213          
 214          unsigned char Read_TTQH6(unsigned char device_ID,unsigned char register_address)
 215          {
 216   1          unsigned char dat;
 217   1          
 218   1        //  I2C_Stop();       //jm delete
 219   1          I2C_Start();
 220   1          I2C_Write_Byte(device_ID);             // 器件写地址
 221   1          I2C_Read_Ack();
 222   1          I2C_Write_Byte(register_address); // 寄存器地址
 223   1          I2C_Read_Ack();     
 224   1                                               
 225   1          I2C_Stop();                               //
 226   1          I2C_Start();                                //
 227   1      
 228   1          I2C_Write_Byte(device_ID+1);             //器件读地址
 229   1          I2C_Read_Ack();
 230   1          dat = I2C_Read_Byte();
 231   1          //I2C_Write_Ack();                //数据已从TTQH6中读出不用再理会回传应答
 232   1          I2C_Stop();
 233   1      
 234   1          return(dat);
 235   1      }
 236          //----------------------------------------------------------------------------
 237          void Write_TTQH6(unsigned char device_ID,unsigned char register_address,unsigned char value)
 238          {
 239   1         
 240   1         // I2C_Stop();        //jm delete
 241   1          I2C_Start();
C51 COMPILER V8.02   MAIN                                                                  09/24/2007 16:51:01 PAGE 5   

 242   1          I2C_Write_Byte(device_ID);              // 器件写地址
 243   1          I2C_Read_Ack();
 244   1          I2C_Write_Byte(register_address);  // 寄存器地址
 245   1          I2C_Read_Ack();
 246   1          I2C_Write_Byte(value);             // 写数据
 247   1          I2C_Read_Ack();
 248   1          I2C_Stop();
 249   1              SomeNop(); 
 250   1              SomeNop(); 
 251   1              SomeNop();
 252   1              SomeNop();                                                                                      
 253   1               
 254   1      }
 255          //------------------------------------------------------------------------
 256           void main(void)
 257          {
 258   1      unsigned char Rdata1,Rdata2;
 259   1              Init_Device();                                             
 260   1              Init_TTQH6();                                                                                   
 261   1      
 262   1      
 263   1      // Write_TTQH6(0xC4,0x00,0x10);
 264   1      //while(1)
 265   1      //{
 266   1      
 267   1        Rdata1=Read_TTQH6(0xC4,0x00);
 268   1      
 269   1      //}
 270   1      
 271   1      // Rdata2=Read_TTQH6(0xC4,0x00);
 272   1      // while(1);
 273   1      
 274   1      
 275   1      }
*** WARNING C280 IN LINE 258 OF MAIN.C: 'Rdata2': unreferenced local variable


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


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

⌨️ 快捷键说明

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