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

📄 main.lst

📁 keil c程序,用于AT89S52单片机.使用了T2计数器,有频率计的功能
💻 LST
字号:
C51 COMPILER V8.08   MAIN                                                                  09/22/2008 21:56:19 PAGE 1   


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

line level    source

   1          #include<reg52.h>
   2          #include<math.h>
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          sfr T2MOD=0X0C9; 
   6          
   7          sbit backlightkey=P2^7 ;
   8          sbit lcdrs=P1^0;
   9          sbit lcdrw=P1^1;
  10          sbit lcde=P1^2;
  11          sbit lcdbusy=P0^7;
  12          
  13          sbit key1=P2^1;
  14          sbit key2=P2^2;
  15          sbit key3=P2^3;
  16          
  17          
  18          static uchar timecount=0,timechange=0,count=0;
  19          static uchar eorrflag=0;
  20          uint counth=0,countl=0;
  21          char rbuff[10],scount=0;//串口接收缓冲区和缓冲区已存数据个数
  22          
  23          void lcdbusywait()
  24          {
  25   1       P0=0x0ff;
  26   1       lcdrs=0;
  27   1       lcdrw=1;
  28   1       lcde=0;
  29   1       ;
  30   1       lcde=1;
  31   1       while(lcdbusy);
  32   1       lcde=1;
  33   1       }
  34          
  35          void waitcmd()
  36          {
  37   1       lcdrs=0;// clr p1.0
  38   1       lcdrw=0;//clr p1.1
  39   1       lcde=0;//clr p1.2
  40   1       lcdbusywait();//acall busy
  41   1       lcde=1;//setb p1.2
  42   1      }
  43          
  44          void lcdinit()
  45          {
  46   1       P0=0X01;
  47   1       waitcmd();
  48   1       P0=0X38;
  49   1       waitcmd();
  50   1       P0=0X0C;
  51   1       waitcmd();
  52   1       P0=0X06;
  53   1       waitcmd();
  54   1       P0=0X80;
  55   1       waitcmd();     
C51 COMPILER V8.08   MAIN                                                                  09/22/2008 21:56:19 PAGE 2   

  56   1      }
  57          
  58          void write(uchar *str)
  59          {
  60   1       do{
  61   2       P0=*str;
  62   2       lcdrs=1;
  63   2       lcdrw=0;
  64   2       lcde=0;
  65   2       lcdbusywait();
  66   2       lcde=1;
  67   2       }while(*(++str)!='\0');
  68   1      
  69   1      }
  70          
  71          void writenum(uint num,uchar bitnum)
  72          {uchar str[8];
  73   1       str[bitnum]='\0';
  74   1       do
  75   1       {
  76   2       str[bitnum-1]=num%10+48;
  77   2       num/=10;
  78   2       }while(bitnum--);
  79   1       write(str); 
  80   1      }
  81          
  82          void ledbacklight(bit on) //on=1表示开灯,on=0表示关灯
  83          {
  84   1       backlightkey=~on;
  85   1      }
  86          
  87          void cursestatus(uchar statusx,uchar statusy)
  88          {
  89   1       if(statusx>16||statusx<1||statusy<1||statusy>2)
  90   1       return;
  91   1       else
  92   1       {
  93   2       if(statusy==1)
  94   2       {
  95   3       P0=0x80+statusx-1;
  96   3       waitcmd();
  97   3       }
  98   2       else
  99   2       {P0=0x0c0+statusx-1;
 100   3        waitcmd();
 101   3        }
 102   2       } 
 103   1      }
 104          
 105          void delay()
 106          {uchar i,j;
 107   1       for(i=0xff;i>0;i--)
 108   1       for(j=0xff;j>0;j--)
 109   1       ;
 110   1       }
 111          
 112           void cleardisplay()
 113           {
 114   1       P0=1;
 115   1       waitcmd();
 116   1       }
 117          
