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

📄 gps.lst

📁 一个基于XMODEM协议的下载字库的程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 349          {
 350   1        SfrByte1 = da;        
 351   1        if(!(SB00 ^ SB07)); else { SB00 = ~SB00;SB07 = ~SB07;}
 352   1        if(!(SB01 ^ SB06)); else { SB01 = ~SB01;SB06 = ~SB06;}
 353   1        if(!(SB02 ^ SB05)); else { SB02 = ~SB02;SB05 = ~SB05;}
 354   1        if(!(SB03 ^ SB04)); else { SB03 = ~SB03;SB04 = ~SB04;}
 355   1        
 356   1        return(SfrByte1);
 357   1      }
 358          
 359          void write0816(void)
 360          {
 361   1              INT8U i, j, ch;
 362   1              INT32U addr;
 363   1              INT8U code *data p1;
 364   1      
C51 COMPILER V7.50   GPS                                                                   06/22/2006 09:45:45 PAGE 7   

 365   1              p1 = 0x6000;
 366   1              addr = 0x39000;
 367   1              for(i=0; i<16; i++)
 368   1              {
 369   2                      for(j=0; j<128; j++)
 370   2                      {
 371   3                              ch = *p1++;
 372   3                              Data_WrBuff[j]= ConvertXAChar(ch);
 373   3                      }
 374   2                      SPI_Program(addr, 128, Data_WrBuff);
 375   2                      addr += 128;
 376   2                      delay_10ms();
 377   2              }
 378   1      }
 379          
 380          /*******************************************************************************
 381          chUART_Process
 382          说  明:        处理接收的数据,如果收到正确的数据返回0,如果重复收到上次的数据,返回1
 383                                  否则返回2
 384          ********************************************************************************/
 385          unsigned char chUART_Process(void)
 386          {
 387   1              unsigned char i;
 388   1              unsigned char *pchTemp;
 389   1              recUART rUART_Temp;
 390   1              unsigned char chRece_Count;
 391   1              
 392   1              chRece_Count = (unsigned char)nBlock_Count;
 393   1              EA=0;
 394   1              rUART_Temp = rUARTRece;
 395   1              EA=1;
 396   1              
 397   1              pchTemp = (unsigned char *)rUART_Temp.chBuff;
 398   1              if(pchTemp[0]+pchTemp[1] == 0xFF)
 399   1              {
 400   2                      if(chRece_Count == pchTemp[0])          //接收到正确的块
 401   2                      {
 402   3                              pchTemp += 2;
 403   3                              for(i=0; i<128; i++)
 404   3                              {
 405   4                                      Data_WrBuff[i]= *pchTemp++;
 406   4                              }               
 407   3                              return 0;
 408   3                      }
 409   2                      else if(chRece_Count == pchTemp[0]+1)
 410   2                              return 1;
 411   2                      else
 412   2                              return 2;
 413   2              }
 414   1              else
 415   1                      return 2;
 416   1      }
 417          /*******************************************************************************
 418          vUART_TimeOut_Nak
 419          说  明:        准备完毕,请求开始传输,如果上面没有准备好,每隔5S请求一次
 420          ********************************************************************************/
 421          void vUART_TimeOut_Nak(void)
 422          {
 423   1              vSoftTimer_Run(UART_NAK, UART_ACK_TIME, vUART_TimeOut_Nak);     
 424   1              vGPS_SendChar(NAK);
 425   1      }
 426          /*******************************************************************************
C51 COMPILER V7.50   GPS                                                                   06/22/2006 09:45:45 PAGE 8   

 427          vUART_TimeOut_Ack
 428          说  明:        收到正确的数据后,启动本定时器,在设定的时间内没有收到下帧数据,
 429                                  再次发起请求
 430          ********************************************************************************/
 431          void vUART_TimeOut_Ack(void)
 432          {
 433   1              vSoftTimer_Run(UART_ACK, UART_ACK_TIME, vUART_TimeOut_Ack);     
 434   1              vGPS_SendChar(ACK);
 435   1      }
 436          /*******************************************************************************
 437          vUART_Execute
 438          说  明:        如果收到正确的数据,写入NX25P40,如果接收数据完毕,写入0808,0816,开机界面
 439          ********************************************************************************/
 440          void vUART_Execute(void)
 441          {
 442   1              INT8U i, chTemp;
 443   1              INT32U addr, j;
 444   1      
 445   1              if(chRece_Over == 0x01) //接收完毕所有数据
 446   1              {
 447   2                      vGPS_SendChar(ACK);
 448   2                      delay_1sec();
 449   2                      vGPS_SendChar(ACK);
 450   2                      
 451   2                      GraphStr0816(1,0, "WRITE0808",1,10);
 452   2                      write0808();                                                                    //写入8×8点阵
 453   2                      
 454   2                      GraphStr0816(1,0, "WRITE0816",1,10);                    //写入8×16点阵
 455   2                      write0816();
 456   2                      
 457   2                      writebmp();                                                                             //写入开机界面
 458   2      
 459   2                      chRece_Over = 2;                                                                //写完NX25P40后,执行程序检查是否正确                   
 460   2              }
 461   1              if(chBlock_Over == 0x01)        
 462   1              {
 463   2                      EA = 0;
 464   2                      chBlock_Over = 0;
 465   2                      EA = 1;
 466   2                      ////////////////////////////////////////                
 467   2                      if(nBlock_Count == 1)                                                   //如果这是收到的第一帧数据,执行以下操作
 468   2                      {
 469   3                              GraphStr0816(1,0, "ERASE..",1,7);
 470   3                              SPI_EraseBulk();                                //擦除EPROM
 471   3                              vSoftTimer_Stop(UART_NAK);              //如果收到数据了,说明传输开始了,此时
 472   3                                                                                              //不需要在次申请传输开始。
 473   3                      }
 474   2                      ///////////////////////////////////////
 475   2                      vSoftTimer_Run(UART_ACK, UART_ACK_TIME, vUART_TimeOut_Ack);             //等待下一帧数据
 476   2      
 477   2                      chTemp = chUART_Process();
 478   2                      if(chTemp == 0x00)      
 479   2                      {
 480   3                              GraphStr0816(1,0, "WRITE..",1,7);                  
 481   3      
 482   3                              //显示接收到的数据帧
 483   3                              j = nBlock_Count;
 484   3                              i = j/1000 + 0x30;
 485   3                              GraphChar0816(3,1,i,1);
 486   3                              i = j%1000/100 + 0x30;
 487   3                              GraphChar0816(3,2,i,1);
 488   3                              i = j%100/10 + 0x30;
C51 COMPILER V7.50   GPS                                                                   06/22/2006 09:45:45 PAGE 9   

 489   3                              GraphChar0816(3,3,i,1);
 490   3                              i = j%10 + 0x30;
 491   3                              GraphChar0816(3,4,i,1);
 492   3                              
 493   3                              //写入数据
 494   3                              addr = (INT32U)(nBlock_Count-1) * 128L;
 495   3                              SPI_Program(addr, 128, Data_WrBuff);
 496   3                              vGPS_SendChar(ACK);
 497   3                              nBlock_Count++;                                                                                                         
 498   3                      }
 499   2                      else if(chTemp == 0x01) 
 500   2                      {
 501   3                              vGPS_SendChar(ACK);
 502   3                      }
 503   2                      else if(chTemp == 0x02) 
 504   2                      {
 505   3                              vGPS_SendChar(NAK);
 506   3                      }
 507   2              }
 508   1      }
 509          
 510          
 511          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1232    ----
   CONSTANT SIZE    =   3460    ----
   XDATA SIZE       =    128     226
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       6
   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 + -