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

📄 rmeter.lst

📁 红外抄表。CPU = LPC921F
💻 LST
📖 第 1 页 / 共 2 页
字号:
 192   5      SendChar(FLA_set[ci].ucCurPluseH);
 193   5      SendChar(FLApluseL[ci][FLA_set[ci].unCurPluseLoff]);
 194   5      */
 195   5      
 196   5                                              if(FLApluseL[ci][FLA_set[ci].unCurPluseLoff] != uctmp /* *pucData */)   //该单元可能坏
 197   5                                              {
 198   6                                                      WriteFlash((uint)&(FLApluseL[ci]+FLA_set[ci].unCurPluseLoff),*pucData);  //重试一遍
 199   6      SendChar('\x11');
 200   6      SendChar('\x11');
 201   6      SendChar('\x11');
 202   6      
 203   6                                                      if(FLApluseL[ci][FLA_set[ci].unCurPluseLoff] != *pucData)       //该单元可能坏
 204   6                                                      {
 205   7                                                              WriteFlash((uint)&(FLApluseL[ci]+FLA_set[ci].unCurPluseLoff+1),*pucData);  //重试一遍
 206   7      
 207   7                                                              untmp=FLA_set[ci].unCurPluseLoff+1;
 208   7                                                              pucData=(uchar *)&untmp;
 209   7                                                              pucAddr=(uchar *)FLA_set[ci].unCurPluseLoff;
 210   7                                                              WriteFlash((uint)pucAddr,*pucData);
 211   7                                                              WriteFlash((uint)(pucAddr+1),*(pucData+1));
 212   7      SendChar('\x22');
 213   7      SendChar('\x22');
 214   7      SendChar('\x22');
 215   7                                                      }
 216   6                                              }   //if 换单元
 217   5      
 218   5                                      }  //if Write
 219   4                              } //if Pluse
 220   3                      }  //for 通道
 221   2                      
 222   2      
 223   2      
 224   2                      if(ucOffset >= PACK_SIZE)
 225   2                      {
 226   3                              punTail=(uint *)(ucRbuf+ucOffset-2);
 227   3                              if(*punTail==PACK_TAIL)
 228   3                              {
 229   4      
 230   4                                      ucPackOff=ucOffset-PACK_SIZE+2;
 231   4                                      switch(*(ucRbuf+ucPackOff))
 232   4                                      {
 233   5                                      case CMD_SET_SN  :
 234   5                                              break;
 235   5                                      case CMD_READ    :
 236   5                                              break;
 237   5                                      case CMD_READ_R  :
 238   5                                              break;
 239   5                                      case CMD_SET_BASE:
 240   5                                              break;
C51 COMPILER V7.00  RMETER                                                                 01/06/2007 20:27:22 PAGE 5   

 241   5                                      case CMD_SET_PLU :
 242   5                                              break;
 243   5                                      case CMD_SET_TYPE:
 244   5                                              break;
 245   5                                      }
 246   4                              }
 247   3                      }
 248   2      
 249   2      /*
 250   2                      if(ucOffset != unPluseCnt[0])
 251   2                      {
 252   2                              unPluseCnt[0]=ucOffset;
 253   2              SendChar(ucOffset);
 254   2      //                      WriteFlash((uint)&FLA_set.unCurPluse,*(pucPluseCnt+1));
 255   2                      }
 256   2      */
 257   2                      if(ucOffset == BUF_SIZE) ucOffset=0;  //清除缓冲区
 258   2      
 259   2      //              if(P1^6 == 0) GotoIsp(); //暂时使用,第三脚接地
 260   2              } 
 261   1      }
 262          
 263          
 264          
 265          //--------------------------------------------------------
 266          //功能:100us级延时
 267          //出口参数:i,延时i x 100us
 268          //--------------------------------------------------------
 269          void delay100us(uchar i)                                //在7.373MHz时,精确延时100us,误差0.5us
 270          {
 271   1              uchar   j;
 272   1              while(i>0)
 273   1              {
 274   2                      for(j=0;j<118;j++);
 275   2                      i--;
 276   2              }
 277   1      }
 278          
 279          
 280          
 281          /*
 282          7.3728MHz
 283          BRGR1:BRGR0                             5FF0H  17F0H  0BF0H 05F0H       02F0H   0170H 00F0H 00B0H  0070H  0030H 
 284          实际波特率                              300     1200  2400      4800    9600    19201 28801 38401  57602  115203
 285          */ 
 286          void UART_Init() 
 287          { 
 288   1        P1M1=0x00; 
 289   1        P1M2=0x00;        //端口初始化 
 290   1       
 291   1        SCON=0x50;        //使能接收 选择串口模式 1 
 292   1        SSTAT=0xE0;        //选择独立的 Tx/Rx 中断 
 293   1        BRGR0=0xF0;        //1200 baud @ 7.373MHz 
 294   1        BRGR1=0x17; 
 295   1      //  BRGR0=0xF0;        //9600 baud @ 7.373MHz 
 296   1      //  BRGR1=0x02; 
 297   1        BRGCON =0x03;          //使能 BRG 
 298   1       
 299   1        ESR=1;       //ESR=Enable Serial Recieve  
 300   1      //  EST=1;       //EST=Enable Serial Transmit 
 301   1        EA=1;      //使能中断 
 302   1      } 
