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

📄 softserio.lst

📁 C51单片机一个小项目源程序:包含液晶12232驱动,AD7705驱动,按键扫描及单片机内部EEPROM的驱动,是一个比较值得参考的源程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   SOFTSERIO                                                             06/28/2007 08:44:48 PAGE 4   

 180          {
 181   1          TCON_ENABLE_TIMER = 0;             //停止定时器  
 182   1          rs_timerH = rs_TEST_H;
 183   1          rs_timerL = rs_TEST_L;
 184   1          rs_shift_count = 0;
 185   1          TCON_ENABLE_TIMER = 1;             //启动定时器  
 186   1      }
 187          
 188          
 189          void soft_receive_enable()             //允许接收  
 190          {
 191   1          rs_f_RI_enable = 1;                //允许接收  
 192   1          rs_f_TI_enable = 0;                //禁止发送   
 193   1          soft_receive_init();               //监测起始位, RXD 下降沿触发接收字节过程.     
 194   1      }
 195          
 196          void soft_send_enable (void)           //允许发送  
 197          {
 198   1          TCON_ENABLE_TIMER = 0;             //停止定时器  
 199   1          rs_f_TI_enable = 1;                //允许发送  
 200   1          rs_f_RI_enable = 0;                //禁止接收  
 201   1      
 202   1          rs_shift_count = 0;                //清移位计数器  
 203   1          rs_f_TI   = 1;                     //发送一个字符完毕标志  
 204   1          TCON_ENABLE_TIMER = 1;             //启动定时器
 205   1      }
 206          
 207          void soft_rs232_interrupt( void )
 208          {
 209   1          /************************ 接收 ****************************/
 210   1          if (rs_f_RI_enable == 1)
 211   1          {
 212   2              if (rs_shift_count == 0)        //移位计数器==0, 表示检测到起始位的起点   
 213   2              {
 214   3                  if ( rs_RXD == 1 )
 215   3                  {
 216   4                      soft_receive_enable (); //起始位错, 从新开始   
 217   4                  }
 218   3                  else
 219   3                  {
 220   4                      //下次中断在数据位或停止位中的某时刻发生    
 221   4                      rs_timerL += rs_FULL_BIT_L + 0x10; 
 222   4                      rs_timerH = rs_FULL_BIT_H;
 223   4                      rs_shift_count++;              
 224   4                      rs_BUF = 0;             //清移位缓冲变量   
 225   4                  }
 226   3              }
 227   2              else
 228   2              {
 229   3                  rs_timerL += rs_FULL_BIT_L; //下次中断在数据位或停止位中发生    
 230   3                  rs_timerH = rs_FULL_BIT_H;
 231   3                                             
 232   3                  rs_shift_count++;           //2--9:数据位 10:停止位 
 233   3                                             
 234   3                  if ( rs_shift_count == 9)
 235   3                  {
 236   4                      rs_BUF = rs_BUF >> 1;   //接收第8位   
 237   4                      rs_BUF_bit7 = rs_RXD;
 238   4                      if( ReceivePoint < rs_RECEIVE_MAX)
 239   4                      {                       //保存收到的字节    
 240   5                          rs232buffer[ReceivePoint++] = rs_BUF;
 241   5                      }
C51 COMPILER V7.50   SOFTSERIO                                                             06/28/2007 08:44:48 PAGE 5   

 242   4                      else
 243   4                      {
 244   5                          rs_f_RI_enable = 0; //缓冲区满, 禁止接收   
 245   5                      }
 246   4                  }
 247   3                  else
 248   3                  {
 249   4                      if (rs_shift_count < 9 ) //收到的是数据位 1 -- 7  
 250   4                      {
 251   5                          rs_BUF = rs_BUF >> 1;
 252   5                          rs_BUF_bit7 = rs_RXD;
 253   5                      }
 254   4                      else
 255   4                      {   //收到停止位,继续检测 PC 机发出的下一个起始位    
 256   5                          soft_receive_init(); 
 257   5                      }
 258   4                  }
 259   3              }
 260   2              TCON_TFx = 0;                  //清定时器中断标志   
 261   2          }
 262   1          else
 263   1          {
 264   2              /************************ 发送 ****************************/  
 265   2              if (rs_f_TI_enable == 1)
 266   2              {
 267   3                  rs_timerL += rs_FULL_BIT_L;//下次中断在数据位的末尾时刻   
 268   3                  rs_timerH = rs_FULL_BIT_H;
 269   3      
 270   3                  rs_shift_count--;          //0:停止位末尾时刻到  
 271   3                                             //1:发送停止位  
 272   3                                             //2--9:发送数据位  
 273   3                  if (rs_shift_count > 9)    //错误状态  
 274   3                  {
 275   4                      rs_shift_count = 9;
 276   4                      rs_BUF = 0xFF;
 277   4                  }
 278   3      
 279   3                  if (rs_shift_count > 1)    //2--9:发送数据位  
 280   3                  {
 281   4                      ACC = rs_BUF;
 282   4                      ACC = ACC >> 1;
 283   4                      rs_TXD = CY;
 284   4                      rs_BUF = ACC;
 285   4                  }
 286   3                  else
 287   3                  {
 288   4                      if (rs_shift_count == 0) //0:停止位末尾时刻到  
 289   4                      {
 290   5                          rs_TXD = 1;
 291   5                          rs_f_TI = 1;       //已发送完毕一个字节  
 292   5                      }
 293   4                      else
 294   4                      {
 295   5                          rs_TXD = 1;        //1:发送停止位  
 296   5                      }
 297   4                  }
 298   3              }
 299   2          }
 300   1      }
 301          
 302          //由收转到发时,要先调用 soft_send_enable ()  
 303          void rs_send_byte(INT8U SendByte)      //发送一个字节  
