打印

c8051f340串口通信,只能收不能发?

[复制链接]
4056|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jin1song|  楼主 | 2012-4-21 09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位,用c8051f340做的rs485串口通信程序,出现的情况是只能收不能发,原理图中485电平转换芯片的RE DE连在一起接到单片机上,485芯片的RE DE不晓得处理的对吗,谢谢各位。程序如下:
 
void main()
{  char g;
PCA0MD &=~0x40
Init_Device();
while(1)
{ DE=0;  
  while(RI0==0);   //接收   
  RI0=0;
  g=SBUF0;
  
   _nop_(); //延时10ms
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  
  DE=1;
  if(g!='\0')  
   {
   SBUF0=g;     
    while(TI0==0);  //发送
    TI0=0;
    g='\0';
   }

相关帖子

沙发
ningling_21| | 2012-4-21 13:00 | 只看该作者
本帖最后由 ningling_21 于 2012-4-21 13:03 编辑

改一下:
用中断接收,主程序发送。
void int_uart(void) interrupt 4 // 中断程序
{
  if(RI0)
{
  RI0=0;
  g=SBUF0;
  flag=1;
}
if(TI0)
{
  TI0=0;
}
}
//主程序
while(1)
{
   if(g!='\0'  &&  flag==1)
   {
       flag=0;
       SBUF0=g;
       while(TI0==0);
       tI0=0;
   }
}

使用特权

评论回复
板凳
jin1song|  楼主 | 2012-4-21 14:56 | 只看该作者
楼上,用你的程序试了一下,发不出去。我把程序改了一下,可以正常收发,但是在收到数据后延时,就发不出去数据,我怀疑是485芯片的时序问题,但不知道问题出现在哪里,程序如下:

void main()
{       
        int i,j = 0;       
        PCA0MD &=~0x40;
        Init_Device();               
        while(1)
        {        
                DE=0;               
                while(RI0==0);   //接收                       
                RI0=0;
                g=SBUF0;
//在这里插入延时程序,就发不出去数据????
                DE=1;        //发送
                  SBUF0=g;             
                        while(TI0==0);  
                   TI0=0;
                             
  }

}

使用特权

评论回复
地板
jin1song|  楼主 | 2012-4-21 15:36 | 只看该作者
求高手。郁闷中。

使用特权

评论回复
5
ningling_21| | 2012-4-21 16:05 | 只看该作者
通过示波器看看波形,就知道问题在哪里了...
另,如果开串口中断,发送前,需关中断,发送完成再开中断。

使用特权

评论回复
6
jin1song|  楼主 | 2012-4-21 17:13 | 只看该作者
请问,用示波器看那几个点的波形,怎么样才能知道问题在哪里?

使用特权

评论回复
7
jin1song|  楼主 | 2012-4-24 11:57 | 只看该作者
串口通信正常了,能发能收,但是在收发之间插入延时,就收不到,是什么问题?

使用特权

评论回复
8
ningling_21| | 2012-4-24 15:32 | 只看该作者
看你的延时有多久...

使用特权

评论回复
9
jin1song|  楼主 | 2012-4-24 15:39 | 只看该作者
延时10ms 就出问题了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:在顺境中感恩,在逆境中依旧心存喜乐,认真的活在当下!

1

主题

250

帖子

2

粉丝