C51 COMPILER V8.08   MAIN                                                                  09/22/2008 21:56:19 PAGE 3   

 118          void sentbyte(uchar var)
 119          {ES=0;
 120   1       SBUF=var;
 121   1       while(TI==0);TI=0;
 122   1       ES=1;
 123   1       }
 124          
 125          void serial() interrupt 4         //串口中断服务程序
 126          {
 127   1         if(TI)
 128   1              {
 129   2               TI=0;
 130   2               }
 131   1      
 132   1              if (RI) {
 133   2                      RI = 0;         
 134   2                      rbuff[scount] = SBUF;
 135   2                      SBUF=rbuff[scount];
 136   2                      scount++;
 137   2                      if(scount==10)scount=0;
 138   2                      }
 139   1      }
 140          
 141          void counter()interrupt 3 using 2
 142          {
 143   1      TL1=0;
 144   1      TH1=0;
 145   1      eorrflag=1;
 146   1      TR1=0;
 147   1      }
 148          
 149          void timer()interrupt 1 using 3
 150          {
 151   1      TL0=0X0AF;
 152   1      TH0=0X03C;
 153   1      TR1=0;
 154   1      count++;
 155   1      if(count==2)
 156   1      {counth=TH1;
 157   2      countl=TL1;
 158   2      
 159   2      timechange=1;
 160   2      TL1=0;
 161   2      TH1=0;
 162   2      TR1=1;
 163   2      timecount++;
 164   2      count=0;
 165   2      }
 166   1      
 167   1      }
 168          
 169          void main()
 170          {
 171   1      uint i=30;
 172   1      
 173   1      //T0定时器与T1计数器开中断
 174   1       IT0=0;
 175   1       PT0=1;
 176   1       PX0=0;
 177   1       EA=1;
 178   1       ET0=1;
 179   1       EX0=1;
C51 COMPILER V8.08   MAIN                                                                  09/22/2008 21:56:19 PAGE 4   

 180   1       ET1=1;
 181   1       TMOD=0X51;
 182   1      
 183   1      lcdinit();
 184   1      ledbacklight(1);
 185   1      write("hello,world!");
 186   1      for(;i>0;i--)
 187   1      delay();
 188   1      
 189   1      i=90;
 190   1      cleardisplay();
 191   1      cursestatus(1,1);
 192   1      write("i am twolf");
 193   1      cursestatus(1,2);
 194   1      writenum(i,3);
 195   1      
 196   1      //定时器0初始化并开启,定时为0.5S
 197   1      TL0=0X0AF;
 198   1      TH0=0X03C;
 199   1      TR0=1;
 200   1      //计数器1初始化并开启
 201   1      TL1=0;
 202   1      TH1=0;
 203   1      TR1=1;
 204   1      
 205   1      SCON = 0x50;
 206   1      TCLK=1;
 207   1      RCLK=1;               
 208   1      T2MOD = 0X01;            
 209   1      PCON = 0x80 ;                
 210   1      RCAP2H = 0xff;                                  
 211   1      RCAP2L = 0xdc; 
 212   1      TH2=0XFF;
 213   1      TL2=0XDC;             
 214   1      TR2   = 1;                 
 215   1      ES=1;
 216   1      
 217   1      while(1)
 218   1      {
 219   2              if(eorrflag)write("eorr!");
 220   2              if(timechange)
 221   2                      {
 222   3                      sentbyte(timecount);
 223   3                      timechange=0;
 224   3                      cursestatus(1,2);
 225   3                      countl=countl+counth*256;
 226   3                      writenum(countl,6);
 227   3                      write("  T:");
 228   3                      writenum((uint)timecount,3);
 229   3                      }
 230   2              else continue;
 231   2      }
 232   1      }
 233           


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    579    ----
   CONSTANT SIZE    =     35    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     19      15
C51 COMPILER V8.08   MAIN                                                                  09/22/2008 21:56:19 PAGE 5   

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