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

📄 +

📁 51单片机配套C程序
💻
字号:
C51 COMPILER V7.50   24C02                                                                 05/16/2010 11:25:14 PAGE 1   


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

line level    source

   1          /*-----------------------------------------------
   2            名称:IIC协议 EEPROM24c02
   3            内容:此程序用于检测EEPROM性能,测试方法如下:写入24c02一些数据,然后在内存中清除这些数据,
   4                  掉电后主内存将失去这些信息,然后从24c02中调入这些数据。看是否与写入的相同。
   5          ------------------------------------------------*/
   6           #include<reg52.h>    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
   7           #include <intrins.h> //包含NOP空指令函数_nop_();
   8          
   9           #define AddWr 0xae   //写数据地址,需要参考24c02芯片文档
  10           #define AddRd 0xaf   //读数据地址
  11          
  12           
  13           sbit Sda=P1^2;       //定义总线连接端口
  14           sbit Scl=P1^1;
  15           sbit WP=P1^0;        //写保护,这里不使用
  16          
  17          /*------------------------------------------------
  18                              延时程序
  19          ------------------------------------------------*/
  20           void mDelay(unsigned char j)
  21           {
  22   1        unsigned int i;
  23   1        for(;j>0;j--)
  24   1           {
  25   2                for(i=0;i<125;i++)
  26   2                   {;}
  27   2                }
  28   1        }
  29          
  30          /*------------------------------------------------
  31                              启动IIC总线
  32          ------------------------------------------------*/
  33            void Start(void)
  34            {
  35   1         Sda=1;
  36   1         _nop_();_nop_();
  37   1         Scl=1;
  38   1         _nop_();_nop_();_nop_();_nop_();_nop_();
  39   1         Sda=0;
  40   1         _nop_();_nop_();_nop_();_nop_();_nop_();
  41   1         Scl=0;
  42   1        }
  43          
  44          
  45          /*------------------------------------------------
  46                              停止IIC总线
  47          ------------------------------------------------*/
  48            void Stop(void)
  49            {
  50   1         Sda=0;
  51   1         _nop_();
  52   1         Scl=1;
  53   1         _nop_();_nop_();_nop_();_nop_();_nop_();
  54   1         Sda=1;
  55   1         _nop_();_nop_();_nop_();_nop_();_nop_();
C51 COMPILER V7.50   24C02                                                                 05/16/2010 11:25:14 PAGE 2   

  56   1         Scl=0;
  57   1         }
  58          
  59          
  60          /*------------------------------------------------
  61                             应答IIC总线
  62          ------------------------------------------------*/
  63             void Ack(void)
  64             {
  65   1          Sda=0;
  66   1              _nop_();_nop_();_nop_();
  67   1              Scl=1;
  68   1              _nop_();_nop_();_nop_();_nop_();_nop_();
  69   1              Scl=0;
  70   1              _nop_();_nop_();
  71   1              }
  72          
  73          
  74          /*------------------------------------------------
  75                           非应答IIC总线
  76          ------------------------------------------------*/
  77                  void NoAck(void)
  78                  {
  79   1               Sda=1;
  80   1               _nop_();_nop_();_nop_();
  81   1               Scl=1;
  82   1               _nop_();_nop_();_nop_();_nop_();_nop_();
  83   1               Scl=0;
  84   1               _nop_();_nop_();
  85   1               }
  86          
  87          
  88          /*------------------------------------------------
  89                        发送一个字节
  90          ------------------------------------------------*/
  91                   void Send(unsigned char Data)
  92                   { 
  93   1                unsigned char BitCounter=8;
  94   1                unsigned char temp;
  95   1      
  96   1                do
  97   1                  {
  98   2                       temp=Data;
  99   2                       Scl=0;
 100   2                       _nop_();_nop_();_nop_();_nop_();_nop_();
 101   2                       if((temp&0x80)==0x80)
 102   2                          Sda=1;
 103   2                       else
 104   2                          Sda=0;
 105   2      
 106   2      
 107   2                              Scl=1;
 108   2                              temp=Data<<1;
 109   2                              Data=temp;
 110   2                              BitCounter--;
 111   2                        }
 112   1                while(BitCounter);
 113   1                    Scl=0;
 114   1                }
 115          
 116          
 117          /*------------------------------------------------
C51 COMPILER V7.50   24C02                                                                 05/16/2010 11:25:14 PAGE 3   

 118                         读入一个字节并返回
 119          ------------------------------------------------*/
 120                    unsigned char Read(void)
 121                    {
 122   1                 unsigned char temp=0;
 123   1                 unsigned char temp1=0;
 124   1                 unsigned char BitCounter=8;
 125   1      
 126   1                 Sda=1;
 127   1                 do
 128   1                   {
 129   2                        Scl=0;
 130   2                _nop_();_nop_();_nop_();_nop_();_nop_();
 131   2                        Scl=1;
 132   2                        _nop_();_nop_();_nop_();_nop_();_nop_();
 133   2                        if(Sda)
 134   2                           temp=temp|0x01;
 135   2                        else
 136   2                           temp=temp&0xfe;
 137   2      
 138   2                        if(BitCounter-1)
 139   2                           {
 140   3                                temp1=temp<<1;
 141   3                                temp=temp1;
 142   3                                }
 143   2                                BitCounter--;
 144   2                               }
 145   1                      while(BitCounter);
 146   1                      return(temp);
 147   1                }
 148           
 149          /*------------------------------------------------
 150                              写入数据
 151          ------------------------------------------------*/
 152                    void WrToROM(unsigned char Data[],unsigned char Address,unsigned char Num)
 153                    {
 154   1                 unsigned char i;
 155   1                 unsigned char *PData;
 156   1                 PData=Data;
 157   1                 for(i=0;i<Num;i++)
 158   1                    {
 159   2                         Start();
 160   2                         Send(AddWr);    //写入芯片地址
 161   2                         Ack();
 162   2                         Send(Address+i);//写入存储地址
 163   2                         Ack();
 164   2                         Send(*(PData+i));//写数据
 165   2                         Ack();
 166   2                         Stop();
 167   2                         mDelay(20);
 168   2                         }
 169   1                 }
 170          
 171          /*------------------------------------------------
 172                           读出数据
 173          ------------------------------------------------*/
 174                    void RdFromROM(unsigned char Data[],unsigned char Address,unsigned char Num)
 175                    {
 176   1                 unsigned char i;
 177   1                 unsigned char *PData;
 178   1                 PData=Data;
 179   1             for(i=0;i<Num;i++)
C51 COMPILER V7.50   24C02                                                                 05/16/2010 11:25:14 PAGE 4   

 180   1                    {
 181   2                         Start();        //写入芯片地址
 182   2                         Send(AddWr);
 183   2                         Ack();
 184   2                         Send(Address+i);//写入存储地址
 185   2                         Ack();
 186   2                         Start();
 187   2                         Send(AddRd);    //读入地址
 188   2                         Ack();
 189   2                         *(PData+i)=Read();//读数据
 190   2                         Scl=0;
 191   2                         NoAck();
 192   2                         Stop();
 193   2                         }
 194   1                }
 195          
 196          /*------------------------------------------------
 197                             主程序
 198          ------------------------------------------------*/
 199                  void main()
 200                  {
 201   1               unsigned char Number[4]={0x06,0x5b,0x4f,0x66};// 显示码值 1234
 202   1               unsigned char i;
 203   1               WP=0;                                         //写保护关掉
 204   1               P2=0x00;
 205   1               
 206   1               WrToROM(Number,4,4);                          //写入24c02
 207   1               mDelay(200);
 208   1               Number[0]=0;                                  //清除当前数据
 209   1               Number[1]=0;
 210   1               Number[2]=0;
 211   1               Number[3]=0;
 212   1               RdFromROM(Number,4,4);                        //调用存储数据
 213   1               
 214   1               while(1)
 215   1                    { 
 216   2                 
 217   2                     P0=Number[i];                            //显示存储数据
 218   2                         mDelay(200);                             //延时用于演示显示数据
 219   2                         mDelay(200);
 220   2                         i++;
 221   2                         if(i==4)
 222   2                            i=0;
 223   2                        }
 224   1              }
 225          
 226          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    415    ----
   CONSTANT SIZE    =      4    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      22
   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 + -