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

[复制链接]
 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部

12

主题

54

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部