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

📄 consistency_at24c512.lst

📁 实现几个控制的同步的AT24C512的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   CONSISTENCY_AT24C512                                                  06/20/2007 16:56:01 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE CONSISTENCY_AT24C512
OBJECT MODULE PLACED IN .\consistency_AT24C512.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\consistency_AT24C512.C DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include<reg52.h>
   3          #include<intrins.h>
   4          #define uchar unsigned char
   5          #define uint unsigned int
   6          #define  ulint  unsigned  long int
   7          //#define WDI P3_4 
   8          uint AT24c64_address ; //A2,A1,A0,接GND。EEPROM的控制字节,具体形式为(1)(0)(1)(0)(A2)(A1)(A0)(R/W),其中R/W
             -=1, 
   9          //表示读操作,R/W=0为写操作,A2,A1,A0为EEPROM的页选或片选地址;
  10          #define delayNOP(); _nop_();_nop_();_nop_();_nop_();
  11          #define NUM 10
  12          uchar idata sendbuf[NUM];
  13          uchar idata receivebuf[NUM];
  14          bit bdata SystemError;
  15          sbit SDA=P3^5;
  16          sbit SCL=P3^4;
  17          /*************************************************************************************/
  18          #define  row    49         //有多少行
  19          #define  list   6           //一行有多少个像素;
  20          
  21          #define  wbyte  list/2   //两个像素合成了一个字节
  22          #define  jiepai   17       //一个花样循环有多少个节拍
  23          
  24          
  25          #define  list1   66
  26          #define  list2   78
  27          #define  list3   66
  28          /*************************************************************************************/
  29          //uint h_l=1;//电平有效形式,h_l=0是高电平有效,h_l=1是低电平有效
  30           
  31          #define tset    1         //数码管RGB排列情况
  32                                                    //0是RGB  RGB  RGB
  33                                //1是RGBx RGBx RGBx
  34                                                    //2是xRGB xRGB xRGB
  35          uint ts;
  36          uint dpara; 
  37          #define  adress  0x01//当前分控地址
  38          uint     arress_botten;
  39          //#define dpara 207/8;
  40          #define KEY P1
  41          
  42          uchar code color_data[8]={0,4,2,1,6,5,3,7};//黑,红,绿,蓝,黄,紫,白//阳码
  43          uchar code color_data01[7]={4,2,1,6,5,3,7};
  44                                    /*定义颜色控制端口*/
  45          sbit   DQ_595=P1^3;/*蓝线 HS74HC595的数据输入*/
  46          sbit   CLK_595=P1^2;/*绿线  HS74HC595的时钟*/
  47          sbit   STB_595=P1^1;/*红线  HS74HC595的数据锁存*/
  48          sbit   EN_595=P1^0;/*黄线  HS74HC595的数据使能*/
  49          sbit   RE_DE=P3^3;/*MAX487的收发器控制,当RE_DE=1时当前487处于接收状态 当RE_DE=0时当前487处于发送状态*/
  50          
  51          
  52          uchar data dat[8];
  53          void iic_start();//启动IIC总线
  54          void iic_stop();//停止IIC总线
