您现在所在的是:

单片机论坛

回帖:0个,阅读:3426 [上一页] [1] [下一页]
905
Jasonchang
文章数:1
年度积分:50
历史总积分:905
注册时间:2005/1/15
发站内信
发表于:2005/1/15 22:02:00
#0楼
我采用AT89LS51,外接一个MAX491来进行多机全双工RS485通信。
  在调试的时候先采用双机通信,发现从机的总是接收不正确。只能接收0x55,例如0x95,0x20这样的
字节就总是出错。由于没有RS485/RS232适配器,所以不能打到PC串口看数据。
  我又一块单片机,采用RS232接口和PC通信,采用相同的程序,使用串口调试精灵调试,发现接收和发送
都是正常的,请问这是怎么回事?谢谢
  以下是我的源码:
 /***********************************************
               主机
***********************************************/
  void main (void)
{

SCON = 0x50;     /* uart in mode 1 (8 bit), REN=1 */
TMOD = TMOD | 0x20 ;         /* Timer 1 in mode 2 */
TH1  = 0xFD;                 /* 9600 Bds at 11.059MHz */
TL1  = 0xFD;     /* 9600 Bds at 11.059MHz */
    IE =0x90;
    TR1 = 1;                     /* Timer 1 run */

 
  Rx_en=0;                        /* RS-485 Rx enable,'0'--enable; '1'--disable */
  Tx_en=1;                        /* RS-485 Tx enable,'1'--enable; '0'--disable */
 
  while(1)                    
  {                
                    SBUF=0x55;     //只有0x55可以成功被从机接收                                
          while(TI==0);                                              
          TI=0;
                    delay(100);
            LED_blink1();  /* If received a byte ,LED1 will blink */
                   
                     
  }
}

void serial () interrupt 4   //接收采用中断,发送不使用中断
{
       if(RI)
                   {  
                      char uart_data;
                      RI=0;
                      uart_data=SBUF;                    
                      switch(uart_data)
                      {
                        case 0x25:
                             LED_blink2();
                             break;
                        default:
                             break;
                      }    
                   }
}
/***********************************************
               从机
***********************************************/
void main (void)
{
   char shakehands;
 
SCON = 0x50;     /* uart in mode 1 (8 bit), REN=1 */
TMOD = TMOD | 0x20 ;         /* Timer 1 in mode 2 */
TH1  = 0xFD;                 /* 9600 Bds at 11.059MHz */
TL1  = 0xFD;     /* 9600 Bds at 11.059MHz */
ES = 0;     /* Disable serial interrupt */
EA = 0;     /* Disable global interrupt */
    TR1 = 1;                     /* Timer 1 run */
  Rx_en=0;
  Tx_en=1;                     // RS-485 Tx ,'1'--enable; '0'--disable
  while(1)                    
  {
              if(RI==1)
               {
                        RI=0;
                        shakehands=SBUF;
                        switch(shakehands)
                   {
                       case 0x55:
LED_blink1();//收到指定字节就闪LED1
                                SBUF=0x25;   //然后返回0x25
                                while(TI==0);                                
                                TI=0;
                break;
       default:
                                LED_blink2();//收到字节,但不是指定字节就闪LED2
break;         //每次都闪LED2,所以我判断从机没有
                                                 //正确收到主机发送的字节
                   }
  }
     }        
}

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003