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

📄 main.lst

📁 此源码为商用的电力抄表系统的从机端源程序。通过电力载波模块
💻 LST
📖 第 1 页 / 共 2 页
字号:
 255   2              }setup_t4(40, timeout_t4);delay_tx = 1;                 
 256   1      }
 257           /*=============================================================================*/
 258          /*                                                 数据发送到PC                                                                    */
 259          /*=============================================================================*/
 260          
 261          void amr_send_frame(uchar ibuf[])
 262          {
 263   1       // idata uchar o_frame[26];
 264   1        uchar  i;
 265   1        uchar  En;
 266   1      
 267   1             En = ibuf[AMR_OS_L] + 11;  //串口返回    
 268   1      
 269   1              clr_wdt();
 270   1          // preamble
 271   1          for (i = 0; i < 5; i++) amr_frame[i] = mcu_pc[i];   //放入0xFE      68
 272   1           clr_wdt();  
 273   1              for (i = 0; i < ibuf[AMR_OS_L]+6; i++)amr_frame[5+i] = ibuf[i];  //从C开始存放          
 274   1      
 275   1          amr_frame[En] = 0x16;  //多补16h    
 276   1          uart_sendblock(amr_frame, En+1); //串口送至PC
 277   1          clr_wdt(); 
 278   1      }
 279          /*=============================================================================* /
 280                                                             信息返回
 281          /*=============================================================================*/
 282          
 283          void return_inf(uchar frame,uchar inf_buf[],uchar dat)
 284          {       
 285   1          uchar con;
 286   1          uchar buf[18];
 287   1              clr_wdt();
 288   1              buf[0] = frame;
 289   1          buf[1] = ADDR[0];
 290   1              buf[2] = ADDR[1];
 291   1              buf[3] = ADDR[2];
 292   1              buf[4] = ADDR[3];
 293   1          buf[AMR_OS_L] = dat;
 294   1          for(con = 0;con < buf[AMR_OS_L];con ++)     
 295   1                  buf[6+con] = inf_buf[con];  //放入状态信息
 296   1      
 297   1              amr_send_frame(buf);//串口返回PC
 298   1      
 299   1      }
