打印

请教89S52串口问题

[复制链接]
1832|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ningling_21|  楼主 | 2009-4-9 19:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用两个单片机通讯,实现数据交换,但为何只能收到一个数据?

程序如下:
A机程序:   功能:接收数据

    while(1)
     {  

      
      dely(200);
      dely(250);
      led=1;
      Delay(6000);
      disp_time();
      
      
      disp_P3();
      disp_P2();
      disp_P1();
      disp_P0();
      

          }
}

/**********************************
串口中断服务程序
**********************************/
void  uart(void) interrupt 4 using 1
{
   unsigned char i;
   unsigned int t;
   
   
   if(RI)
   {
      led=0;
      RI=0;
      buf[0]=SBUF;
      if( buf[0]!=0xaa)
      return;
      
      t=0xfff;

      for(i=0;i<7;i++)
      {
           while(!RI)
         {
            if(t<10)
              return;
            else
              t--;
         }
         buf=SBUF;
         RI=0;
         t=0xfff;
      }
      flag=1;
      count_rx=200;
     
   }
   
}




B机程序: 功能发送


while(1)
 {  

      
    dely(200);
    dely(250);
    led=1;
    Delay(6000);
    EA=0;
    I2C_Gets(0xd0,0x00,7,time);
    EA=1;
    for(j=0;j<1;j++)     
     {
      led=0;
      SBUF=0xaa;
      for(i=0;i<7;i++)
      {
       TI=0;
       SBUF=time;

       //while(!TI);
       //TI=0;
      }
      

     }
     led=1;
 } 
}
/**********************************
串口中断服务程序
**********************************/
void  uart(void) interrupt 4 using 1
{
 TI=0;
}

相关帖子

沙发
ningling_21|  楼主 | 2009-4-9 21:06 | 只看该作者

期待大家分析下原因...

现象描述:接收到MCU只能收到除了 0xaa以外的1个字节 。

其他的数据都是00

使用特权

评论回复
板凳
dandywang| | 2009-4-10 14:01 | 只看该作者

B机程序有问题

使用特权

评论回复
地板
ningling_21|  楼主 | 2009-4-10 19:13 | 只看该作者

高手能否说的详细点?

使用特权

评论回复
5
ningling_21|  楼主 | 2009-4-11 08:06 | 只看该作者

请高手指点一下迷津

使用特权

评论回复
6
ningling_21|  楼主 | 2009-4-12 21:17 | 只看该作者

继续等待中.......

使用特权

评论回复
7
ningling_21|  楼主 | 2009-4-13 20:50 | 只看该作者

还在等待中.........

使用特权

评论回复
8
ningling_21|  楼主 | 2009-4-15 07:07 | 只看该作者

问题补充

只能收到最后一个字节数据

使用特权

评论回复
9
dengm| | 2009-4-15 07:36 | 只看该作者

TI=0; ===>> while(!TI);TI=0;

使用特权

评论回复
10
ht_chb| | 2009-4-15 09:19 | 只看该作者

好像2个程序都有问题

1、接收程序,数组下标用的是局部变量,要改成全局或是静态变量
2、发送程序要等待发送完成一个字节,在发下一个

使用特权

评论回复
11
ningling_21|  楼主 | 2009-4-15 19:33 | 只看该作者

谢谢楼上诸位,问题解决

关闭串口中断,用查询就可以接收全部数据
但用中断(清TI)就不行。

使用特权

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

本版积分规则

5013

主题

17734

帖子

51

粉丝