打印

求助,关于C8051F120两UART之间通信的问题

[复制链接]
4059|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mjj123|  楼主 | 2010-8-31 11:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
UART0与UART1共同使用定时器1产生波特率,都是使用8位,可变波特率工作方式,UART0与UART1的TX,RX相应连接。
UART0发送一个字节的程序如下:
void Send_Char(uchar ch)
{
  SFRPAGE = UART0_PAGE;
SBUF0 = ch; //送入缓冲区
//ch = SBUF0 ;
while(TI0 == 0); //等待发送完毕
TI0 = 0; //软件清零
}
UART1我用中断方式接受,
void UART1_ISR(void) interrupt 20 using 2
{
      uchar rxch;
      if(RI1) //中断标志 RI0=1 数据完整接收
     {
          RI1 = 0; //软件清零
          rxch = SBUF1; //读缓冲
          if(readCounts >=MAX_LEN)  
          {
                   readCounts = 0;
          }
           trdata[readCounts] = rxch; //存入数组,供发送
           readCounts++;
            if (rxch==0x0A)   //字符串结束标志
           {
                   sendlen= readCounts;
                   readCounts = 0;         
           }   
       }
}

发送和接受都是可以的。也可以进入接受中断。但就是接受不都数据,也就是说进入void UART1_ISR(void)后,SBUF1中没用数据。
请问各位,问题出在什么地方呢?谢谢你们!

相关帖子

沙发
ayb_ice| | 2010-8-31 14:16 | 只看该作者
RI1要在读取SBUF1后清零
另外可能是特殊功能寄存器页的问题
...

使用特权

评论回复
板凳
大秦正声| | 2010-8-31 14:53 | 只看该作者
建议先用其中一个串口和电脑的串口通信,下载个串口助手软件!



销售c8051f单片机开发工具、usb、RF 、NET学习板
可以承接相关开发项目以及技术转让!
http://yang96381.blog.163.com

手机:13002928013(杨生)
email: yang96381@163.com

使用特权

评论回复
地板
mjj123|  楼主 | 2010-8-31 15:40 | 只看该作者
回复2楼
谢谢楼上的回答,分页这块的问题我想过,根据手册的说明,进入中断的时候是自动切换寄存器页的。而且我的UART0发送子程序是先切换到UART0_PAGE页的。
那有可能是需要先读后清零RI1吧,我试试。

使用特权

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

本版积分规则

12

主题

54

帖子

0

粉丝