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

📄 xxx.lst

📁 at24C02读写--51单片机 已经通过验证
💻 LST
字号:
C51 COMPILER V7.06   XXX                                                                   08/21/2008 19:50:23 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE XXX
OBJECT MODULE PLACED IN xxx.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE xxx.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "reg51.h"
   2          #include <stdio.h>
   3          #include <absacc.h> 
   4          
   5          unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; 
   6          unsigned char sec,kk;        //定义计数值,每过1秒,sec加1 
   7          unsigned int tcnt;        //定时中断次数
   8          sbit P2_1=P2^1;                   //
   9          bit  write=0;             //写24C08的标志;
  10          sbit gewei=P2^2;          //个位选通定义
  11          sbit shiwei=P2^3;         //十位选通定义
  12          sbit qianwei=P2^4;          //千位选通定义
  13          sbit wanwei=P2^5;         //万位选通定义
  14          
  15          sbit bell = P1^1;
  16          
  17          /////////24C08读写驱动程序////////////////////
  18          sbit scl=P3^7;  //24c08 SCL
  19          sbit sda=P3^6;  //24c08 SDA
  20          
  21          void delay1(unsigned char x)
  22          {  unsigned int i;
  23   1        for(i=0;i<x;i++);
  24   1        ;}
  25          void flash() 
  26          {  ;  ; }
  27          void x24c08_init()  //24c08初始化子程序
  28           {scl=1; flash(); sda=1; flash();}
  29          //当SCL是高电平时 SDA线从高电平向低电平切换表示起始条件
  30          //当SCL是高电平时 SDA线从低电平向高电平切换表示停止条件
  31          void start()        //启动I2C总线
  32          {sda=1; flash(); scl=1; flash(); sda=0; flash(); /*scl=0; flash();*/}
  33          void stop()         //停止I2C总线
  34          {sda=0; flash(); scl=1; flash(); sda=1; flash();}
  35          ///SDA 线上的数据必须在时钟的高电平周期保持稳定
  36          //数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变
  37          void writex(unsigned char j)  //写一个字节
  38          {  unsigned char i,temp;
  39   1         temp=j;
  40   1         for (i=0;i<8;i++)
  41   1         {temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();}
  42   1         scl=0; flash(); /*sda=1; flash();*/  //?????
  43   1      }
  44          unsigned char readx()   //读一个字节
  45          {
  46   1         unsigned char i,j,k=0;
  47   1         scl=0; flash(); sda=1;
  48   1         for (i=0;i<8;i++)
  49   1         {  flash(); scl=1; flash();
  50   2            if (sda==1) j=1;
  51   2            else j=0;
  52   2            k=(k<<1)|j; 
  53   2                scl=0;}
  54   1         flash(); return(k);
  55   1      }
C51 COMPILER V7.06   XXX                                                                   08/21/2008 19:50:23 PAGE 2   

  56          //数据传输必须有响应,相关的响应时钟脉冲由主机产生
  57          //在响应的时钟脉冲期间发送器释放SDA线(高)
  58          //在响应的时钟脉冲期间接收器必须将SDA线拉低
  59          //使它在这个时钟脉冲的高电平期间保持稳定的低电平
  60          void clock()         //I2C总线时钟
  61          {
  62   1         unsigned char i=0;
  63   1         scl=1; flash();
  64   1         while ((sda==1)&&(i<200))i++;
  65   1         scl=0; flash();
  66   1      }
  67          //选择读时序 
  68          //开始-从器件地址-A-字节地址-A--开始-读-A-返回DATA-停止
  69          ////////从24c02的地址address中读取一个字节数据/////
  70          unsigned char x24c08_read(unsigned char address)
  71          {
  72   1         unsigned char i;
  73   1         start(); writex(0xa0);//发送从机地址
  74   1         clock(); writex(address);//
  75   1         clock();  start();
  76   1         writex(0xa1); clock();
  77   1         i=readx(); stop();
  78   1         delay1(10);
  79   1         return(i);
  80   1      }
  81          //
  82          //////向24c02的address地址中写入一字节数据info/////
  83          void x24c08_write(unsigned char address,unsigned char info)
  84          {
  85   1         EA=0;
  86   1         start(); writex(0xa0);
  87   1         clock(); writex(address);
  88   1         clock(); writex(info);
  89   1         clock(); stop();
  90   1         EA=1;
  91   1         delay1(50);
  92   1      }
  93          /////////////24C08读写驱动程序完/////////////////////
  94          void Delay(unsigned int tc)     //延时程序
  95          {
  96   1              while( tc != 0 )                        
  97   1                 {unsigned int i;                     
  98   2                  for(i=0; i<100; i++);       
  99   2                  tc--;}
 100   1      }
 101          void LED()                  //LED显示函数
 102          {
 103   1         shiwei=0; P0=table[sec/10]; Delay(8); shiwei=1;
 104   1         gewei=0;  P0=table[sec%10]; Delay(5); gewei=1;
 105   1      }
 106          void t0(void) interrupt 1 using 0  //定时中断服务函数
 107          { 
 108   1      TH0=(65536-50000)/256; //对TH0 TL0赋值
 109   1      TL0=(65536-50000)%256; //重装计数初值
 110   1      tcnt++;        //每过250ust tcnt加一
 111   1      if(tcnt==20)  //计满20次(1秒)时
 112   1        { 
 113   2          tcnt=0;   //重新再计
 114   2          sec++;
 115   2          write=1;  //1秒写一次24C08
 116   2          if(sec==100) //定时100秒,在从零开始计时
 117   2            {sec=0;} 
C51 COMPILER V7.06   XXX                                                                   08/21/2008 19:50:23 PAGE 3   

 118   2        } 
 119   1      }
 120          /*
 121          void main(void) 
 122          {
 123          P2_1=0; 
 124          TMOD=0x01;  //定时器工作在方式1
 125          ET0=1;  EA=1; 
 126          x24c08_init();        //初始化24C08
 127          sec=x24c08_read(2);//读出保存的数据赋于sec
 128          TH0=(65536-50000)/256; //对TH0 TL0赋值
 129          TL0=(65536-50000)%256; //使定时器0.05秒中断一次
 130          TR0=1;           //开始计时
 131           while(1) 
 132            {
 133                  LED();
 134                  if(write==1) //判断计时器是否计时一秒
 135              {
 136                   write=0;              //清零 
 137               x24c08_write(2,sec);  //在24c08的地址2中写入数据sec
 138                  }
 139             }
 140          }
 141          */
 142          
 143          
 144          void main(void) 
 145          {
 146   1              unsigned char i;
 147   1              /*for(i=0;i<255;i++)
 148   1              {
 149   1           x24c08_write(i,i); 
 150   1               Delay(1); 
 151   1              }*/
 152   1              // x24c08_write(33,37); 
 153   1              
 154   1              while(1)
 155   1              {
 156   2      
 157   2               for(i=0;i<256;i++)
 158   2                      {
 159   3                    P0 = x24c08_read(i);
 160   3                        Delay(300);
 161   3                      }
 162   2              }       
 163   1      }
 164          


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