C51 COMPILER V7.09   MAIN                                                                  01/12/2007 09:29:48 PAGE 6   

 300          /*=============================================================================* /
 301                                                          串口发到2200C
 302          /*=============================================================================*/
 303          
 304          void uart_tx_mode(uchar i_buf[])
 305          {  
 306   1          uchar i,tom;
 307   1              uchar no_all = 0;
 308   1              uchar o_buf[18];
 309   1           tom = i_buf[AMR_OS_L] + 6;
 310   1           for (i = 0; i < tom; i++) //C, A,A,A,A,L, DATA
 311   1                 o_buf[i]      =      i_buf[i];//放入DATA数据
 312   1      
 313   1               if(tom < 18){            //不够18个数据后补0
 314   2                 no_all = 18 - tom;
 315   2                 for (i = 0; i < no_all; i++)
 316   2                 o_buf[tom+i]  =      0x00; 
 317   2               }
 318   1      
 319   1               if(i_buf[AMR_OS_L] > 18)i_buf[AMR_OS_L] = 18;//超过18个数只认18个数
 320   1      
 321   1      
 322   1               write_txbuffer(o_buf); //写入2200c
 323   1               sync_sendchar(0x7e);
 324   1      }
 325          /*=============================================================================* /
 326                                                          接收数据重组
 327          /*=============================================================================*/
 328          
 329          void rx_return(bit y,uchar R_data[])
 330          {
 331   1       uchar i;
 332   1       uchar o_buf[26];
 333   1      
 334   1         for (i = 0; i < 18; i++)
 335   1                 o_buf[i]      =      R_data[i];
 336   1         if(y)
 337   1               o_buf[0] = 0x40 + 0x04; //本地上传收到的CRC正确数据  B7B6 =bit-01,B5~B0 = 0x04h
 338   1         else
 339   1           o_buf[0] = 0x40 + 0x05; //本地上传收到的CRC错误数据  B7B6 =bit-01,B5~B0 = 0x05h
 340   1      
 341   1         amr_send_frame(o_buf);
 342   1      }
 343          
 344          /*=============================================================================*/
 345          void adss_crc(uchar buf[])
 346          {
 347   1        //0x99 为公共广播地址
 348   1       if((buf[1] == ADDR[0])&&(buf[2] == ADDR[1])&&(buf[3] == ADDR[2])&&(buf[4] == ADDR[3]))
 349   1          adss_ok = 1;  //本地址
 350   1       else adss_ok = 0;
 351   1      
 352   1       if( (buf[1] == 0x99)&&(buf[2] == 0x99)&&(buf[3] == 0x99)&&(buf[4] == 0x99))
 353   1          public_addr = 1;  //公用地址
 354   1       else public_addr = 0;
 355   1       
 356   1      }
 357          /*=============================================================================*/
 358          /*=============================================================================*/
 359          
 360          void write_addr (bit y,uchar frame[])
 361          {
C51 COMPILER V7.09   MAIN                                                                  01/12/2007 09:29:48 PAGE 7   

 362   1        //frame[] = C(B7B6 01,B5~B0 0x3f), x,x,x,x,L(1), (x+x+x+x)地址校验和,
 363   1      
 364   1        uchar add_buf[4];
 365   1        uchar ame;
 366   1      
 367   1        if(frame[AMR_OS_L] == 0x01)
 368   1        if((frame[1] + frame[2] + frame[3] + frame[4]) ==  frame[6]){
 369   2         for(ame = 0;ame < 4; ame ++)
 370   2         add_buf[ame] = frame[1+ame];
 371   2         Rxok   = 0; //完成任务亮!
 372   2         while(~switd){
 373   3         if(~switd){  //开关触动才可写入FLASH
 374   4                 EA = 0; 
 375   4                 FLASH_WriteNByte((int code *)ADDR, add_buf, 6);
 376   4                 EA = 1;
 377   4             
 378   4          } }
 379   2         add_buf[0] = frame[6];
 380   2        if(y)
 381   2         Remote_Replies(frame);//回复
 382   2         else return_inf(0x3f,add_buf,1);
 383   2        }
 384   1      }
 385          
 386          
 387          /*=============================================================================* /
 388                                  数据接收处理
 389          /*=============================================================================*/
 390          void processing_unit(uchar frame[])
 391          {
 392   1           uchar top;
 393   1         
 394   1           uchar pro_buf[7];
 395   1           if(((frame[AMR_OS_C] & 0xc0)>>6)== 0x02) //B7B6  控制字
 396   1           switch(frame[AMR_OS_C] & 0x3f){//B5~B0 命令字
 397   2            
 398   2             case 0x01:{reply = 1;}break;
 399   2      
 400   2             case 0x02:{reply = 0;}break;
 401   2       
 402   2             case 0x3f:{  // 远程改地址命令
 403   3               if(public_addr){   //公共地址正确
 404   4                if(frame[11] == 0x16){//结束语
 405   5                for(top = 1;top < 5; top ++) //地址数据导入
 406   5                 pro_buf[top] = frame[5+top];  
 407   5                 pro_buf[0] = frame[0];
 408   5                 pro_buf[AMR_OS_L] = 0x01;//
 409   5                 pro_buf[6] = frame[10];  //地址校验和
 410   5                 write_addr (1,pro_buf);
 411   5                }//pro_buf[] = C, x,x,x,x,L(1), (x+x+x+x)地址校验和,0x16
 412   4               }}break;
 413   2           }
 414   1      }
 415          
 416          /*=============================================================================*/
 417          /*=============================================================================* /
 418          
 419          
 420          
 421          /*=============================================================================*/
 422          /*=============================================================================* /
 423          
C51 COMPILER V7.09   MAIN                                                                  01/12/2007 09:29:48 PAGE 8   

 424          /*=============================================================================*/
 425          /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
 426          /*=============================================================================* /
 427              家电智能控制统一程序(根据UPLM2200 API协议设定)
 428          软件说明:
 429          
 430             1.更新的版本,支持电力线和PC通讯协议,
 431             2.可读写FLASH作为地址掉电保存,写时通过串口发地址数据,掉电后地址在片内保存.
 432             3.当写FLASH时,RXOK会闪动,之后返回一帧数据.表示已写入FLASH,
 433             4.该程序设有看门狗,添加新组件时注意时间差.
 434             5.如无接表时,可返回一帧仿真数据< *\   /* >
 435             6.该串口的波特率为9600,偶校验,      -
 436             7.可通过PC或电力线上改变速率寄存器的值,并写入 FLASH  ~
 437             
 438          更新项目表:
 439          ------------------------------------------------------------------------------------------
 440          |更新人   |   模块组件       |       更新时间   |    更新内容
 441          --------------------------------------------------------------------------------------
 442          | liangfq |     全部         | 2006-02-17       |    程序设计第一版
 443          |         |                  |                  |  
 444          --------------------------------------------------------------------------------------
 445          | liangfq |           |  | 
 446          |         |                  |                  |
 447          --------------------------------------------------------------------------------------
 448          | liangfq |            |  | 
 449          |         |                  |                  |
 450          --------------------------------------------------------------------------------------
 451          | liangfq |                  |                  |
 452          |         |                  |                  |
 453          --------------------------------------------------------------------------------------
 454          | liangfq |                  |                  |
 455          |         |                  |                  |
 456          --------------------------------------------------------------------------------------
 457          | liangfq |                  |                  |
 458          |         |                  |                  |
 459          --------------------------------------------------------------------------------------
 460          | liangfq |                  |                  |
 461          |         |                  |                  |
 462          --------------------------------------------------------------------------------------
 463          | liangfq |                  |                  |
 464          |         |                  |                  |
 465          --------------------------------------------------------------------------------------
 466          | liangfq |                  |                  |
 467          |         |                  |                  |
 468          --------------------------------------------------------------------------------------
 469          
 470          !!!!!!重复特别注意:写模块的地址必须从串口写入才有效!!!!!                  
 471          
 472          !!!!!!重复特别注意:写模块的地址必须从串口写入才有效!!!!!
 473                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 474          !!!!!!重复特别注意:写模块的地址必须从串口写入才有效!!!!!
 475                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 476          !!!!!!重复特别注意:写模块的地址必须从串口写入才有效!!!!!
 477                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 478          !!!!!!重复特别注意:写模块的地址必须从串口写入才有效!!!!!
 479                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 480          
 481          /*$$$$$$$$$$$$$$$$$$$$$$$$$$$$<<<<<软件说明>>>>>$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*/
 482          
 483          
 484          
 485          
C51 COMPILER V7.09   MAIN                                                                  01/12/2007 09:29:48 PAGE 9   

 486          
 487          
 488          
 489          
 490                   
 491          
 492          
 493          
 494          
 495          
 496          
 497          
 498          
 499          
 500          
 501          
 502          
 503          
 504          
 505          
 506          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1358    ----
   CONSTANT SIZE    =     28    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     19     100
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      8       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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