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

📄 www.ourhc.cn.lst

📁 STC12C5A60S2精简开发板使用手机及其经典例程
💻 LST
字号:
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/03/2012 18:38:46 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE WWW_OURHC_CN
OBJECT MODULE PLACED IN www.ourhc.cn.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE www.ourhc.cn.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2                                      汇诚科技
   3          
   4          实现功能:STC12C5A60S2单片机之AT24C04测试程序12T
   5          使用芯片:STC12C5A60S2
   6          晶振:11.0592MHZ
   7          波特率:115200
   8          编译环境:Keil
   9          作者:zhangxinchun
  10          网站:www.ourhc.cn
  11          淘宝店:
  12          汇诚科技 http://ourhc.taobao.com
  13          郑兴电子直销部 http://shop68451856.taobao.com
  14          【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!  
  15            
  16          
  17          *********************************************************************/
  18          #include "REG52.H"
  19          #include "INTRINS.H"
  20          
  21          typedef unsigned char BYTE;
  22          typedef unsigned short WORD;
  23          
  24          sbit SCL = P3^4;                //AT24C04的时钟
  25          sbit SDA = P3^5;                //AT24C04的数据
  26          
  27          BYTE BUF[16];                   //数据缓存区
  28          
  29          BYTE code res[6] _at_ 0x23;
  30          
  31          BYTE code TESTDATA[] =
  32          {
  33              0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,
  34              0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF
  35          };
  36          
  37          void Delay5us();
  38          void Delay5ms();
  39          void AT24C04_Start();
  40          void AT24C04_Stop();
  41          void AT24C04_SendACK(bit ack);
  42          bit AT24C04_RecvACK();
  43          void AT24C04_SendByte(BYTE dat);
  44          BYTE AT24C04_RecvByte();
  45          void AT24C04_ReadPage();
  46          void AT24C04_WritePage();
  47          
  48          void main()
  49          {
  50   1          AT24C04_WritePage();
  51   1          Delay5ms();
  52   1          AT24C04_ReadPage();
  53   1      
  54   1          while (1);
  55   1      
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/03/2012 18:38:46 PAGE 2   

  56   1      }
  57          
  58          /**************************************
  59          向AT24C04写1页(16字节)数据
  60          将TESTDATA开始的16个测试数据写如设备的00~0F地址中
  61          **************************************/
  62          void AT24C04_WritePage()
  63          {
  64   1          BYTE i;
  65   1      
  66   1          AT24C04_Start();            //起始信号
  67   1          AT24C04_SendByte(0xa0);     //发送设备地址+写信号
  68   1          AT24C04_SendByte(0x00);     //发送存储单元地址
  69   1          for (i=0; i<16; i++)
  70   1          {
  71   2              AT24C04_SendByte(TESTDATA[i]);
  72   2          }
  73   1          AT24C04_Stop();             //停止信号
  74   1      }
  75          
  76          /**************************************
  77          从AT24C04读取1页(16字节)数据
  78          将设备的00~0F地址中的数据读出存放在DATA区的BUF中
  79          **************************************/
  80          void AT24C04_ReadPage()
  81          {
  82   1          BYTE i;
  83   1      
  84   1          AT24C04_Start();            //起始信号
  85   1          AT24C04_SendByte(0xa0);     //发送设备地址+写信号
  86   1          AT24C04_SendByte(0x00);     //发送存储单元地址
  87   1          AT24C04_Start();            //起始信号
  88   1          AT24C04_SendByte(0xa1);     //发送设备地址+读信号
  89   1          for (i=0; i<16; i++)
  90   1          {
  91   2              BUF[i] = AT24C04_RecvByte();
  92   2              if (i == 15)
  93   2              {
  94   3                  AT24C04_SendACK(1); //最后一个数据需要会NAK
  95   3              }
  96   2              else
  97   2              {
  98   3                  AT24C04_SendACK(0); //回应ACK
  99   3              }
 100   2          }
 101   1          AT24C04_Stop();             //停止信号
 102   1      }
 103          
 104          /**************************************
 105          延时5微秒(STC90C52RC@12M)
 106          不同的工作环境,需要调整此函数
 107          当改用1T的MCU时,请调整此延时函数
 108          **************************************/
 109          void Delay5us()
 110          {
 111   1          _nop_();
 112   1          _nop_();
 113   1      }
 114          
 115          /**************************************
 116          延时5毫秒(STC90C52RC@12M)
 117          不同的工作环境,需要调整此函数
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/03/2012 18:38:46 PAGE 3   

 118          当改用1T的MCU时,请调整此延时函数
 119          **************************************/
 120          void Delay5ms()
 121          {
 122   1          WORD n = 560;
 123   1      
 124   1          while (n--);
 125   1      }
 126          
 127          /**************************************
 128          起始信号
 129          **************************************/
 130          void AT24C04_Start()
 131          {
 132   1          SDA = 1;                    //拉高数据线
 133   1          SCL = 1;                    //拉高时钟线
 134   1          Delay5us();                 //延时
 135   1          SDA = 0;                    //产生下降沿
 136   1          Delay5us();                 //延时
 137   1          SCL = 0;                    //拉低时钟线
 138   1      }
 139          
 140          /**************************************
 141          停止信号
 142          **************************************/
 143          void AT24C04_Stop()
 144          {
 145   1          SDA = 0;                    //拉低数据线
 146   1          SCL = 1;                    //拉高时钟线
 147   1          Delay5us();                 //延时
 148   1          SDA = 1;                    //产生上升沿
 149   1          Delay5us();                 //延时
 150   1      }
 151          
 152          /**************************************
 153          发送应答信号
 154          入口参数:ack (0:ACK 1:NAK)
 155          **************************************/
 156          void AT24C04_SendACK(bit ack)
 157          {
 158   1          SDA = ack;                  //写应答信号
 159   1          SCL = 1;                    //拉高时钟线
 160   1          Delay5us();                 //延时
 161   1          SCL = 0;                    //拉低时钟线
 162   1          Delay5us();                 //延时
 163   1      }
 164          
 165          /**************************************
 166          接收应答信号
 167          **************************************/
 168          bit AT24C04_RecvACK()
 169          {
 170   1          SCL = 1;                    //拉高时钟线
 171   1          Delay5us();                 //延时
 172   1          CY = SDA;                   //读应答信号
 173   1          SCL = 0;                    //拉低时钟线
 174   1          Delay5us();                 //延时
 175   1      
 176   1          return CY;
 177   1      }
 178          
 179          /**************************************
C51 COMPILER V8.05a   WWW_OURHC_CN                                                         06/03/2012 18:38:46 PAGE 4   

 180          向IIC总线发送一个字节数据
 181          **************************************/
 182          void AT24C04_SendByte(BYTE dat)
 183          {
 184   1          BYTE i;
 185   1      
 186   1          for (i=0; i<8; i++)         //8位计数器
 187   1          {
 188   2              dat <<= 1;              //移出数据的最高位
 189   2              SDA = CY;               //送数据口
 190   2              SCL = 1;                //拉高时钟线
 191   2              Delay5us();             //延时
 192   2              SCL = 0;                //拉低时钟线
 193   2              Delay5us();             //延时
 194   2          }
 195   1          AT24C04_RecvACK();
 196   1      }
 197          
 198          /**************************************
 199          从IIC总线接收一个字节数据
 200          **************************************/
 201          BYTE AT24C04_RecvByte()
 202          {
 203   1          BYTE i;
 204   1          BYTE dat = 0;
 205   1      
 206   1          SDA = 1;                    //使能内部上拉,准备读取数据
 207   1          for (i=0; i<8; i++)         //8位计数器
 208   1          {
 209   2              dat <<= 1;
 210   2              SCL = 1;                //拉高时钟线
 211   2              Delay5us();             //延时
 212   2              dat |= SDA;             //读数据
 213   2              SCL = 0;                //拉低时钟线
 214   2              Delay5us();             //延时
 215   2          }
 216   1      
 217   1          return dat;
 218   1      }
 219          /********************************************************************
 220                                        结束
 221          *********************************************************************/


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


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

⌨️ 快捷键说明

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