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

📄 24c04-p0-p2-led.lst

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 LST
字号:
C51 COMPILER V8.02   24C04_P0_P2_LED                                                       01/09/2007 19:56:08 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 24C04_P0_P2_LED
OBJECT MODULE PLACED IN 24C04-P0-P2-LED.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24C04-P0-P2-LED.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************
   2          *                                                                  *
   3          * ME500单片机开发系统演示程序 - 多花样流水灯                       *
   4          *                                                                  *
   5          * P0 P2 LED显示                                                    *
   6          *                                                                  *
   7          * 用数据块写方式将数据写入24C04芯片内,再将其数据读出送LED显示。   *
   8          *                                                                  *
   9          * 邮箱:  gguoqing@willar.com                                       *
  10          * 网站: http://www.willar.com                                     *
  11          * 作者: gguoqing                                                  *
  12          * 时间: 2007/01/08                                                *
  13          *                                                                  *
  14          *【版权】Copyright(C)伟纳电子 www.willar.com  All Rights Reserved  *
  15          *【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!        *
  16          *                                                                  *
  17          ********************************************************************
  18          *                                                                  *
  19          * 24C04的写入数据块最大字节数n为16,一次写入的字节数m不能多于n.     *
  20          *                                                                  *
  21          *******************************************************************/
  22          #include <reg51.h>
  23          #include <intrins.h>
  24          
  25          #define uchar unsigned char
  26          #define uint unsigned int
  27          
  28          uchar code  senddata1[16]= {
  29                      0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
  30                  0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF };
  31          
  32          uchar code  senddata2[16]= {
  33                  0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,
  34                  0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF };
  35          
  36          uchar code  senddata3[16]= {
  37                  0xFC,0xF9,0xF3,0xE7,0xCF,0x9F,0x3F,0x9F,
  38                          0xCF,0xE7,0xF3,0xF9,0xFC,0xFF,0xFF,0xFF };
  39          
  40          uchar code  senddata4[16]= {            
  41                          0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7,0xFF,
  42                  0xE7,0xC3,0x81,0x00,0x81,0xC3,0xE7,0xFF };
  43          
  44          uchar idata display[64]={0xff,0xff };  //数据存储区
  45          
  46          sbit SDA = P3^5;     //串行数据   
  47          sbit SCL = P3^4;     //串行时钟
  48          
  49          bit  ack;
  50          
  51          /**********************************************************
  52          
  53            延时子程序
  54          
  55          **********************************************************/
C51 COMPILER V8.02   24C04_P0_P2_LED                                                       01/09/2007 19:56:08 PAGE 2   

  56          void delayms(uint ms) 
  57          {
  58   1         uchar k;
  59   1         while(ms--)
  60   1         {
  61   2           for(k = 0; k < 120; k++);
  62   2         }
  63   1      }
  64          
  65          /**********************************************************
  66          
  67           4us延时函数
  68          
  69          **********************************************************/
  70          void  delayNOP()
  71          {
  72   1         _nop_();_nop_();
  73   1         _nop_();_nop_();
  74   1      }
  75          
  76          /**********************************************************
  77          
  78            起始条件函数
  79          
  80          **********************************************************/
  81          void I2C_start()
  82          
  83          {
  84   1        SDA = 1;
  85   1        SCL = 1;
  86   1        delayNOP();
  87   1        SDA = 0;
  88   1        delayNOP();
  89   1        SCL = 0;        //准备发送或接收数据
  90   1      }
  91          
  92          /**********************************************************
  93          
  94            停止条件函数
  95          
  96          **********************************************************/
  97          void I2C_stop()
  98          {
  99   1        SDA = 0;
 100   1        SCL = 1;
 101   1        delayNOP();
 102   1        SDA = 1;         //发送I2C总线结束信号
 103   1        delayNOP();
 104   1        SCL = 0;
 105   1      }
 106          
 107          /**********************************************************
 108          
 109            I2C总线初始化函数
 110          
 111          **********************************************************/
 112          void  I2C_init()
 113          {
 114   1         SCL = 0;
 115   1         I2C_stop();
 116   1      }
 117          