C51 COMPILER V7.50   SOFTSERIO                                                             06/28/2007 08:44:48 PAGE 6   

 304          {
 305   1          while ( rs_f_TI == 0);             //等待发送完毕前一个字节  
 306   1          rs_TXD = 1;
 307   1          rs_timerL = rs_START_BIT_L;        //下次中断在起始位的末尾时刻   
 308   1          rs_timerH = rs_START_BIT_H;
 309   1          rs_BUF = SendByte;
 310   1          rs_shift_count = 10;
 311   1          rs_TXD = 0;                        //发送起始位  
 312   1          rs_f_TI = 0;                       //清已发送完毕一个字节的标志   
 313   1      }
 314          
 315          void initiate_MCU (void)               //系统初始化  
 316          {
 317   1          soft_rs232_init();                 //串口初始化  
 318   1          EA = 1;                            //开中断  
 319   1      }
 320          
 321          /*void main (void)
 322          {
 323          //首先发送 128 个字节 00H--7FH, 然后等待 PC 机发送的数据。当收到 128
 324          //个字节后,立刻将收到的 128 个数据回发送给 PC 机,然后继续等待下一个
 325          //数据块。
 326            
 327              INT8U i;
 328              initiate_MCU();                    //系统初始化  
 329          
 330              soft_send_enable ();               //允许发送,禁止接收  
 331              for (i=0; i < rs_RECEIVE_MAX; i++ )
 332              {
 333                  rs_send_byte(i);
 334              }
 335              while ( rs_f_TI == 0)  ;           // 等待最后一个字节发送完毕   
 336          
 337              while(1)
 338              {
 339                  soft_receive_enable ();        //启动并开始接收,禁止发送  
 340                  while (ReceivePoint < rs_RECEIVE_MAX); // 等待接收缓冲区满  
 341          
 342                  soft_send_enable ();           //允许发送,禁止接收  
 343                  for (i=0; i < rs_RECEIVE_MAX; i++ )
 344                  {
 345                      rs_send_byte(rs232buffer[i]);
 346                  }
 347                  while ( rs_f_TI == 0)  ;       //等待最后一个字节发送完毕
 348                  ReceivePoint = 0;
 349              }
 350          }  */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    345    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    131    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2    ----
   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 + -