C51 COMPILER V7.00  RMETER                                                                 01/06/2007 20:27:22 PAGE 6   

 303          
 304          
 305          
 306          
 307          void Rcv_ISR()  interrupt  4
 308          { //当接收完一个字节 RI 置 1 进入 Recieve 中断 
 309   1              EA=0; 
 310   1       
 311   1              if(!RI) return;        
 312   1              ucRbuf[ucOffset]=SBUF;        //保存所读取的数据 
 313   1              RI=0;                                            //RI 清 0 以等待下次发送 
 314   1       
 315   1              EA=1; 
 316   1      
 317   1              SendChar(ucRbuf[ucOffset]);//for test only
 318   1      
 319   1              ucOffset++;
 320   1      } 
 321          
 322          void SendChar(unsigned char ucData)
 323          {
 324   1              EA=0; 
 325   1              SBUF=ucData;        //发送数据 
 326   1              while(!TI);        //当 TI 为 1 时 发送完毕 
 327   1              TI=0;       //TI 清 0 准备下一次发送 
 328   1              EA=1; 
 329   1      }
 330          
 331          /*************************************************************************** 
 332          * 名称:     T1_Init() 
 333          * 功能:     定时器 1 初始化,使 T1(P0.7)输出 38KHz,50%占空比的方波, 
 334          *           作为红外线的载波 当使用 6MHz 晶振时  
 335          *           红外线载频 CCLK/(4 (256 定时器重载值) 
 336          *           定时器重装值=256-CCLK/(4*红外线载频)=256-7372800/(4*38000)=0CFH 
 337          ****************************************************************************/ 
 338          void T1_Init() 
 339          { 
 340   1          TH1=0xcf;               //定时器 1 重载值  
 341   1          TAMOD=0; 
 342   1          TMOD=0x20;                  //定时器 1 工作于模式 2 自动重载  
 343   1          AUXR1 |= 0x20;                //置位 ENT1,当 T1 溢出时触发 P0.7 翻转 
 344   1          TR1=1;                      //启动定时器 
 345   1      } 
 346           
 347          
 348          /*
 349          掉电检测中断
 350          */
 351          /*
 352          void pdown() interrupt 5     
 353          { 
 354                  PCONA=0xaf;       //关闭除E PROM外其它所有片内外设的电源 
 355          
 356                  WriteFlash((uint)&FLA_set.unCurPluse,*(pucPluseCnt+1));
 357           
 358                  while(1);    //??   
 359          }
 360          */
 361          
 362          bit  WriteFlash(unsigned int unFlashAddr, unsigned char ucData)
 363          { 
 364   1               
C51 COMPILER V7.00  RMETER                                                                 01/06/2007 20:27:22 PAGE 7   

 365   1              
 366   1              FMCON = LOAD;              //  装载命令,清除页寄存器 
 367   1              FMADRH = (uchar)(unFlashAddr >> 8);          // 
 368   1              FMADRL = (uchar)(unFlashAddr & 0xff);          //  页地址写入地址寄存器 
 369   1              FMDATA = ucData ; 
 370   1      
 371   1          FMCON = EP;              //  擦除&编程页命令 
 372   1      //    Fm_stat = FMCON;          //  读结果状态 
 373   1      
 374   1          if  ( ( FMCON & 0xF ) !=0 )  return 1 ;
 375   1          else return 0 ;
 376   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1467    ----
   CONSTANT SIZE    =    888    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     43      14
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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