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

📄 hali2c.lst

📁 威望公司MP3 + USB MCU 的参考软件
💻 LST
字号:
C51 COMPILER V8.01   HALI2C                                                                04/17/2008 09:54:34 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE HALI2C
OBJECT MODULE PLACED IN .\Debug\hali2c.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE e2prom\hali2c.c LARGE OPTIMIZE(9,SIZE) REGFILE(.\Debug\VA4010_SDK_V2.ORC) B
                    -ROWSE NOINTPROMOTE INCDIR(.\common;.\e2prom;.\file;.\fmtx;.\ir;.\keyboard;.\lcm;.\led;.\main;.\matrixkey;.\mp3ctrl;.\sd;
                    -.\usbhost;.\include;.\lib) DEBUG OBJECTEXTEND PRINT(.\Debug\hali2c.lst) OBJECT(.\Debug\hali2c.obj)

line level    source

   1          /****************************************************************
   2          *                      Viaon Technology (Suzhou) Co.,Ltd
   3          *
   4          *    Copyright 2007, Viaon Technology (Suzhou) Co.,Ltd,Suzhou,China
   5          *                    All rights reserved.
   6          *
   7          *
   8          * Filename:             hali2c.c
   9          *
  10          * Programmer:           Greg 
  11          *
  12          * Created:              1/2/2008
  13          *
  14          * Description:          public functions 
  15          *              
  16          *        
  17          * Change History (most recent first):   2008.1.2
  18          ****************************************************************/
  19          
  20          /*     51系列单片机在使用时,有时需要模拟I2C总线,                      */
  21          /*   这里举出一个实例(读写串行EEPROM芯片at2402)                       */
  22          /************************************************************************/
  23          /* Name:AT24C02存储器的读写程序,用到I2C总线,含相对独立的I2C总线读写函数 */
  24          /* Language: C51单片机编程语言                                          */
  25          /* Platform: Win98,Intel Celeron 433 Processor,伟福仿真器,仿真8751     */
  26          /* Author:  StephenZhu    javasdk@163.com                               */
  27          /* Date: 2003年5月21日,5月22日,5月29日                                  */
  28          /* Version: 1.1.1                            */
  29          /* Others: None                                                         */
  30          /************************************************************************/
  31          
  32          //#include<string.h>
  33          //#include<reg52.h>
  34          //#include<intrins.h>
  35          
  36          #include "utiltypedef.h"
  37          #include "va4010reg.h"
  38          #include "common.h"
  39          
  40          #include "hali2c.h"
  41          
  42          
  43          //bit F0;
  44          
  45          /********** Function Definition 函数定义 ************/
  46          #define DELAY(x)    DelayUs(x)
  47          #if (E2PROM_TYPE        != E2PROM_NONE)
  48          
  49          //Chose two gpio pin as SCL, SDA according PCB connection
  50          //From master's point of view
  51          //SCL: Output, SDA: Bidirection, Master should give up SDA when not use.
  52          #if (BOARD_ID == EVB_V1)
              sbit SCL=P1^7;/*假设由P1.7和P1.6控制*/
