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

📄 main.lst

📁 KeilC51开发,51单片机与E2PROM的接口程序,并且有串口与液晶的输出.
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  07/28/2005 20:31:13 PAGE 1   


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

stmt level    source

   1          #include <absacc.h>
   2          #include <reg51.h>
   3          #include <intrins.h>
   4          #include <stdio.h>
   5          #include <24c64.h>
   6          
   7          /*////////////////////////////*/
   8          /*/                     常量定义         /*/
   9          /*////////////////////////////*/
  10          
  11          /* 定时器初值 */
  12          #define V_T1   0xfd   /*SCOM  9600 baud,  ! notice: crystal 11.0592MHz */
  13          #define V_TH0   0xee  /*   ~ 5ms ,  ! notice: crystal 11.0592MHz */
  14          #define V_TL0   0x00
  15          
  16          /* 1s软件定时器溢出值,200个5ms */
  17          #define V_T1s   200
  18          
  19          /* 数码管段驱动寄存器地址 */
  20          #define ADDR_8SEG       XBYTE[0x2000]
  21          
  22          /* 数码管位驱动和指示灯驱动寄存器地址 */
  23          #define ADDR_SEL        XBYTE[0x4000] 
  24          
  25          /* 按键 */
  26          sbit KEY1=      P1^0;
  27          sbit KEY2=      P1^1;
  28          sbit KEY3=      P1^2;
  29          sbit KEY4=      P1^3;
  30          
  31          sbit SCL =P1^5;
  32          sbit SDA =P1^7;
  33          
  34          /*////////////////////////////*/
  35          /*/                     变量定义         /*/
  36          /*////////////////////////////*/
  37          
  38          /* 1s软件定时器计数 */
  39          unsigned char clock1s;
  40          /* 1s软件定时器溢出标志,位变量 */
  41          bit clock1s_flag;
  42          
  43          /* 数码管位驱动和指示灯驱动信号输出缓存,定义了一个可位寻址的变量 */
  44          unsigned char bdata output_sel;
  45                  sbit led_1 = output_sel^5;
  46                  sbit led_2 = output_sel^6;
  47                  sbit led_3 = output_sel^7;
  48                  sbit led_4 = output_sel^4;
  49          
  50          /* 数码管扫描驱动指针,为测试外部存储器(U3 6264),特使用xdata类型 */
  51          unsigned char xdata digi_scaner;
  52          
  53          /* 测试用计数器,为测试外部存储器(U3 6264),特使用xdata类型 */
  54          unsigned int xdata test_counter;
  55          /* 测试用计数值十进制表示,为测试外部存储器(U3 6264),特使用xdata类型 */
