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

📄 我的定时程序.lst

📁 这是一个单片机的定时程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 159   1            uchar uchCRCLo=0xFF;
 160   1            uchar uIndex;
 161   1            while(usDataLen--){
 162   2                   uIndex=uchCRCHi^*puchMsg++;
 163   2                   uchCRCHi=uchCRCLo^auchCRCHi[uIndex];
 164   2                   uchCRCLo=auchCRCLo[uIndex];
 165   2                   }
 166   1            return (uchCRCHi<<8|uchCRCLo);
 167   1      }
 168          
 169          /**********处理通信命令,并准备发送数据*********/
 170          void prepare_data(void)
 171          {
C51 COMPILER V6.12  ________砡序                                                           10/17/2005 22:38:16 PAGE 4   

 172   1           switch(sbufRam[1]){
 173   2                 case 0x01:fun_01();
 174   2                   break;
 175   2                 case 0x02:fun_02();
 176   2                   break;
 177   2                 case 0x03:fun_03();
 178   2                   break;
 179   2                 case 0x04:fun_04();
 180   2                   break;
 181   2                 case 0x05:fun_05();
 182   2                   break;
 183   2                 case 0x06:fun_06();
 184   2                   break;
 185   2                 case 0x70:fun_70();
 186   2                   break;
 187   2                 case 0x75:fun_75();
 188   2                   break;
 189   2                 default:
 190   2                      return;
 191   2                 break;
 192   2                 }
 193   1      }
 194          
 195          
 196          /**********串口数据发送程序*******/
 197          
 198          void tran_serisl_data(sbutRam)
 199          {uchar *sbufRam;
 200   1      uchar i;
 201   1      uint tran_crc16;
 202   1      uchar tran_leng;
 203   1                tran_leng=sbufRam[2]+5;
 204   1                tran_crc16=CRC16(sbufRam,tran_leng-2);
 205   1                sbufRam[tran_leng-1]=tran_crc16&0x00ff;/*CRC16 低字节*/
 206   1                sbufRam[tran_leng-2]=tran_crc16>>8;    /*CRC16 高字节*/
 207   1           for(i=0;i<sbufRam[2]+5;i++){
 208   2                  SBUF=sbufRam[i];
 209   2                       while(TI==0);TI=0;
 210   2           }
 211   1      }
 212          
 213          /**********串口初始化命令*********/
 214          void initComm(void){
 215   1            TMOD=0X22;
 216   1            TL1=0XFD;
 217   1            TH1=0XFD;
 218   1            SCON=0X50;
 219   1            PCON=0X80;
 220   1            TR1=1;
 221   1            IE=0X90;
 222   1            EA=1;
 223   1      }
 224          
 225          
 226          
 227          /*查询接受数据是否有效*/
 228          byte readRi(uint x){
 229   1            while(RI==0){
 230   2                   if(x==0)return(0);
 231   2                x--;
 232   2            }
 233   1            RI=0;
C51 COMPILER V6.12  ________砡序                                                           10/17/2005 22:38:16 PAGE 5   

 234   1            return(1);
 235   1      }
 236          
 237          
 238          /**********串口数据接收程序*******/
 239          uchar rec_serial_data(sbufRam)
 240          uchar *sbufRam; {                     /*接受数据存放地址*/
 241   1      uchar i;
 242   1      uchar rec_leng;
 243   1      uint rec_crc16;
 244   1      uchar crc16L,crc16H;
 245   1              sbufRam[0]=SBUF;RI=0;
 246   1           for(i=1;i<3;i++){
 247   2                    if(readRi(888)==1) sbufRam[i]=SBUF;
 248   2           else return(1);                   /*数据接收超时,退出*/
 249   2           }
 250   1           rec_leng=5+sbufRam[2];
 251   1           for(i=3;i<rec_leng;i++){
 252   2                    if(readRi(888)==1) sbufRam[i]=SBUF;
 253   2           else return(1);                   /*数据接收超时,退出*/
 254   2           }
 255   1           rec_crc16=CRC16(sbufRam,rec_leng-2);
 256   1           if(rec_crc16!=0){
 257   2                crc16L=rec_crc16&0x00ff;
 258   2                crc16H=rec_crc16>>8;
 259   2           }
 260   1           else{
 261   2               crc16L=0;
 262   2               crc16H=0;
 263   2           }
 264   1               if(crc16L!=sbufRam[rec_leng-2])return(0x80||sbufRam[1]);/*校验错,请求重发*/
 265   1               if(crc16H!=sbufRam[rec_leng-1])return(0x80||sbufRam[1]);/*校验错,请求重发*/
 266   1           return(0);
 267   1      }
 268          
 269          /*********串行中断0服务子程序*******/
 270          void Com_Int(void) interrupt 4
 271          {
 272   1      uchar return_sign;
 273   1          EA=0;                             /*关中断*/
 274   1          return_sign=rec_serial_data(sbufRam);/*数据校验结果,0为数据完整接受,1反之*/
 275   1          if (return_sign==0){               /*如果从主机接受数据有效*/
 276   2                prepare_data();              /*处理通信口命令并准备发送的数据*/
 277   2                tran_serial_data(sbufRam);   /*发送数据到主机*/
 278   2                }
 279   1          else if (return_sign>=0x80)tran_serial_data(sbufRam);/*接受数据包校验错误,请求重发*/
 280   1          initComm();                        /*初始化串口*/
 281   1      }
 282          
 283          
 284          /****读输入端口并写入输入映像寄存器*****/
 285          void read_inport(uchar r_times){
 286   1          uchar rRead;
 287   1          rRead=c52in;
 288   1          do{
 289   2             if(rRead!=c52in)return;
 290   2             r_times--;
 291   2             _dl50us();_dl50us();
 292   2            }while(r_times>0);
 293   1            IB0=rRead;
 294   1      }
 295          
C51 COMPILER V6.12  ________砡序                                                           10/17/2005 22:38:16 PAGE 6   

 296          /*****将输出映像寄存器数据写入输出端口*****/
 297          void write_outport(void){
 298   1          c52out=QB0;
 299   1      }
 300          
 301          /**********主程序**************/
 302          void main(void){
 303   1         #define RTIMES 5                    /*定义读次数*/
 304   1         void (*c52_user)();
 305   1         c52_user=0x2000;                    /*用户程序入口地址*/
*** WARNING C196 IN LINE 305 OF .\我的定时程序.C: mspace probably invalid
 306   1         initComm();                         /*串口初始化*/
 307   1         do{                                 /*循环执行c52的扫描*/
 308   2             read_inport(RTIMES);            /*读输入端口并写入映像寄存器*/
 309   2             if (c52_run){                   /*c52_run=1则执行用户程序*/
 310   3                  c52_user();                /*跳到用户程序入口地址执行用户程序*/
 311   3             		 }
 312   2          write_outport();
 313   2           }while(1);
 314   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    805    ----
   CONSTANT SIZE    =    512    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      25
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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