senddat.lst

来自「绝对原创」· LST 代码 · 共 415 行 · 第 1/2 页

LST
415
字号
 184   5                                                                              Breed_Dat = 0 ;
 185   5                                                                              Send_Finger = 0 ;
 186   5                                                                      }
 187   4                                                                      break ;
 188   4                                              
 189   4                                              default:
 190   4                                                                      break ;
 191   4                                      }       
 192   3              
 193   3                                      Send_DatBag[2] = Send_DatBag[4] ;                                               // 重发数据包
 194   3                                      Send_DatBag[1] = Send_DatBag[3] ;                                               //
 195   3                                      Send_DatBag[0] = 0xff ;                                                                 // 结束标志
 196   3                                      SBUF = Send_DatBag[Send_Counter - 1] ;
 197   3                                      Send_Counter-- ;
 198   3                              }
 199   2                      }
 200   1                      else                                                                                                                    // 继续发送,发完6个数据
 201   1                      {
 202   2                              SBUF = Send_DatBag[Send_Counter - 1] ;
 203   2                              Send_Counter-- ;
 204   2                      }
 205   1              }
 206          
 207          
 208          /*********************************************************************************************************
             -****
 209          *       函数名称 :
 210          *       功能描述 :
 211          *       实际参数 :
 212          *       返回值   :
 213          *       说明     :      发送数据
 214          **********************************************************************************************************
             -****/
 215          
 216          /*      void SendDat(uchar dat0,uchar dat1,road_dat)
 217                  {
 218                          uchar c ;       
 219          
 220                          SBUF = road_dat  ;                                      // 段数据 
 221                      while(Send_Flag == 0) ;
 222                      Send_Flag = 0 ;
 223                  
 224                      for(c = 0;c < 2;c++)                                        // 发送两次数据 
 225                      {
 226                        SBUF = dat1 ;                                             // 第一次发送00, 
 227                        while(Send_Flag == 0) ;
 228                          Send_Flag = 0 ;
 229                  
C51 COMPILER V7.07   SENDDAT                                                               08/26/2006 11:15:07 PAGE 5   

 230                        SBUF = dat0 ;                                             // 加温标志或,断线标志 
 231                        while(Send_Flag == 0) ;
 232                          Send_Flag = 0 ;
 233                      }
 234                  
 235                      SBUF = 0xff ;                                               // 发送结束标志 
 236                      while(Send_Flag == 0) ;
 237                          Send_Flag = 0 ;         
 238                  }
 239          
 240          /*********************************************************************************************************
             -****
 241          *       函数名称 :
 242          *       功能描述 :
 243          *       实际参数 :
 244          *       返回值   :
 245          *       说明     :       处理发送温度数据子程序,变BCD码,及小数点运算,
 246          **********************************************************************************************************
             -****/
 247          
 248          /*      void ChangeBCB(uchar *temp_dat0,uchar *temp_dat1,uint ack_data)
 249                  {
 250                          uchar temp,temp1 ;
 251                          uint temp_dat ;
 252                          
 253                          temp_dat = (ack_data >> 2) ;                                                            // 取整数,去小数点
 254                          temp = (uchar)(ack_data & 0x03) ;
 255                      if (temp >= 2)                                                                                              // 四舍五入,2 X 0.25 = 0.5 度
 256                                  temp_dat++ ;            
 257          
 258                          temp = ((temp_dat / 1000) % 10) ;                                                       // 取温度千位数
 259                          temp <<= 4 ;
 260                          temp1 = ((temp_dat / 100) % 10) & 0x0f  ;                                       // 取温度百位数
 261                          
 262                          *temp_dat1 = (temp | temp1) ;
 263          
 264                          temp = ((temp_dat / 10) % 10) ;                                         // 取温度十位数 
 265                          temp <<= 4 ;
 266                          temp1 = ((temp_dat % 10) & 0x0f) ;                                                      // 取温度十位数和个位数         
 267          
 268                          *temp_dat0 = (temp | temp1) ;  
 269                          return ;
 270                  }
 271          
 272          
 273          
 274          /*********************************************************************************************************
             -****
 275          *       函数名称 :
 276          *       功能描述 :
 277          *       实际参数 :
 278          *       返回值   :
 279          *       说明     :       发送温度数据子程序,此温度为实际温度的4倍,road_data为几路0-9)
 280          **********************************************************************************************************
             -****/
 281          
 282          /*      void SendTemp(uchar road_data)                                                                  // temp_data为温度数据,road_data为路数数据 
 283                  {
 284                          uchar a,open_dat,temp0,temp1 ;
 285                          uchar *temp00_dat,*temp11_dat ;
 286                          uint temp_data ;                
 287          
C51 COMPILER V7.07   SENDDAT                                                               08/26/2006 11:15:07 PAGE 6   

 288                          temp00_dat = &temp0 ;
 289                          temp11_dat = &temp1 ;
 290          
 291                          if (road_data < 4)
 292                          {
 293                                  a = road_data ;
 294                                  temp_data = Fact_Temp0[a] ;                                                             // 0-4段温度
 295                                  open_dat = Thermocouple0_Open[a] ;
 296                          }
 297                          else
 298                          {
 299                                  a = road_data - 5 ;
 300                                  temp_data = Fact_Temp1[a] ;                                                             // 5-9段温度    
 301                                  open_dat = Thermocouple1_Open[a] ;
 302                          }       
 303                                                                          
 304                          ChangeBCB(temp00_dat,temp11_dat,temp_data) ;                            // 去小数点,转BCD码
 305          
 306                          a = (road_data | 0xf0) ;                                        // 先发送段数据F0,F1,F2,F3 
 307          
 308                          SendDat(temp0,temp1,a) ;                                                                        // 发送
 309          
 310                          // 发状态标志
 311                          a = (road_data | 0xe0) ;                                                        // 段数据  
 312          
 313                      SendDat(open_dat,0x00,a) ;                                                                  // 发送
 314                  } 
 315          
 316          /*********************************************************************************************************
             -****
 317          *       函数名称 :
 318          *       功能描述 :
 319          *       实际参数 :
 320          *       返回值   :
 321          *       说明     :       发送温度数据子程序,此温度为实际温度的4倍,road_data为几路0-9)
 322          **********************************************************************************************************
             -****/
 323          
 324          /*      void SendTempDat(uchar road_data)                               // temp_data为温度数据,road_data为路数数据  
 325                  {
 326                          SendTemp(road_data) ;                                                   // 第一个MAX6675                        
 327                          SendTemp(road_data + 5) ;                                               // 第二个MAX6675                
 328                  } 
 329          
 330          /*********************************************************************************************************
             -****
 331          *       函数名称 :
 332          *       功能描述 :
 333          *       实际参数 :
 334          *       返回值   :
 335          *       说明     :       发送温度修正值
 336          **********************************************************************************************************
             -****/
 337          
 338          /*      void SendAdjustDat(void) 
 339                  {
 340                          SendDat(SiteFack_Temp,0x00,0xd0) ;                                        // 发送几度开始运算加温
 341                          SendDat(Check_TempTimeCycle,0x00,0xd1) ;                          // 发送运算周期时间以秒为单位 
 342                  }
 343          
 344          /*********************************************************************************************************
             -****
C51 COMPILER V7.07   SENDDAT                                                               08/26/2006 11:15:07 PAGE 7   

 345          *       函数名称 : void ReceiptDat(void)
 346          *       功能描述 :
 347          *       实际参数 :
 348          *       返回值   :
 349          *       说明     : 接收数据
 350          **********************************************************************************************************
             -****/
 351                  
 352                  void ReceiptDat(void)
 353                  {       
 354   1                      uchar sbuf_dat ;
 355   1      
 356   1                      sbuf_dat = SBUF & 0xf0 ;
 357   1      
 358   1                      if ((sbuf_dat == 0xf0) || (sbuf_dat == 0xe0) || (sbuf_dat == 0xc0) || (sbuf_dat == 0xd0))
 359   1                      if ((SBUF & 0x0f) < 0x0a)                                                                                       // 判断是否是一帧数据的包头
 360   1                      {
 361   2                              AllowReceipt_Flag = 1 ;                                                                                 // 置位容许接收
 362   2                              Receive_Finger = 0 ;                                                                                    // 重新接收
 363   2                      }   
 364   1      
 365   1                      if (AllowReceipt_Flag)                                                                                          // 判断是否容许接收
 366   1                      {
 367   2                              Receive_Dat[Receive_Finger] = SBUF ;                                                // 存储接收到的数据,
 368   2                              Receive_Finger ++ ;                                                                                             // 存储数据指针
 369   2                      
 370   2                              if (Receive_Finger == 6)                                                                                // 判断是否接收完一帧数据
 371   2                              if (Receive_Dat[5] == 0xff)                                                                             // 判断帧尾是否是结束标志
 372   2                              if ((Receive_Dat[1] == Receive_Dat[3]) && (Receive_Dat[2] == Receive_Dat[4]))   //判断接收到的两次数据是

⌨️ 快捷键说明

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