C51 COMPILER V7.06   MAIN                                                                  07/28/2005 20:31:13 PAGE 2   

  56          unsigned char xdata digi[4];
  57          
  58          //test i2c
  59          Uchar ch0, rec;
  60          Uchar buf[8]="0000000";
  61          Uchar *ch=&ch0;
  62          Uchar *str = buf;
  63          ////////////////////////////////////////////////////////////////
  64          ////////////////////////////////////////////////////////////////
  65          
  66          
  67          /*////////////////////////////*/
  68          /*/                     函数定义         /*/
  69          /*////////////////////////////*/
  70          
  71          /**** 7段数码显示译码 
  72              参数:
  73                          DATA: 需要显示的数字或符号;
  74                  返回值: 7段译码结果 ( D7~0 = PGFEDCBA )
  75          *****/
  76          unsigned char NUMTOSEG7(unsigned char DATA)
  77          { unsigned char AA;
  78   1        switch (DATA)
  79   1        { case 0: AA=0xc0;break; /* ‘0’*/
  80   2          case 1: AA=0xf9;break; /* ‘1’*/
  81   2          case 2: AA=0xa4;break; /* ‘2’*/
  82   2          case 3: AA=0xb0;break; /* ‘3’*/
  83   2          case 4: AA=0x99;break; /* ‘4’*/
  84   2          case 5: AA=0x92;break; /* ‘5’*/
  85   2          case 6: AA=0x82;break; /* ‘6’*/
  86   2          case 7: AA=0xf8;break; /* ‘7’*/
  87   2          case 8: AA=0x80;break; /* ‘8’*/
  88   2          case 9: AA=0x90;break; /* ‘9’*/
  89   2          case 10: AA=0x88;break; /* ‘A’*/
  90   2          case 11: AA=0x83;break; /* ‘B’*/
  91   2          case 12: AA=0xc6;break; /* ‘C’*/
  92   2          case 13: AA=0xa1;break; /* ‘D’*/
  93   2          case 14: AA=0x86;break; /* ‘E’*/
  94   2          case 15: AA=0x8e;break; /* ‘F’*/
  95   2          case '-':AA=0xdf;break; /* 破折号*/
  96   2          case '_':AA=0xf7;break; /* 下划线*/
  97   2          case ' ':AA=0xff;break; /* 消隐*/
  98   2          default: AA=0xff;
  99   2        }
 100   1        return(AA);
 101   1      }
 102          
 103          
 104          
 105          /**** T0时钟中断服务程序
 106                  在本例中,每5ms被执行一次
 107          *****/
 108          
 109          timer0() interrupt 1 using 0         
 110          {
 111   1              EA=0;  /*关中断*/
 112   1      
 113   1              /* 重新对计数器赋初值,并启动定时计数 */
 114   1              TH0=V_TH0;
 115   1          TL0=V_TL0;
 116   1          TR0=1;
 117   1      
C51 COMPILER V7.06   MAIN                                                                  07/28/2005 20:31:13 PAGE 3   

 118   1              /* 1秒钟软定时器计数 */
 119   1              if (++clock1s>=V_T1s)
 120   1              {
 121   2                      clock1s_flag = 1; /*当1秒到时,溢出标志置1 */
 122   2                      clock1s = 0;
 123   2              }
 124   1      
 125   1      
 126   1      
 127   1              output_sel = 0xf0; /*初值,令数码管驱动位无效,指示灯全灭*/
 128   1      
 129   1              /* 检测到按键被按下(0)时,相应的指示灯亮(0) */
 130   1              if (KEY1==0) led_1 = 0;
 131   1              if (KEY2==0) led_2 = 0;
 132   1              if (KEY3==0) led_3 = 0;
 133   1              if (KEY4==0) led_4 = 0;
 134   1      
 135   1              /* 数码管扫描驱动指针值从1到4重复变换,每5ms间隔对一个数码管进行驱动,20ms一个轮回 */
 136   1              if (++digi_scaner>=5) digi_scaner = 1;
 137   1              switch (digi_scaner)
 138   1              {
 139   2                      case 1: /* 驱动第一个数码管 */
 140   2                                      output_sel |= 0x01;
 141   2                                      ADDR_8SEG = NUMTOSEG7(digi[0]); /*输出到锁存器U5(在电路图中找)*/
 142   2                                      break;
 143   2      
 144   2                      case 2: /* 驱动第二个数码管 */
 145   2                                      output_sel |= 0x02;
 146   2                                      ADDR_8SEG = NUMTOSEG7(digi[1]); /*输出到锁存器U5*/
 147   2                                      break;
 148   2      
 149   2                      case 3: /* 驱动第三个数码管 */
 150   2                                      output_sel |= 0x04;
 151   2                                      ADDR_8SEG = NUMTOSEG7(digi[2]); /*输出到锁存器U5*/
 152   2                                      break;
 153   2      
 154   2                      case 4: /* 驱动第四个数码管 */
 155   2                                      output_sel |= 0x08;
 156   2                                      ADDR_8SEG = NUMTOSEG7(digi[3]); /*输出到锁存器U5*/
 157   2                                      break;
 158   2              }
 159   1      
 160   1              ADDR_SEL = output_sel;          /*输出到锁存器U6(在电路图中找)*/
 161   1      
 162   1      
 163   1              EA=1;  /*开中断*/
 164   1      }
 165          
 166          
 167          /**** 主程序*****/
 168          
 169          main()
 170          {
 171   1      
 172   1      /* 单片机系统初始化 */
 173   1          P1=0XFF;
 174   1          P3=0XFF;
 175   1          /** 中断工作寄存器初始化 **/
 176   1          IE=0X80;
 177   1          IP=0;
 178   1          IT0=0;
 179   1          IT1=0;
C51 COMPILER V7.06   MAIN                                                                  07/28/2005 20:31:13 PAGE 4   

 180   1          /** 定时器工作寄存器初始化 **/
 181   1              TMOD=0X21;
 182   1              TH1=V_T1;
 183   1          TL1=V_T1;
 184   1          TH0=V_TH0;
 185   1          TL0=V_TL0;
 186   1          /** 串行通信口工作初始化 ,注:本例中虽未使用到串行通信口,但本段程序无妨保留**/
 187   1              SM0=0;           /*SCOM MODE 1 (8BIT UART VARBR)*/
 188   1          SM1=1;
 189   1              SM2=0;
 190   1              REN=1;
 191   1              TI=1;
 192   1              /** 全局变量赋初值 **/
 193   1              clock1s=0;
 194   1              clock1s_flag=0;
 195   1              digi_scaner=1;
 196   1              /** 开定时器,定时器0中断允许 **/
 197   1          TR0=1;
 198   1          TR1=1;
 199   1              ET0=1;
 200   1      
 201   1              *ch = 'c';
 202   1      //      rec = ByteSend_TEST(ch, 0xA0);
 203   1              EA=0; PageSend_TEST(buf);EA=1;
 204   1      /* 主循环,本例中,在T0中断服务程序未被执行的空余时间里,处理机在以下程序中不断循环 */
 205   1              while(1)
 206   1              {
 207   2                      digi[0] = 1;    /*计算千位数*/
 208   2                      digi[1] = 0;    /*计算百位数*/
 209   2                      digi[2] = 1;    /*计算十位数*/
 210   2                      digi[3] = 0;    /*计算个位数*/
 211   2              
 212   2                      Stop_I2c();
 213   2                      
 214   2                      if (clock1s_flag)   /* 检查1秒定时是否到 */
 215   2                      {
 216   3                              clock1s_flag=0;
 217   3                              
 218   3                              ET0=0;
 219   3      //                      DisplayOneChar(0,0,*ch);  //for test
 220   3      //                      DisplayOneChar(5,0,rec);  //for test
 221   3      //                      printf("%c",ch);
 222   3                              ET0=1;
 223   3                              /** 每秒加1的数码管十进制显示计数 **/
 224   3                              if (++test_counter>=10000) test_counter=0;
 225   3                              digi[0] = test_counter/1000;    /*计算千位数*/
 226   3                              digi[1] = (test_counter-digi[0]*1000)/100;      /*计算百位数*/
 227   3                              digi[2] = (test_counter-digi[0]*1000-digi[1]*100)/10;   /*计算十位数*/
 228   3                              digi[3] = (test_counter-digi[0]*1000-digi[1]*100-digi[2]*10);   /*计算个位数*/
 229   3      
 230   3                      }
 231   2              }
 232   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    590    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =      7    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     18       1
   IDATA SIZE       =   ----    ----
C51 COMPILER V7.06   MAIN                                                                  07/28/2005 20:31:13 PAGE 5   

   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 + -