C51 COMPILER V8.01   HALI2C                                                                04/17/2008 09:54:34 PAGE 2   

              sbit SDA=P1^6;
              
              #define SCL_OUTPUT()                    (P1_DDR|=0X80)
              #define SDA_OUTPUT()                 (P1_DDR|=0x40)
              #define SDA_INPUT()                    (P1_DDR&=0xbf)
              #elif(BOARD_ID == HZ_111)
              sbit SCL=P2^6;
              sbit SDA=P2^7;
              
              #define SCL_OUTPUT()                    (P2_DDR|=0x40)
              #define SDA_OUTPUT()                 (P2_DDR|=0X80)
              #define SDA_INPUT()                    (P2_DDR&=0x7f)
              #elif(BOARD_ID == HX_001)
  67          sbit SCL=P2^6;
  68          sbit SDA=P2^7;
  69          
  70          #define SCL_OUTPUT()                    (P2_DDR|=0x40)
  71          #define SDA_OUTPUT()                 (P2_DDR|=0X80)
  72          #define SDA_INPUT()                    (P2_DDR&=0x7f)
  73          
  74          #endif
  75          
  76          void I2C_Start(void)
  77          {
  78   1          /*启动I2C总线的函数,当SCL为高电平时使SDA产生一个负跳变*/
  79   1          //Set SDA Direction 
  80   1          SCL_OUTPUT();
  81   1          SDA_OUTPUT();         
  82   1          SDA=1;
  83   1          SCL=1;
  84   1          DELAY(DELAY_TIME);
  85   1          SDA=0;
  86   1          DELAY(DELAY_TIME);
  87   1          SCL=0;
  88   1          DELAY(DELAY_TIME);
  89   1      }
  90          
  91          void I2C_Stop(void)
  92          {
  93   1          /*终止I2C总线,当SCL为高电平时使SDA产生一个正跳变*/
  94   1          SDA_OUTPUT();
  95   1          SCL_OUTPUT();       
  96   1      
  97   1          SDA=0;
  98   1          SCL=1;
  99   1          DELAY(DELAY_TIME);
 100   1          SDA=1;
 101   1          DELAY(DELAY_TIME);
 102   1          SCL=0;
 103   1          DELAY(DELAY_TIME);
 104   1      }
 105          
 106          void SEND_0(void)   /* SEND ACK */
 107          {
 108   1          /*发送0,在SCL为高电平时使SDA信号为低*/
 109   1          SDA_OUTPUT();       
 110   1          SCL_OUTPUT();
 111   1              
 112   1          SDA=0;
 113   1          //DELAY(DELAY_TIME);        
 114   1          SCL=1;
 115   1          DELAY(DELAY_TIME);
C51 COMPILER V8.01   HALI2C                                                                04/17/2008 09:54:34 PAGE 3   

 116   1          SCL=0;
 117   1          DELAY(DELAY_TIME);
 118   1      }
 119          
 120          void SEND_1(void)
 121          {
 122   1          /*发送1,在SCL为高电平时使SDA信号为高*/
 123   1          SDA_OUTPUT();       
 124   1          SCL_OUTPUT()        ;
 125   1              
 126   1          SDA=1;
 127   1          //DELAY(DELAY_TIME);                
 128   1          SCL=1;
 129   1          DELAY(DELAY_TIME);
 130   1          SCL=0;
 131   1          DELAY(DELAY_TIME);
 132   1      }
 133          
 134          #if 0
              BYTE Check_Acknowledge(void)
              {
                      bit tmp;        
              
                      SDA_INPUT();
                      SCL_OUTPUT();
                      
                      /*发送完一个字节后检验设备的应答信号*/
                      SCL=1; // the ninth cycle, check SDA
                      DELAY(DELAY_TIME/2);
                      tmp = SDA; //get response from slave device
                      DELAY(DELAY_TIME/2);
                      SCL=0;
                      DELAY(DELAY_TIME);
              
                      //if(tmp==1)
                      //        return FALSE;
                      //return TRUE;
                      return (tmp==1)?I2C_NAK:I2C_ACK;
              }
              #else
 156          void Check_Acknowledge(void)
 157          {
 158   1              //bit tmp;      
 159   1              
 160   1              SDA_INPUT();
 161   1              SCL_OUTPUT();
 162   1              
 163   1              /*发送完一个字节后检验设备的应答信号*/
 164   1              SCL=1; // the ninth cycle, check SDA
 165   1              DELAY(DELAY_TIME/2);
 166   1              //tmp = SDA; //get response from slave device
 167   1              DELAY(DELAY_TIME/2);
 168   1              SCL=0;
 169   1              DELAY(DELAY_TIME);
 170   1      
 171   1              //return (tmp==1)?I2C_NAK:I2C_ACK;
 172   1              return;
 173   1      }
 174          
 175          #endif
 176          
 177          //why reentrant
C51 COMPILER V8.01   HALI2C                                                                04/17/2008 09:54:34 PAGE 4   

 178          void WriteI2CByte(BYTE b)//reentrant
 179          {
 180   1          /*向I2C总线写一个字节*/
 181   1          BYTE i;
 182   1          //SDA_OUTPUT();             
 183   1          for(i=0;i<8;i++)
 184   1              if((b<<i)&0x80)
 185   1                  SEND_1();
 186   1              else
 187   1                  SEND_0();
 188   1      }
 189          
 190          
 191          
 192          BYTE ReadI2CByte(void)//reentrant
 193          {
 194   1          /*从I2C总线读一个字节*/
 195   1          BYTE b=0;
 196   1          BYTE i;
 197   1      
 198   1          SDA_INPUT();        
 199   1          SCL_OUTPUT();       
 200   1          //Here master should generate 8 cycle on SCL        
 201   1          for(i=0;i<8;i++)
 202   1          {
 203   2              SCL=1;    /*接受数据*/
 204   2              DELAY(DELAY_TIME/2);
 205   2              //F0=SDA;  //Receive data from device
 206   2              if(SDA==1){
 207   3                  b=b<<1;
 208   3                  b=b|0x01;
 209   3              }else
 210   2                  b=b<<1;
 211   2              DELAY(DELAY_TIME/2);
 212   2              SCL=0;
 213   2               DELAY(DELAY_TIME);     
 214   2          }
 215   1          return b;
 216   1      }
 217          
 218          #endif
 219          
 220          


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


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

⌨️ 快捷键说明

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