rtcconf.lst

来自「菜鸟,详细NRF24E1运用,程序,电路」· LST 代码 · 共 377 行

LST
377
字号
C51 COMPILER V9.00   RTCCONF                                                               11/13/2010 14:44:19 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE RTCCONF
OBJECT MODULE PLACED IN rtcconf.OBJ
COMPILER INVOKED BY: D:\Program Files\KEIL C  V4\C51\BIN\C51.EXE rtcconf.c BROWSE DEBUG OBJECTEXTEND

line level    source

*** WARNING C500 IN LINE 1 OF RTCCONF.C: LICENSE ERROR (R208: RENEW LICENSE ID CODE (LIC))

   1          #include "reg24le1.h"
   2          #include "rtcconf.h"
   3          
   4          //函数
   5          
   6          #define ONESTEP  33333
   7          
   8          static char hour=0,minute=0,second=0;
   9          
  10          void rtcconfig(void)  //rtc config
  11          {
  12   1       RTC2CON&=0xfe;
  13   1       RTC2CMP1=0x7f;
  14   1       RTC2CMP0=0xff;
  15   1       RTC2CON=0x07;//mode 11外部捕捉关闭,使能RTC,触发捕捉
  16   1       //IRCON|=0x20;//int flag
  17   1       IE1|=0x20;
  18   1      }
  19          
  20          void delay(unsigned int dx)
  21          {
  22   1      int dj;
  23   1       for(;dx>0;dx--)
  24   1         for(dj=120;dj>0;dj--)
  25   1           {
  26   2               ;
  27   2               }
  28   1      }
  29          
  30          /*用来读取时间*/
  31          void readtime(unsigned char *h,unsigned char *m,unsigned char *s)
  32          {
  33   1      *h=hour;
  34   1      *m=minute;
  35   1      *s=second;
  36   1      }
  37          /*用来设定时间,type 0,1,2 代表时分秒设置*/
  38          void settime(unsigned char dat,char type)
  39          {
  40   1      if(type==0)
  41   1      {hour=dat; }
  42   1      else if(type==1)
  43   1      {minute=dat;}
  44   1      else if(type==2)
  45   1      {second=dat;}
  46   1      else puts("type error!");
  47   1      send('\n');
  48   1      if((hour>=24||hour<0)||(minute>=60||minute<0)||(second>=60||second<0))
  49   1      puts("time set wrong,please set again use instructions!");
  50   1      send('\n');
  51   1      }
  52          //IO口的初始化
  53          void ioconfig()
  54          {
C51 COMPILER V9.00   RTCCONF                                                               11/13/2010 14:44:19 PAGE 2   

  55   1       P1DIR&=0XFE; //初始化为输出
  56   1       P10=0;//初始化输出为0
  57   1       //led
  58   1      }
  59          
  60          //定时器演示
  61          void timer0()
  62          {
  63   1      TMOD=0x01;
  64   1      TH0=(65536-ONESTEP)/256;
  65   1      TL0=(65536-ONESTEP)%256;
  66   1      ET0=1;
  67   1      TR0=1;
  68   1      }
  69          
  70          
  71          /*串口初始化*/
  72          void uart_init()
  73          {
  74   1          CLKCTRL = 0x28;                         // Clock sourced by XCOSC16M        
  75   1              CLKLFCTRL = 0x01; 
  76   1      
  77   1              P0DIR &= 0xF7;                          // P03 (TxD) is output
  78   1              P0DIR |= 0x10;                          // P04 (RxD) is input 
  79   1              P0|=0x18;        
  80   1                      
  81   1              S0CON = 0x50;  
  82   1              PCON |= 0x80;                           // SMOD = 1
  83   1              WDCON |= 0x80;                          // Select internal baud rate generator 
  84   1              
  85   1              S0RELL = 0xFB;  
  86   1              S0RELL = 0xF3;              // BAUD_38K4 
  87   1              ES0=1;   
  88   1      }
  89          //发送一个字节
  90          void send(char ch)
  91          {
  92   1      S0BUF=ch;
  93   1      while(!TI0);
  94   1      TI0=0;
  95   1      }
  96          //打印一个字符串
  97          void puts(char *str)
  98          {
  99   1      while(*str!='\0')
 100   1      {
 101   2      send(*str++);
 102   2      }
 103   1        }
 104          
 105          //rtc enable
 106          void RTC_En()
 107          {
 108   1      TR0=1;//使能定时0
 109   1      }
 110          //rtc disable
 111          void RTC_Dis()
 112          {
 113   1      TR0=0;//关闭定时器0
 114   1      }
 115          
 116          /*
C51 COMPILER V9.00   RTCCONF                                                               11/13/2010 14:44:19 PAGE 3   

 117          指令的格式为$seth**#,$setm**#,$sets**#,用于设置时分秒,设置$stop用于暂停时间,$runc用于走时
 118          */
 119          
 120          /*指令解码*/
 121          void decode()
 122          {
 123   1      char buf;
 124   1      static char insf=0;
 125   1      unsigned char buffer[7];
 126   1      static char num=0;
 127   1      static char insh=0;
 128   1      static char dat=0,count=0;
 129   1      static char rtcstop=0,rtcgo=0;
 130   1      static char mf=0,hf=0,sf=0;
 131   1      static char disf=0;//显示指令的标志
 132   1      if(RI0)
 133   1      {
 134   2      //LED=!LED;     //DEBUG
 135   2      buf=S0BUF;
 136   2      RI0=0;
 137   2      if(buf=='$')
 138   2      {insf=1;
 139   3       num=0;
 140   3      }
 141   2      if(insf)
 142   2      {
 143   3      if(buf!='$')
 144   3      buffer[num++]=buf;
 145   3      }
 146   2      if(num==7)
 147   2      {
 148   3      insf=0;
 149   3       num=0;
 150   3      //识别设置指令
 151   3      if((buffer[0]=='s'||buffer[0]=='S')&&(buffer[1]=='e'||buffer[1]=='E')&&(buffer[2]=='t'||buffer[2]=='T'))
 152   3      {insh=1;   }
 153   3      //解析暂停指令
 154   3      else if((buffer[0]=='s'||buffer[0]=='S')&&(buffer[1]=='t'||buffer[1]=='T')&&(buffer[2]=='o'||buffer[2]=='O
             -')&&(buffer[3]=='p'||buffer[3]=='P'))
 155   3      {rtcstop=1;
 156   4       rtcgo=0;
 157   4       LED=!LED;
 158   4      }
 159   3      //解析启动指令
 160   3      else if((buffer[0]=='r'||buffer[0]=='R')&&(buffer[1]=='u'||buffer[1]=='U')&&(buffer[2]=='n'||buffer[2]=='N
             -')&&(buffer[3]=='c'||buffer[3]=='C'))
 161   3      {rtcgo=1;
 162   4       rtcstop=0;
 163   4       LED=!LED;
 164   4      }
 165   3      else if((buffer[0]=='s'||buffer[0]=='S')&&(buffer[1]=='h'||buffer[1]=='H')&&(buffer[2]=='o'||buffer[2]=='O
             -')&&(buffer[3]=='w'||buffer[3]=='W'))
 166   3      {
 167   4      disf=1;//显示指令启用
 168   4      }
 169   3      
 170   3      //解析时间设置的指令
 171   3      if(insh)
 172   3         {
 173   4         insh=0;
 174   4        switch(buffer[3])
 175   4            {
C51 COMPILER V9.00   RTCCONF                                                               11/13/2010 14:44:19 PAGE 4   

 176   5                case 'h':
 177   5                case 'H': hf=1;count=0;puts("hour set!");break;
 178   5                case 'm':
 179   5                case 'M': mf=1;count=0;puts("minute set!");break;       
 180   5                case 's':
 181   5                case 'S': sf=1;count=0;puts("second set!");break;
 182   5                default:{hf=mf=sf=0;}puts("this instruction is undefined!");break;              
 183   5                }
 184   4      
 185   4         }
 186   3      
 187   3      if(rtcstop)
 188   3      { RTC_Dis();//暂停RTC模块
 189   4        puts("rtc stop working...");
 190   4        send('\n');
 191   4        rtcgo=0;
 192   4      }
 193   3      
 194   3      if(rtcgo)
 195   3      {RTC_En(); //开启RTC模块
 196   4       puts("rtc start working...");
 197   4       send('\n');
 198   4       rtcstop=0;
 199   4      }
 200   3      if(disf)
 201   3      {
 202   4      disf=0;    //消除显示指令的标志
 203   4      showtime();//执行显示函数
 204   4      }
 205   3      
 206   3      if(hf)
 207   3      {
 208   4      dat=(buffer[4]-'0')*10+(buffer[5]-'0');
 209   4      if(buffer[6]=='#')
 210   4      {
 211   5      //写入时间
 212   5      if(rtcstop)
 213   5      {
 214   6       settime(dat,0);
 215   6       //debug
 216   6      }
 217   5      else puts("you don't stop time,please stop it use $stop!\n");
 218   5      dat=0;
 219   5      hf=0;
 220   5      }
 221   4      }
 222   3      
 223   3      else if(mf)
 224   3      {
 225   4      dat=(buffer[4]-'0')*10+(buffer[5]-'0');
 226   4      if(buffer[6]=='#')
 227   4      {
 228   5      //写入时间
 229   5      if(rtcstop)
 230   5      settime(dat,1);
 231   5      else puts("you don't stop time,please stop it use $stop!\n");
 232   5      dat=0;
 233   5      mf=0;
 234   5      }
 235   4      
 236   4      }
 237   3      else if(sf)
C51 COMPILER V9.00   RTCCONF                                                               11/13/2010 14:44:19 PAGE 5   

 238   3        {
 239   4      dat=(buffer[4]-'0')*10+(buffer[5]-'0');
 240   4      if(buffer[6]=='#')
 241   4          {
 242   5      //写入时间
 243   5      if(rtcstop==1)
 244   5      settime(dat,2);
 245   5      else puts("you don't stop time,please stop it use $stop!\n");
 246   5      dat=0;
 247   5      sf=0;
 248   5        }
 249   4      
 250   4       }
 251   3      }
 252   2      
 253   2      
 254   2      
 255   2      }
 256   1      
 257   1      
 258   1      }
 259          
 260          void timecount()
 261          {
 262   1      second++;
 263   1      if(second>59)
 264   1      {second=0;
 265   2       minute++;
 266   2       if(minute>59)
 267   2       {
 268   3       minute=0;
 269   3       hour++;
 270   3       if(hour>23)
 271   3       hour=0;
 272   3       }
 273   2      }
 274   1      
 275   1      }
 276          
 277          void showtime()
 278          {
 279   1      puts("time==");
 280   1      send(' ');
 281   1      send((hour/10)+'0');
 282   1      send((hour%10)+'0');
 283   1      send(' ');
 284   1      send(':');
 285   1      send(' ');
 286   1      send((minute/10)+'0');
 287   1      send((minute%10)+'0');
 288   1      send(' ');
 289   1      send(':');
 290   1      send(' ');
 291   1      send((second/10)+'0');
 292   1      send((second%10)+'0');
 293   1      send('\n');
 294   1      }
 295          
 296          
 297          
 298          void uart_service() interrupt 4 //串口中断程序
 299          {
C51 COMPILER V9.00   RTCCONF                                                               11/13/2010 14:44:19 PAGE 6   

 300   1      if(TI0)
 301   1      {
 302   2         TI0=0;
 303   2      }
 304   1      else{
 305   2      //如果接受到数据
 306   2      
 307   2       decode();
 308   2       //timecount();
 309   2          }
 310   1       LED=!LED;//debug
 311   1      }       
 312          
 313          void tick() interrupt  INTERRUPT_TF0
 314          {
 315   1      static char num=0;
 316   1      TR0=0;
 317   1      TH0=(65536-ONESTEP)/256;
 318   1      TL0=(65536-ONESTEP)%256;
 319   1      if(num==40)
 320   1      {
 321   2      num=0;
 322   2      timecount();
 323   2      showtime();
 324   2      LED=!LED;
 325   2      }
 326   1      num++;
 327   1      TR0=1;
 328   1      }
 329          
 330          
 331          
 332          
 333          
 334          
 335          
 336          
 337          
 338          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1133    ----
   CONSTANT SIZE    =    222    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     15      19
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?