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

📄 test014.lst

📁 51单片机全套学习资料 提供电路原理图 各种C语言实验程序 包括LED流水灯,数码管显示,中断,定时器,串口通信,DS18B20温度显示,液晶1602,12864显示,看门狗,按键检测,音乐播放等程序
💻 LST
字号:
C51 COMPILER V7.50   TEST014                                                               12/27/2006 19:56:54 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TEST014
OBJECT MODULE PLACED IN test014.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE test014.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************************************
   2          * 文 件 名:test014.c
   3          * 功    能:AT24C02读写实验。
   4          * 硬件条件:1.CPU型号:AT89S52
   5          *           2.晶振:12.0000MHz
   6          *           3.用跳线帽短接SCL__P3.6
   7          *           4.用跳线帽短接SDA__P3.7
   8          *           5.用跳线帽短接BEEP__P1.3
   9          * 作    者:POWER
  10          * 日    期:2006年12月12号
  11          * 斯凯科技主页:www.armsky.net
  12          * 斯凯科技论坛:www.armsky.net/bbs
  13          *********************************************************************************************/
  14          #include "reg52.h"                               // 包含头文件    
  15          
  16          /* 与编译器无关的数据类型定义 */
  17          /********************************************************************************************/
  18          typedef unsigned char      uint8;                // 无符号8位整型变量
  19          typedef signed   char      int8;                 // 有符号8位整型变量
  20          typedef unsigned short     uint16;               // 无符号16位整型变量
  21          typedef signed   short     int16;                // 有符号16位整型变量
  22          typedef unsigned int       uint32;               // 无符号32位整型变量
  23          typedef signed   int       int32;                // 有符号32位整型变量
  24          typedef float              fp32;                 // 单精度浮点数(32位长度)
  25          typedef double             fp64;                 // 双精度浮点数(64位长度)
  26          /********************************************************************************************/
  27          
  28          sbit P1_3 = P1 ^ 3;                              // 定义位变量                              
  29          
  30          #define BEEP_ON()        (P1_3=0)                // 定义"BEEP_ON()"为P1.3输出低电平,控制蜂鸣器蜂鸣
  31          #define BEEP_OFF()       (P1_3=1)                // 定义"BEEP_OFF()"为P1.3输出高电平,控制蜂鸣器不蜂鸣
  32          
  33          
  34          /* 定义器件在I2C总线中的地址 */
  35          #define AT24C02_WriteDeviceAddress 0xa0
  36          #define AT24C02_ReadDeviceAddress  0xa1
  37          
  38          /* 定义位变量 */
  39          sbit SCL=P3^6;                                   // I2C总线的时钟信号
  40          sbit SDA=P3^7;                                   // I2C总线的数据信号
  41          
  42          #define TRUE        1
  43          #define FALSE       0
  44          
  45          #define I2C_DelayTime 60                         // 不要小于50,否则可能造成时序混乱
  46          
  47          /********************************************************************************************
  48          * 函数名称:Delay()
  49          * 功    能:软件延时
  50          * 入口参数:count    延时参数,值越大,延时越长
  51          * 出口参数:无
  52          *********************************************************************************************/
  53          void Delay(uint16 count)
  54          {
  55   1        uint8 i;                
C51 COMPILER V7.50   TEST014                                                               12/27/2006 19:56:54 PAGE 2   

  56   1      
  57   1        while(--count != 0)        
  58   1                {
  59   2                  for(i = 0; i < 125; i++);                // ";" 表示空语句,CPU空转。
  60   2                }                                                      // i 从0加到125,在12M晶体下CPU大概耗时1毫秒
  61   1      }
  62          
  63          /********************************************************************************************
  64          * 函数名称:I2C_Delay()
  65          * 功    能:I2C总线软件延时
  66          * 入口参数:count    延时参数,值越大,延时越长
  67          * 出口参数:无
  68          *********************************************************************************************/
  69          void I2C_Delay(uint16 count)
  70          {
  71   1        while(count!=0) count--;
  72   1      }
  73          
  74          /********************************************************************************************
  75          * 函数名称:I2C_Start()
  76          * 功    能:启动I2C总线
  77          * 入口参数:无
  78          * 出口参数:无
  79          *********************************************************************************************/
  80          void I2C_Start(void)
  81          {
  82   1        SDA=1; 
  83   1        SCL=1; 
  84   1        I2C_Delay(I2C_DelayTime);
  85   1        SDA=0; 
  86   1        I2C_Delay(I2C_DelayTime);
  87   1        SCL=0;
  88   1        I2C_Delay(I2C_DelayTime);
  89   1      }
  90          
  91          /********************************************************************************************
  92          * 函数名称:I2C_Stop()
  93          * 功    能:终止I2C总线
  94          * 入口参数:无
  95          * 出口参数:无
  96          *********************************************************************************************/
  97          void I2C_Stop(void)
  98          {
  99   1        SDA=0;
 100   1        SCL=1;
 101   1        I2C_Delay(I2C_DelayTime);
 102   1        SDA=1;
 103   1        I2C_Delay(I2C_DelayTime);
 104   1        SCL=0;
 105   1        I2C_Delay(I2C_DelayTime);
 106   1      }
 107          
 108          /********************************************************************************************
 109          * 函数名称:I2C_Send_Bit_0()
 110          * 功    能:发送比特0
 111          * 入口参数:无
 112          * 出口参数:无
 113          *********************************************************************************************/
 114          void I2C_Send_Bit_0(void)
 115          {
 116   1        SDA=0;
 117   1        SCL=1;
C51 COMPILER V7.50   TEST014                                                               12/27/2006 19:56:54 PAGE 3   

 118   1        I2C_Delay(I2C_DelayTime);
 119   1        SCL=0;
 120   1        I2C_Delay(I2C_DelayTime);
 121   1      }
 122          
 123          /********************************************************************************************
 124          * 函数名称:I2C_Send_Bit_1()
 125          * 功    能:发送比特1
 126          * 入口参数:无
 127          * 出口参数:无
 128          *********************************************************************************************/
 129          void I2C_Send_Bit_1(void)
 130          {
 131   1        SDA=1;
 132   1        SCL=1;
 133   1        I2C_Delay(I2C_DelayTime);
 134   1        SCL=0;
 135   1        I2C_Delay(I2C_DelayTime);
 136   1      }
 137          
 138          /********************************************************************************************
 139          * 函数名称:I2C_Check_Ack()
 140          * 功    能:发送完一个字节后检验设备的应答信号
 141          * 入口参数:无
 142          * 出口参数:返回值为True,成功
 143          *           返回值为False,失败
 144          *********************************************************************************************/
 145          bit I2C_Check_Ack(void)
 146          {
 147   1        SDA=1;
 148   1        SCL=1;
 149   1        I2C_Delay(I2C_DelayTime/2);
 150   1        F0=SDA;
 151   1        I2C_Delay(I2C_DelayTime/2);
 152   1        SCL=0;
 153   1        I2C_Delay(I2C_DelayTime);
 154   1        if(F0==1)     return FALSE;
 155   1        
 156   1        return TRUE;
 157   1      }
 158          
 159          /********************************************************************************************
 160          * 函数名称:I2C_Write8Bit()
 161          * 功    能:向I2C总线写入8bit数据
 162          * 入口参数:I2C_data     将要写入I2C总线的8bit数据 
 163          * 出口参数:无
 164          *********************************************************************************************/
 165          void I2C_Write8Bit(uint8 I2C_data)reentrant
 166          {
 167   1        uint8 i;
 168   1        
 169   1        for(i=0;i<8;i++)
 170   1          {
 171   2                if((I2C_data<<i)&0x80)
 172   2              I2C_Send_Bit_1();
 173   2            else
 174   2              I2C_Send_Bit_0();
 175   2          }
 176   1      }
 177          
 178          /********************************************************************************************
 179          * 函数名称:I2C_Read8Bit()
C51 COMPILER V7.50   TEST014                                                               12/27/2006 19:56:54 PAGE 4   

 180          * 功    能:从I2C总线接收8bit数据
 181          * 入口参数:无
 182          * 出口参数:返回值为从I2C总线上接收到的8bit数据
 183          *********************************************************************************************/
 184          uint8 I2C_Read8Bit(void)reentrant
 185          {
 186   1        uint8 I2C_data=0,i;
 187   1        
 188   1        for(i=0;i<8;i++)
 189   1          {
 190   2                SDA=1;    
 191   2            SCL=1;    
 192   2            I2C_Delay(10);
 193   2            F0=SDA;
 194   2            I2C_Delay(10);
 195   2            SCL=0;
 196   2            if(F0==1)
 197   2             {
 198   3               I2C_data=I2C_data<<1;
 199   3               I2C_data=I2C_data|0x01;
 200   3             }
 201   2            else
 202   2              I2C_data=I2C_data<<1;
 203   2          }
 204   1          return I2C_data;
 205   1      }
 206          
 207          /********************************************************************************************
 208          * 函数名称:AT24C02_Write1Byte()
 209          * 功    能:向AT24C02指定地址上写入1字节数据
 210          * 入口参数:AT24C02_Address   AT24C02内的地址
 211          *           AT24C02_1Byte     将要写入AT24C02的1字节数据
 212          * 出口参数:无
 213          *********************************************************************************************/
 214          void AT24C02_Write1Byte(uint8 AT24C02_Address,uint8 AT24C02_1Byte)
 215          {
 216   1        bit AckTemp=1;
 217   1        
 218   1        I2C_Start();
 219   1        I2C_Write8Bit(AT24C02_WriteDeviceAddress);
 220   1        AckTemp=I2C_Check_Ack();
 221   1        I2C_Write8Bit(AT24C02_Address);                   
 222   1        AckTemp=I2C_Check_Ack();
 223   1        I2C_Write8Bit(AT24C02_1Byte);                 
 224   1        AckTemp=I2C_Check_Ack();
 225   1        I2C_Stop();
 226   1      }
 227          
 228          /********************************************************************************************
 229          * 函数名称:AT24C02_Read1Byte()
 230          * 功    能:从AT24C02指定地址上读出1字节数据
 231          * 入口参数:AT24C02_Address   AT24C02内的地址
 232          * 出口参数:从AT24C02指定地址上读出的1字节数据
 233          *********************************************************************************************/
 234          uint8 AT24C02_Read1Byte(uint8 AT24C02_Address)
 235          {    
 236   1        bit AckTemp=1;
 237   1        uint8 AT24C02_1Byte;
 238   1      
 239   1        I2C_Start();
 240   1        I2C_Write8Bit(AT24C02_WriteDeviceAddress);
 241   1        AckTemp=I2C_Check_Ack();
C51 COMPILER V7.50   TEST014                                                               12/27/2006 19:56:54 PAGE 5   

 242   1        I2C_Write8Bit(AT24C02_Address);
 243   1        AckTemp=I2C_Check_Ack();
 244   1        I2C_Start();
 245   1        I2C_Write8Bit(AT24C02_ReadDeviceAddress);
 246   1        AckTemp=I2C_Check_Ack();
 247   1        AT24C02_1Byte=I2C_Read8Bit();
 248   1        AckTemp=I2C_Check_Ack();
 249   1        I2C_Stop();
 250   1      
 251   1        return AT24C02_1Byte;
 252   1      }
 253          
 254          /********************************************************************************************
 255          * 函数名称:main()
 256          * 功    能:写一字节数据0xaa到AT24C02的地址0x02并读回校验,若校验通过,则蜂鸣器响一声;否则,
 257          *           蜂鸣器连续报警。
 258          *********************************************************************************************/          
 259          void main (void)                
 260          {
 261   1        BEEP_OFF();                                    // 蜂鸣器不蜂鸣
 262   1      
 263   1        AT24C02_Write1Byte(0x02,0xaa);                 // 向AT24C02的地址0x02写入0xaa
 264   1      
 265   1        if(AT24C02_Read1Byte(0x02)==0xaa)              // 从AT24C02的地址0x02读出数据,判断是否等于0xaa
 266   1          {                                            // 若相等,则蜂鸣器响一声  
 267   2                BEEP_ON();                                 
 268   2                Delay(300);
 269   2                BEEP_OFF();
 270   2              }
 271   1        else                                           // 若不相等,则蜂鸣器连续报警
 272   1          {
 273   2                while(1)
 274   2                    {
 275   3                          BEEP_ON();
 276   3                      Delay(100);
 277   3                      BEEP_OFF();
 278   3                              Delay(100);
 279   3                        }
 280   2              }
 281   1        
 282   1        while(1);
 283   1      }


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


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

⌨️ 快捷键说明

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