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

📄 commrs232.lst

📁 STC12C5410AD模拟串口再现多串口通讯
💻 LST
📖 第 1 页 / 共 5 页
字号:
 207          ** 调用模块: 
 208          **
 209          ** 作   者: 
 210          ** 日   期: 
 211          **-------------------------------------------------------------------------------------------------------
 212          ** 修 改 人: 李伟
 213          ** 日   期: 2008年12月09日
 214          **-------------------------------------------------------------------------------------------------------
 215          ********************************************************************************************************/
 216          void soft_receive_enable()             //允许接收  
 217          {
 218   1          rs_f_RI_enable = 1;                //允许接收  
 219   1          rs_f_TI_enable = 0;                //禁止发送   
 220   1          soft_receive_init();               //监测起始位, RXD 下降沿触发接收字节过程.     
 221   1      }
 222          /********************************************************************************************************
 223          ** 函数名称: void soft_send_enable (void)              //允许发送   
 224          ** 功能描述: 
 225          ** 输   入: 无
 226          ** 输   出: 无
 227          ** 全局变量: 
 228          ** 调用模块: 
 229          **
 230          ** 作   者: 
 231          ** 日   期: 
 232          **-------------------------------------------------------------------------------------------------------
 233          ** 修 改 人: 李伟
 234          ** 日   期: 2008年12月09日
 235          **-------------------------------------------------------------------------------------------------------
 236          ********************************************************************************************************/
 237          void soft_send_enable (void)           //允许发送  
 238          {
 239   1          TCON_ENABLE_TIMER = 0;             //停止定时器  
 240   1          rs_f_TI_enable = 1;                //允许发送  
 241   1          rs_f_RI_enable = 0;                //禁止接收  
C51 COMPILER V7.06   COMMRS232                                                             10/30/2008 13:20:06 PAGE 5   

 242   1      
 243   1          rs_shift_count = 0;                //清移位计数器  
 244   1          rs_f_TI   = 1;                     //发送一个字符完毕标志  
 245   1          TCON_ENABLE_TIMER = 1;             //启动定时器
 246   1      }
 247          /********************************************************************************************************
 248          ** 函数名称: void rs_send_byte(uint8 SendByte)      //发送一个字节   
 249          ** 功能描述: 
 250          ** 输   入: 无
 251          ** 输   出: 无
 252          ** 全局变量: 
 253          ** 调用模块: 
 254          **
 255          ** 作   者: 
 256          ** 日   期: 
 257          **-------------------------------------------------------------------------------------------------------
 258          ** 修 改 人: 李伟
 259          ** 日   期: 2008年12月09日
 260          **-------------------------------------------------------------------------------------------------------
 261          ********************************************************************************************************/
 262          //由收转到发时,要先调用 soft_send_enable ()  
 263          void rs_send_byte(uint8 SendByte)      //发送一个字节  
 264          {
 265   1          while ( rs_f_TI == 0);             //等待发送完毕前一个字节  
 266   1          rs_TXD = 1;
 267   1          rs_timerL = rs_START_BIT_L;        //下次中断在起始位的末尾时刻   
 268   1          rs_timerH = rs_START_BIT_H;
 269   1          rs_BUF = SendByte;
 270   1          rs_shift_count = 10;
 271   1          rs_TXD  = 0;                       //发送起始位  
 272   1          rs_f_TI = 0;                       //清已发送完毕一个字节的标志   
 273   1      }
 274          /********************************************************************************************************
 275          ** 函数名称: void initiate_MCU (void)               //系统初始化    
 276          ** 功能描述: 
 277          ** 输   入: 无
 278          ** 输   出: 无
 279          ** 全局变量: 
 280          ** 调用模块: 
 281          **
 282          ** 作   者: 
 283          ** 日   期: 
 284          **-------------------------------------------------------------------------------------------------------
 285          ** 修 改 人: 李伟
 286          ** 日   期: 2008年12月09日
 287          **-------------------------------------------------------------------------------------------------------
 288          ********************************************************************************************************/
 289          void Initiate_RS232(void)               //系统初始化  
 290          {
 291   1          soft_rs232_init();                  //串口初始化  
 292   1          EA = 1;                             //开中断  
 293   1      }
 294          /*********************************************************************************************************
 295          ** 函数名称: void  Rs232CommSendByteWithChk(uint8 Commdata)
 296          ** 功能描述: 
 297          ** 输   入: 无
 298          ** 输   出: 无
 299          ** 全局变量: 
 300          ** 调用模块: 
 301          **
 302          ** 作   者: 李伟
 303          ** 日   期: 2008年12月09日
C51 COMPILER V7.06   COMMRS232                                                             10/30/2008 13:20:06 PAGE 6   

 304          **-------------------------------------------------------------------------------------------------------
 305          ** 修 改 人:
 306          ** 日   期:
 307          **-------------------------------------------------------------------------------------------------------
 308          ********************************************************************************************************/
 309          void  Rs232CommSendByteWithChk(uint8 Commdata)
 310          {
 311   1          uint8 i,j;
 312   1          i = Commdata >> 4;
 313   1          j = Commdata & 0x0F;
 314   1          if(i<10)
 315   1              i += 0x30;
 316   1          else
 317   1              i += 0x37;
 318   1          if(j<10)
 319   1              j += 0x30;
 320   1          else
 321   1              j += 0x37;
 322   1          Rs232ComCalculChkSum += i;
 323   1          Rs232ComCalculChkSum += j;
 324   1          rs_send_byte(i);
 325   1          rs_send_byte(j);
 326   1      }
 327          /*********************************************************************************************************
 328          ** 函数名称: void Rs232CommSendByteWithoutChk(uint8 Commdata)
 329          ** 功能描述: 
 330          ** 输   入: 无
 331          ** 输   出: 无
 332          ** 全局变量: 
 333          ** 调用模块: 
 334          **
 335          ** 作   者: 李伟
 336          ** 日   期: 2008年12月10日
 337          **-------------------------------------------------------------------------------------------------------
 338          ** 修 改 人:
 339          ** 日   期:
 340          **-------------------------------------------------------------------------------------------------------
 341          ********************************************************************************************************/
 342          void Rs232CommSendByteWithoutChk(uint8 Commdata)
 343          {
 344   1          uint8 i,j;
 345   1          i = Commdata >> 4;
 346   1          j = Commdata & 0x0F;
 347   1          if(i<10)
 348   1              i += 0x30;
 349   1          else
 350   1              i += 0x37;
 351   1          rs_send_byte(i);
 352   1          if(j<10)
 353   1              j += 0x30;
 354   1          else
 355   1              j += 0x37;
 356   1          rs_send_byte(j);
 357   1      }
 358          /*********************************************************************************************************
 359          ** 函数名称: void Rs232CommSendWordWithChk(uint16 Commword)
 360          ** 功能描述: 
 361          ** 输   入: 无
 362          ** 输   出: 无
 363          ** 全局变量: 
 364          ** 调用模块: 
 365          **
C51 COMPILER V7.06   COMMRS232                                                             10/30/2008 13:20:06 PAGE 7   

 366          ** 作   者: 李伟
 367          ** 日   期: 2008年12月10日
 368          **-------------------------------------------------------------------------------------------------------
 369          ** 修 改 人:
 370          ** 日   期:
 371          **-------------------------------------------------------------------------------------------------------
 372          ********************************************************************************************************/
 373          void Rs232CommSendWordWithChk(uint16 Commword)
 374          {
 375   1          Rs232CommSendByteWithChk((uint8)(Commword>>8));
 376   1          Rs232CommSendByteWithChk((uint8)(Commword));
 377   1      }
 378          /********************************************************************************************************
 379          ** 函数名称: void soft_rs232_interrupt( void )  
 380          ** 功能描述: 
 381          ** 输   入: 无
 382          ** 输   出: 无
 383          ** 全局变量: 
 384          ** 调用模块: 
 385          **
 386          ** 作   者: 
 387          ** 日   期: 
 388          **-------------------------------------------------------------------------------------------------------
 389          ** 修 改 人: 李伟
 390          ** 日   期: 2008年12月09日
 391          **-------------------------------------------------------------------------------------------------------
 392          ********************************************************************************************************/
 393          void soft_rs232_interrupt( void )
 394          {
 395   1          /************************ 接收 ****************************/
 396   1          if (rs_f_RI_enable == 1)
 397   1          {
 398   2              if (rs_shift_count == 0)        //移位计数器==0, 表示检测到起始位的起点   
 399   2              {
 400   3                  if ( rs_RXD == 1 )
 401   3                  {
 402   4                      soft_receive_enable (); //起始位错, 从新开始   
 403   4                  }
 404   3                  else
 405   3                  {
 406   4                      //下次中断在数据位或停止位中的某时刻发生 
 407   4                                      rs_timerL += rs_FULL_BIT_L;// + 0x10;
 408   4                      rs_timerH  = rs_FULL_BIT_H;
 409   4                      rs_shift_count++;              
 410   4                      rs_BUF = 0;             //清移位缓冲变量   
 411   4                  }
 412   3              }
 413   2              else
 414   2              {
 415   3                  rs_timerL += rs_FULL_BIT_L; //下次中断在数据位或停止位中发生    
 416   3                  rs_timerH = rs_FULL_BIT_H;
 417   3                                             
 418   3                  rs_shift_count++;           //2--9:数据位 10:停止位 
 419   3                                             
 420   3                  if ( rs_shift_count == 9)
 421   3                  {

⌨️ 快捷键说明

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