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

📄 serial.lst

📁 适合初学者学习的UPSD的点阵LCD汉字显示
💻 LST
📖 第 1 页 / 共 2 页
字号:
 160          /*===============================================================
 161          功能:串口接收任务
 162          参数:无
 163          返回:无
 164          说明:缓冲区采用先进先出的原则,当缓冲区已满则停止接收
 165                          邮件的参数是接收数据的长度。只有接收到数据头才开始接收数据
 166          ===============================================================*/
 167          void Serial_RECV_Task(void)     _task_ SRECV_TASK_ID
 168          {
 169   1              static uchar xdata _index;
 170   1              static uint xdata _data;
 171   1              while(1)
 172   1              {
 173   2                      //os_wait(K_SIG,0x00,0x00);                                     //等待串口接收数据
 174   2                      os_wait(K_MBX+MBX_SERAIL_RECV, 0x00, &_data);
 175   2                      if(cRecvBuffCnt < RECV_GRUOP)
 176   2                      {//接收缓冲区未满
 177   3                              _index = (cRecvBuffPtr+cRecvBuffCnt) % RECV_GRUOP;      //缓冲区的偏移地址
 178   3                              if((uchar)_data == 0xFF)
 179   3                              {//如果收到起始符
C51 COMPILER V7.10   SERIAL                                                                08/03/2006 13:15:14 PAGE 4   

 180   4                                      cRecvBuff[_index][0] = 0xFF;    
 181   4                                      cRecvBuffNum = 0x01;
 182   4                              }
 183   3                              else if( (cRecvBuffNum > 0x00)  && (cRecvBuffNum < RECV_LENGTH) )
 184   3                              {//其他数据
 185   4                                      cRecvBuff[_index][cRecvBuffNum] = (uchar)_data;
 186   4                                      cRecvBuffNum++;
 187   4                                      if(cRecvBuffNum == (cRecvBuff[_index][1] + 3) )
 188   4                                      {//接收完毕
 189   5                                              cRecvBuffCnt++;
 190   5                                              cRecvBuffNum = 0x00;
 191   5                                      }
 192   4                              }
 193   3                              else if(cRecvBuffNum > RECV_LENGTH)
 194   3                              {//接收的数据超过缓冲区容量清除当前接收的数据
 195   4                              cRecvBuffNum = 0x00;
 196   4                              memset(&cRecvBuff[_index][0],0x00,RECV_LENGTH);
 197   4                              }
 198   3                      }
 199   2              }
 200   1      }
 201          
 202          /*===============================================================
 203          功能:串口发送任务
 204          参数:无
 205          返回:无
 206          说明:发送
 207                          邮件的参数是要发送数据的长度
 208          ===============================================================*/
 209          void Serial_Tran_Task(void) _task_ STRAN_TASK_ID
 210          {
 211   1              static uchar xdata _sendNum;
 212   1              while(1)
 213   1              {
 214   2                      if( (cTranBuffCnt != 0x00) && (cTranBuffPtr < TRAN_GRUOP) )
 215   2                      {//有数据要发送
 216   3                              _sendNum = 0x00;
 217   3                              while(_sendNum < cTranBuff[cTranBuffPtr][1]+3)
 218   3                              {//数据是否发送完毕
 219   4                                      SBUF = cTranBuff[cTranBuffPtr][_sendNum];
 220   4                                      os_wait(K_SIG,0x00,0x00);                                       //等待数据发送完毕
 221   4                                      _sendNum++;
 222   4                              }
 223   3                              //清除发送完毕的数据
 224   3                              memset(&cTranBuff[cTranBuffPtr][0], 0x00, TRAN_LENGTH);
 225   3                              cTranBuffPtr = (cTranBuffPtr+1) % TRAN_GRUOP;
 226   3                              cTranBuffCnt --;                        
 227   3                      }
 228   2                      os_wait(K_TMO, T10MS, 0x00);
 229   2              }
 230   1      }
 231          /*===============================================================
 232          功能:调试任务
 233          参数:无
 234          返回:无
 235          说明:发送调试信息,第一个字节为发送长度,后面为协议
 236          ===============================================================*/
 237          void Debug_Task(void) _task_ DEBUG_TASK_ID
 238          {
 239   1              while(1)
 240   1              {
 241   2                      if( (cTranBuffPtr2<TRAN_GRUOP2) && (cTranBuffCnt2 != 0x00) )
C51 COMPILER V7.10   SERIAL                                                                08/03/2006 13:15:14 PAGE 5   

 242   2                      {
 243   3                              cTranBuffNum2 = 0x01;
 244   3                              while(cTranBuffNum2 < cTranBuff2[cTranBuffPtr2][0])
 245   3                              {
 246   4                                      SBUF2 = cTranBuff2[cTranBuffPtr2][cTranBuffNum2];
 247   4                                      cTranBuffNum2++;
 248   4                                      os_wait(K_SIG, 0x00, 0x00);
 249   4                              }
 250   3                              //清除发送完毕的数据
 251   3                              memset(&cTranBuff2[cTranBuffPtr2][0], 0x00, TRAN_LENGTH2);
 252   3                              cTranBuffPtr2 = (cTranBuffPtr2+1) % TRAN_GRUOP2;
 253   3                              cTranBuffCnt2 --;
 254   3                      }
 255   2                      else 
 256   2                              os_wait(K_TMO, T10MS, 0x00);
 257   2              }
 258   1      }
 259          
 260          /*===============================================================
 261          功能:写入调试信息
 262          参数:type-类型;buff-数据;
 263          返回:无
 264          说明:
 265          ===============================================================*/
 266          void    Write_Debug_Info(uchar* buff, uchar len)
 267          {
 268   1              uchar _tmp;
 269   1              if( (cTranBuffCnt2 < TRAN_GRUOP2) && ((len+3) <TRAN_LENGTH2) )
 270   1              {//缓冲区还有空间
 271   2                      _tmp = (cTranBuffPtr2+cTranBuffCnt2)%TRAN_GRUOP2;               //计算偏移地址
 272   2                      memset(cTranBuff2[_tmp], 0x00, TRAN_LENGTH2);
 273   2                      cTranBuff2[_tmp][0] = len+3;
 274   2                      memcpy(&cTranBuff2[_tmp][1], buff, len);
 275   2                      cTranBuff2[_tmp][len+1] = 0x0D;
 276   2                      cTranBuff2[_tmp][len+2] = 0x0A;
 277   2                      cTranBuffCnt2++;
 278   2              }
 279   1      }
 280          /*===============================================================
 281          功能:设置任务,完成组号的设定和读取
 282          参数:
 283          返回:
 284          说明:组号从地址0x8000开始放置,每个组号共五个汉字
 285                          总共16组
 286          ===============================================================*/
 287          void Config_Task(void) _task_ CONFIG_TASK_ID
 288          {
 289   1              static uchar xdata _tmp;
 290   1              static uchar xdata _buff[160];
 291   1              while(1)
 292   1              {
 293   2                      os_wait(K_SIG, 0x00, 0x00);
 294   2                      //去除回车符
 295   2                      cRecvBuff2[cRecvBuffNum2-1] = 0x00;
 296   2                      cRecvBuff2[cRecvBuffNum2-2] = 0x00;
 297   2                      
 298   2                      _tmp = (cRecvBuff2[2]-'0')*10 +cRecvBuff2[3] - '0';
 299   2                      
 300   2              }
 301   1      }
*** WARNING C280 IN LINE 290 OF SERIAL.C: '_buff': unreferenced local variable
 302          
C51 COMPILER V7.10   SERIAL                                                                08/03/2006 13:15:14 PAGE 6   

 303          /*===============================================================
 304          功能:
 305          参数:
 306          返回:
 307          说明:
 308          ===============================================================*/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1970    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   3282    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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