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

📄 main.lst

📁 这是一个单片机读写EEPROM的源程序
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  03/15/2006 19:40:58 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE MAIN.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <AT89X52.H>
   2          #include <stdio.h>
   3          #include <absacc.h> 
   4          unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
   5                                      0x6d,0x7d,0x07, 0x7f,0x6f,}; 
   6          unsigned char sec;        //定义计数值,每过1秒,sec加1 
   7          unsigned int tcnt;        //定时中断次数
   8          bit  write=0;             //写24C08的标志;
   9          sbit gewei=P2^0;          //个位选通定义
  10          sbit shiwei=P2^1;         //十位选通定义
  11          /////////24C08读写驱动程序////////////////////
  12          sbit scl=P3^4;  //24c08 SCL
  13          sbit sda=P3^5;  //24c08 SDA
  14          void delay1(unsigned char x)
  15          {  unsigned int i;
  16   1        for(i=0;i<x;i++);
  17   1        ;}
  18          void flash() 
  19          {  ;  ; }
  20          void x24c08_init()  //24c08初始化子程序
  21           {scl=1; flash(); sda=1; flash();}
  22          void start()        //启动I2C总线
  23          {sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();}
  24          void stop()         //停止I2C总线
  25          {sda=0; flash(); scl=1; flash(); sda=1; flash();}
  26          void writex(unsigned char j)  //写一个字节
  27          {  unsigned char i,temp;
  28   1         temp=j;
  29   1         for (i=0;i<8;i++)
  30   1         {temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();}
  31   1         scl=0; flash(); sda=1; flash();
  32   1      }
  33          unsigned char readx()   //读一个字节
  34          {
  35   1         unsigned char i,j,k=0;
  36   1         scl=0; flash(); sda=1;
  37   1         for (i=0;i<8;i++)
  38   1         {  flash(); scl=1; flash();
  39   2            if (sda==1) j=1;
  40   2            else j=0;
  41   2            k=(k<<1)|j; 
  42   2                scl=0;}
  43   1         flash(); return(k);
  44   1      }
  45          void clock()         //I2C总线时钟
  46          {
  47   1         unsigned char i=0;
  48   1         scl=1; flash();
  49   1         while ((sda==1)&&(i<255))i++;
  50   1         scl=0; flash();
  51   1      }
  52          ////////从24c02的地址address中读取一个字节数据/////
  53          unsigned char x24c08_read(unsigned char address)
  54          {
  55   1         unsigned char i;
C51 COMPILER V7.06   MAIN                                                                  03/15/2006 19:40:58 PAGE 2   

  56   1         start(); writex(0xa0);
  57   1         clock(); writex(address);
  58   1         clock(); start();
  59   1         writex(0xa1); clock();
  60   1         i=readx(); stop();
  61   1         delay1(10);
  62   1         return(i);
  63   1      }
  64          //////向24c02的address地址中写入一字节数据info/////
  65          void x24c08_write(unsigned char address,unsigned char info)
  66          {
  67   1         EA=0;
  68   1         start(); writex(0xa0);
  69   1         clock(); writex(address);
  70   1         clock(); writex(info);
  71   1         clock(); stop();
  72   1         EA=1;
  73   1         delay1(50);
  74   1      }
  75          /////////////24C08读写驱动程序完/////////////////////
  76          void Delay(unsigned int tc)     //延时程序
  77          {
  78   1              while( tc != 0 )                        
  79   1                 {unsigned int i;                     
  80   2                  for(i=0; i<100; i++);       
  81   2                  tc--;}
  82   1      }
  83          void LED()                  //LED显示函数
  84          {
  85   1         shiwei=0; P0=table[sec/10]; Delay(8); shiwei=1;
  86   1         gewei=0;  P0=table[sec%10]; Delay(5); gewei=1;
  87   1      }
  88          void t0(void) interrupt 1 using 0  //定时中断服务函数
  89          { 
  90   1      TH0=(65536-50000)/256; //对TH0 TL0赋值
  91   1      TL0=(65536-50000)%256; //重装计数初值
  92   1      tcnt++;        //每过250ust tcnt加一
  93   1      if(tcnt==20)  //计满20次(1秒)时
  94   1        { 
  95   2          tcnt=0;   //重新再计
  96   2          sec++;
  97   2          write=1;  //1秒写一次24C08
  98   2          if(sec==100) //定时100秒,在从零开始计时
  99   2            {sec=0;} 
 100   2        } 
 101   1      }
 102          void main(void) 
 103          { 
 104   1      TMOD=0x01;  //定时器工作在方式1
 105   1      ET0=1;  EA=1; 
 106   1      x24c08_init();        //初始化24C08
 107   1      sec=x24c08_read(2);//读出保存的数据赋于sec
 108   1      TH0=(65536-50000)/256; //对TH0 TL0赋值
 109   1      TL0=(65536-50000)%256; //使定时器0.05秒中断一次
 110   1      TR0=1;           //开始计时
 111   1       while(1) 
 112   1        {
 113   2              LED();
 114   2              if(write==1) //判断计时器是否计时一秒
 115   2          {
 116   3               write=0;              //清零 
 117   3           x24c08_write(2,sec);  //在24c08的地址2中写入数据sec
C51 COMPILER V7.06   MAIN                                                                  03/15/2006 19:40:58 PAGE 3   

 118   3              }
 119   2         }
 120   1      }


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