C51 COMPILER V8.02   CONSISTENCY_AT24C512                                                  06/20/2007 16:56:01 PAGE 2   

  55          void slave_ACK();//从机发送应答
  56          void slave_NOACK(void);//从机发送非应答
  57          void check_ACK(void);//主机应答位检查
  58          void IICSendByte(uchar ch);//发送1BYTE
  59          uchar IICReciveByte(void);//接收1BYTE
  60          void AT24c64_write_byte(uint address,uchar dat);// 24c64存储1BYTE
  61          uchar AT24c64_read_byte(uint address);//读指定的地址的1BYTE数据 
  62          void AT24c64_read_bytes(uint address,uchar *pdat,uchar length);//读指定地址后的连续的数据 
  63          void AT24c64_write_bytes(uint address,uchar *pdat,uchar length);//写一页数据到24c64中 
  64          delay_tt_ms(uchar tt);//延时TTMS
  65          ///////////////////////////////
  66          void iic_start(void)//启动IIC总线
  67          {
  68   1      EA=0;
  69   1      SDA=1;
  70   1      SCL=1;
  71   1      delayNOP();//延时5us
  72   1      SDA=0;
  73   1      delayNOP();
  74   1      SCL=0;
  75   1      }
  76          /////////////////////////////////
  77          void iic_stop(void)//停止IIC总线
  78          {
  79   1      SDA=0;
  80   1      SCL=1;
  81   1      delayNOP();
  82   1      SDA=1;
  83   1      delayNOP();
  84   1      SCL=0;
  85   1      }
  86          ////////////////////////////////
  87          void slave_ACK(void)//从机发送应答
  88          {
  89   1      SDA=0;
  90   1      SCL=1;
  91   1      delayNOP();
  92   1      SCL=0;
  93   1      SDA=1;
  94   1      }
  95          /////////////////////////////////
  96          void slave_NOACK(void)//从机发送非应答
  97          {
  98   1      SDA=1;
  99   1      SCL=1;
 100   1      delayNOP();
 101   1      SDA=0;
 102   1      SCL=0;
 103   1      }
 104          /////////////////////////////////
 105          void check_ACK(void)//主机应答位检查
 106          {
 107   1      SDA=1;
 108   1      SCL=1;
 109   1      F0=0;//非应答标志F0
 110   1      if(SDA==1)
 111   1         F0=1;//表明非应答
 112   1      SCL=0;
 113   1      }
 114          //////////////////////////////////
 115          void IICSendByte(uchar ch)//发送1BYTE
 116          {
C51 COMPILER V8.02   CONSISTENCY_AT24C512                                                  06/20/2007 16:56:01 PAGE 3   

 117   1      uchar idata n=8;//1字节共8位
 118   1      while(n--)
 119   1           {
 120   2       if((ch&0x80)==0x80)//发送高位
 121   2        {
 122   3            SDA=1;//传输1
 123   3      SCL=1;
 124   3      delayNOP();
 125   3      SCL=0;
 126   3      }
 127   2       else
 128   2          {
 129   3      SDA=0;//传输0
 130   3      SCL=1;
 131   3      delayNOP();
 132   3      SCL=0;
 133   3      }
 134   2       ch<<=1;//数据左移
 135   2       }
 136   1      }
 137          //////////////////////////////////
 138          uchar IICReceiveByte(void)//接收1BYTE
 139          {
 140   1      uchar idata n=8;
 141   1      uchar tdata;
 142   1      while(n--)
 143   1           {
 144   2       SDA=1;
 145   2       SCL=1;
 146   2       tdata<<=1;//左移一位
 147   2       if(SDA==1)
 148   2          tdata=tdata|0x01;//收到1,数据最后一位为1
 149   2           else
 150   2          tdata=tdata&0xfe;
 151   2           SCL=0;
 152   2       }
 153   1      return(tdata);
 154   1      }
 155          ////////////////////////////////////
 156          void AT24c64_write_byte(uint address,uchar dat)// 24c64存储1BYTE
 157          { 
 158   1      uchar value; 
 159   1      iic_start(); 
 160   1      value=AT24c64_address&0xfe; //发送器件地址 
 161   1      IICSendByte(value); 
 162   1      check_ACK();//检测应答
 163   1      if(F0==1)
 164   1         {
 165   2         SystemError=1;
 166   2         return;
 167   2         }
 168   1      value=address/0x100;//发送AT24C64内存地址高字节
 169   1      IICSendByte(value); 
 170   1      check_ACK();
 171   1      if(F0==1)
 172   1         {
 173   2         SystemError=1;
 174   2         return;
 175   2         }
 176   1      value=address%0x100;//发送AT24C64内存地址低字节
 177   1      IICSendByte(value); 
 178   1      check_ACK();
C51 COMPILER V8.02   CONSISTENCY_AT24C512                                                  06/20/2007 16:56:01 PAGE 4   

 179   1      if(F0==1)
 180   1         {
 181   2         SystemError=1;
 182   2         return;
 183   2         }
 184   1      value=dat; 
 185   1      IICSendByte(value);//发送数据 
 186   1      check_ACK();
 187   1      if(F0==1)
 188   1         {
 189   2         SystemError=1;
 190   2         return;
 191   2         }
 192   1      iic_stop(); 
 193   1      } 
 194          ///////////////////////////////////
 195          uchar AT24c64_read_byte(uint address)//读指定的地址的1BYTE数据 
 196          { 
 197   1      uchar value; 
 198   1      iic_start(); 
 199   1      value=AT24c64_address&0xfe; //发送器件地址 
 200   1      IICSendByte(value); 
 201   1      check_ACK();
 202   1      value=address/0x100;//发送地址高字节 
 203   1      IICSendByte(value); 
 204   1      check_ACK();
 205   1      value=address%0x100;//发送地址低字节 
 206   1      IICSendByte(value); 
 207   1      check_ACK();
 208   1      iic_stop(); 
 209   1      iic_start(); 
 210   1      value=AT24c64_address|0x01; //发送器件地址 
 211   1      IICSendByte(value); 
 212   1      check_ACK();
 213   1      value=IICReceiveByte();
 214   1      slave_NOACK(); //主不应答信号;主机发送非应答,迫使数据传输结束 
 215   1      iic_stop(); 
 216   1      return(value); 
 217   1      } 
 218          //////////////////////////////////
 219          void AT24c64_write_bytes(uint address,uchar *pdat,uchar length)//写一页数据到24c64中 
 220          { 
 221   1      uchar value,i; 
 222   1      iic_start();  
 223   1      value=AT24c64_address&0xfe; //发送器件地址 
 224   1      IICSendByte(value); 
 225   1      check_ACK();
 226   1      if(F0==1)
 227   1         {
 228   2         SystemError=1;
 229   2         return;
 230   2         }
 231   1      value=address/0x100;//发送地址高字节 
 232   1      IICSendByte(value); 
 233   1      check_ACK();
 234   1      if(F0==1)
 235   1         {
 236   2         SystemError=1;
 237   2         return;
 238   2         }
 239   1      value=address%0x100;//发送地址低字节 
 240   1      IICSendByte(value);
C51 COMPILER V8.02   CONSISTENCY_AT24C512                                                  06/20/2007 16:56:01 PAGE 5   

 241   1      check_ACK();
 242   1      if(F0==1)
 243   1         {
 244   2         SystemError=1;
 245   2         return;
 246   2         } 
 247   1      for(i=0;i<length;i++ )
 248   1      { 
 249   2      value=*pdat; 
 250   2      IICSendByte(value);//发送数据 
 251   2      check_ACK();
 252   2      if(F0==1)
 253   2         {
 254   3         SystemError=1;
 255   3         return;
 256   3         }
 257   2      pdat++; 
 258   2      } 
 259   1      iic_stop(); 
 260   1      } 
 261          //////////////////////////////////////
 262          void AT24c64_read_bytes(uint address,uchar *pdat,uchar length)//读指定地址后的连续的数据 
 263          { 
 264   1      uchar value,i; 
 265   1      iic_start(); 
 266   1      value=AT24c64_address&0xfe; //发送器件地址 
 267   1      IICSendByte(value); 
 268   1      check_ACK();
 269   1      if(F0==1)
 270   1         {
 271   2         SystemError=1;
 272   2         return;
 273   2         }
 274   1      value=address/0x100;//发送AT24C64内存地址高字节 
 275   1      IICSendByte(value); 
 276   1      check_ACK();
 277   1      if(F0==1)
 278   1         {
 279   2         SystemError=1;
 280   2         return;
 281   2         }
 282   1      value=address%0x100;//发送AT24C64内存地址低字节 
 283   1      IICSendByte(value); 
 284   1      check_ACK();
 285   1      if(F0==1)

⌨️ 快捷键说明

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