C51 COMPILER V8.02   24C04_P0_P2_LED                                                       01/09/2007 19:56:08 PAGE 3   

 118          /**********************************************************
 119          
 120            发送应答子函数
 121          
 122          **********************************************************/
 123          void  I2C_Ack()
 124          {
 125   1         SDA = 0;
 126   1         SCL = 1;
 127   1         delayNOP();   
 128   1         SCL = 0;
 129   1         SDA = 1;
 130   1      }
 131          
 132          /**********************************************************
 133          
 134            发送非应答子函数
 135          
 136          **********************************************************/
 137          void  I2C_NAck()
 138          {
 139   1         SDA = 1;
 140   1         SCL = 1;
 141   1         delayNOP();   
 142   1         SCL = 0;
 143   1         SDA = 0;  
 144   1      }
 145          
 146          /**********************************************************
 147          
 148           从AT24C02移出数据到MCU
 149          
 150          **********************************************************/
 151          uchar RecByte()
 152          {
 153   1         uchar i,read_data;
 154   1         read_data=0x00;
 155   1         SDA=1;                     //置数据线为输入方式
 156   1         for(i = 0; i < 8; i++)
 157   1         {     
 158   2           SCL = 1;
 159   2           read_data <<= 1;
 160   2           read_data |= SDA;
 161   2           delayNOP();
 162   2           SCL = 0;
 163   2               delayNOP();
 164   2         }
 165   1         SCL = 0;
 166   1         delayNOP();
 167   1         return(read_data);
 168   1      }
 169          
 170          /**********************************************************
 171          
 172            字节数据传送函数
 173            写数据到AT24C04,
 174            ack=1,发送正常。ack=0,表示接收器无应答或损害。
 175          
 176          **********************************************************/
 177          uchar SendByte(uchar write_data) 
 178          {
 179   1         uchar i;
C51 COMPILER V8.02   24C04_P0_P2_LED                                                       01/09/2007 19:56:08 PAGE 4   

 180   1         for(i = 0; i < 8; i++)    //循环移入8个位
 181   1         {
 182   2           SDA = (bit)(write_data & 0x80);
 183   2           _nop_();
 184   2           _nop_();             
 185   2               SCL = 1;
 186   2           delayNOP();
 187   2           SCL = 0;
 188   2           write_data <<= 1;
 189   2         }
 190   1      
 191   1         delayNOP();
 192   1         SDA = 1;                  //释放总线,准备读取应答
 193   1         SCL = 1;
 194   1         delayNOP();
 195   1         if(SDA==1) ack=0;         //ack=0,表示非应答
 196   1         else       ack=1;
 197   1         SCL = 0;
 198   1         delayNOP();
 199   1         return ack;               //返回AT24C04应答位
 200   1      }
 201          
 202          /**********************************************************
 203          
 204           发送多字节数据函数
 205          
 206          **********************************************************/
 207          uchar  SendString(uchar Slave,uchar Subaddr,uchar *Source,uchar Num)
 208          {
 209   1         uchar  s;
 210   1      
 211   1         I2C_start();
 212   1         SendByte(Slave);          //发送器件地址
 213   1         if(ack==0) return(0);
 214   1         SendByte(Subaddr);        //发送器件子地址
 215   1         if(ack==0) return(0);
 216   1      
 217   1         for(s=0; s<Num; s++)
 218   1         {
 219   2           SendByte(*Source);      //发送数据
 220   2           if(ack==0) return(0);
 221   2           Source++;
 222   2         }
 223   1         I2C_stop();               //结束总线
 224   1         return(1);
 225   1      }
 226          
 227          /**********************************************************
 228          
 229           接收多字节数据函数
 230          
 231          
 232          **********************************************************/
 233          uchar  RecString(uchar Slave,uchar Subaddr,uchar *Source,uchar Num)
 234          {
 235   1         uchar  s;
 236   1      
 237   1         I2C_start();
 238   1         SendByte(Slave);          //发送器件地址
 239   1         if(ack==0) return(0);
 240   1         SendByte(Subaddr);        //发送器件子地址
 241   1         if(ack==0) return(0);
C51 COMPILER V8.02   24C04_P0_P2_LED                                                       01/09/2007 19:56:08 PAGE 5   

 242   1        
 243   1         I2C_start();
 244   1         SendByte(Slave+1);        //发送器件地址
 245   1         if(ack==0) return(0);
 246   1      
 247   1         for(s=0; s<Num; s++)
 248   1         {
 249   2           *Source=RecByte();      //接收数据
 250   2           I2C_Ack();              //发送应答位
 251   2           Source++;
 252   2         }
 253   1         I2C_NAck();               //发送非应答
 254   1         I2C_stop();               //结束总线
 255   1         return(1);
 256   1      }
 257          
 258          /**********************************************************
 259          
 260             主函数
 261          
 262          **********************************************************/
 263          main(void)
 264          {
 265   1        uchar i,temp;
 266   1        I2C_init();
 267   1      
 268   1        SendString(0xa0,0x00,senddata1,16);  
 269   1        delayms(5);
 270   1        SendString(0xa0,0x10,senddata2,16);
 271   1        delayms(5);
 272   1        SendString(0xa0,0x20,senddata3,16);
 273   1        delayms(5);
 274   1        SendString(0xa0,0x30,senddata4,16);
 275   1      
 276   1        delayms(500); 
 277   1        RecString(0xa0,0x00,display,64);  //从AT24C04读出数据
 278   1      
 279   1        while(1)
 280   1        {
 281   2          for(i=0; i<64; i++)             //显示数据
 282   2          {
 283   3                temp= display[i];
 284   3            P0 = temp;
 285   3                P2 = temp;
 286   3                delayms(300);
 287   3          }
 288   2        } 
 289   1      }
 290          
 291          /**********************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    427    ----
   CONSTANT SIZE    =     64    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      12
   IDATA SIZE       =     64    ----
   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 + -