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

📄 main.lst

📁 C51模拟串口及C语言与汇编语言混合使用技术 有很高的参考价值
💻 LST
📖 第 1 页 / 共 2 页
字号:
 144   1              {
 145   2                    SndUart0[0]   = Uart1ToUart0Data[0];  //数据长度
 146   2                        SndUart0[1]   = Uart1ToUart0Data[1];  //命令
 147   2                        SndUart0[2]   = Uart1ToUart0Data[2];  //本机地址
 148   2                        SndUart0[3]   = Uart1ToUart0Data[3];  //室内机地址
 149   2                        SndUart0[4]   = Uart1ToUart0Data[4];  //数据
 150   2      
 151   2                        SndUart0[SndUart0[0]] = 0xCC;
 152   2                        tmpdata                           = 0;
 153   2                         for(;tmpdata < SndUart0[0];tmpdata++)
 154   2                               SndUart0[SndUart0[0]]^=SndUart0[tmpdata];
 155   2      
 156   2                        com0_bAck     = Uart1ToUart0Data[5];                                  //应答
 157   2                        bUart1ToUart0 = false;
 158   2                        bUart0ReSnd   = true;                                 //如果没有反回,要重发
 159   2                        Uart0Nums     = 0;
 160   2              } else if(!bUart0Ask)
 161   1              {
 162   2                        rec_cmd0=0x00;       //清除收到的命令
 163   2                        uart0_status = 0x02;   //状态复位
 164   2                        rec_bHead0   = 0x00;   //从新接收数据
 165   2                        bUart0RecSnd = bRecieve;
 166   2                        bUart0Ask        = true;
 167   2                        Uart0_Over   = 0;
 168   2                      return;
 169   2              } else if(bUart0ReSnd)        //重发
 170   1              {
 171   2                       if(!Uart0Nums)               //第二次重发
 172   2                          Uart0Nums = 1;
 173   2                       else
 174   2                          bUart0ReSnd = false;  //第三次重发
 175   2              }else
 176   1              {
 177   2      
 178   2                                        SndUart0[0]   = 0x03;   //数据长度
 179   2                                    SndUart0[1]   = 0xA1;   //命令子节
C51 COMPILER V7.50   MAIN                                                                  12/19/2008 09:53:31 PAGE 4   

 180   2                                        SndUart0[2]   = LAddr;  //本机地址
 181   2                                        SndUart0[3]   = 0xCC^SndUart0[0]^SndUart0[1]^SndUart0[2];     
 182   2                                        com0_bAck     = false;  //不要应答
 183   2      
 184   2              }
 185   1           rec_cmd0    = 0x00;
 186   1          //发送数据包长度
 187   1           snd_len0     = SndUart0[0]+2;
 188   1           snd0_start   = SndUart0;      //发送数据包开始地址,从长度开始
 189   1               uart0_status = 0x01;          //正在发送数据
 190   1               SBUF         = 0xCC;          //开始发送数据
 191   1         //发送开始计时
 192   1               Uart0_Over   = 0;
 193   1       }
 194          
 195           void CommUart1()  //COM1 处理程序
 196          {
 197   1       //uart1_status  01正在向下发送数据 02发送数据完毕 正在接收数据 03接收数据完毕 04接收数据校验错
 198   1         if (uart1_status != 0x03 && Uart1_Over < OverMs)  //50 MS检查一次
 199   1           return;
 200   1      
 201   1         if( rec_cmd1==0xA1 && uart1_status==0x03)   //住户应答
 202   1          {
 203   2               SendUserFail[prevAddr-1] = 0;
 204   2                       bUart1ReSnd              = false;         //不要重发
 205   2        
 206   2              // case 0x00:     //轮询命令
 207   2               }else if(rec_cmd1==0x00)
 208   1               {
 209   2                       //不应答         发送完毕        
 210   2                   if(!com1_bAck && (uart1_status == 0x02 || uart1_status == 0x03)) //发下一条命令 
 211   2                       {
 212   3      
 213   3                       }else if(com1_bAck && uart1_status != 0x03)  //要应答
 214   2                       {
 215   3                         //接收数据超时
 216   3                      if(Uart1_Over > OverMs)  //超时处理
 217   3                              {
 218   4                         SendUserFail[prevAddr-1]+=1;
 219   4      
 220   4                              }else
 221   3                              {
 222   4                                return;
 223   4                              }
 224   3                   }else if(uart1_status == 0x01 && Uart1_Over < OverMs)  //不要应答,但还没有发送数据完成
 225   2                       {
 226   3                                return;
 227   3                       }
 228   2           }else if (uart1_status==0x04) // 接收数据校验错
 229   1               {
 230   2                    Uart1Data[1] = 0xF2;  //命令
 231   2                        Uart1Data[2] = 0;    //不应答
 232   2                        bTaskUart1   = 1;
 233   2               }else if (Uart1_Over > OverMs && rec_cmd1 != 0x00)  //超时没有应答或没有应答完
 234   1               {
 235   2                       //复位命令
 236   2              rec_cmd1 = 0x00;
 237   2                      return;
 238   2               }
 239   1      
 240   1          
 241   1         if(bUart1ReSnd)
C51 COMPILER V7.50   MAIN                                                                  12/19/2008 09:53:31 PAGE 5   

 242   1              {
 243   2                  if(!Uart1Nums)           //第二次重发
 244   2                         Uart1Nums = 1;
 245   2                      else
 246   2                         bUart1ReSnd = false;   //第三次重发
 247   2              }else {  
 248   2                //正常轮询
 249   2                          SndUart1[0] = 2;      
 250   2                      SndUart1[1] = 0x06;  //命令子节
 251   2                          com1_bAck   = true;
 252   2              }
 253   1      
 254   1               snd_len1                       = SndUart1[0];          //发送数据包长度
 255   1               SndUart1[snd_len1] = 0xCC;
 256   1               tmpdata                        = 0;
 257   1         for(;tmpdata < snd_len1;tmpdata++)
 258   1               SndUart1[snd_len1]^=SndUart1[tmpdata];
 259   1      
 260   1               snd_len1+=2;
 261   1               
 262   1          //发送数据包长度
 263   1           snd1_start   = SndUart1;  //发送数据包开始地址,从长度开始
 264   1               uart1_status = 0x01;       //正在发送数据
 265   1      
 266   1          //INT0关闭,不然就出现接收数据的错误
 267   1               EX0            = 0;
 268   1           SM                 = 1;  //用作发送停止位
 269   1               SBUF1          = 0xCC;      //开始发送数据
 270   1         //发送开始计时
 271   1               Uart1_Over = 0;
 272   1               Sdatabit       = 0x0A;  //发送位数
 273   1               TH2            = RCAP2H;
 274   1               TL2            = RCAP2L;
 275   1               RI2            = 0;        //发送状态
 276   1               rec_cmd1       = 0;
 277   1               TR2            = 1;   //开启发送定时器
 278   1      }
 279          
 280          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    691    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14    ----
   IDATA SIZE       =     40    ----
   BIT SIZE         =     24    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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