[AVR单片机] 只接受六位

[复制链接]
2075|3
 楼主| 恒宇 发表于 2010-12-11 16:35 | 显示全部楼层 |阅读模式
SIGNAL(SIG_UART_RECV)
{
    uchar p;
    ru=UDR;
    setd_2();
for(p=0;p<8;p++)
     {
            while(!(UCSRA&(1<<UDRE)));
   UDR=0xaa;
  }
clrd_2();
}
pc串口只接受六位aa,不知为什么。
airwill 发表于 2010-12-12 08:46 | 显示全部楼层
我不知道你的 setd_2(); clrd_2(); 这两个函数是干什么的.
但推测是 允许和关闭数据发送的. 如果是, 那问题就好解释了.

AVR 的 UART 的发送寄存器是双缓冲的.
当你执行到 clrd_2(); 的时候, 虽然你已经向 UDR 写了 8 次. 但是其实只发送了 6 个 0xAA, 而还有两个还在发送寄存器的缓冲中还没有发送呢, 你就关闭了 发送, 所以 PC 就只能收到 6 个字符了.
你可以试试:
1.  发送 16 个字符, 是不是, 只能收到 14 个?
2. 发送完成后, clrd_2(); 之前加一个延时两个字符的时间(20倍的波特率), 看看是否能够收满 8 个字符了
 楼主| 恒宇 发表于 2010-12-12 09:47 | 显示全部楼层
while (!(UCSRA&(1<<TXC)));
        delay();
无限的感谢斑竹,加上面两条问题解决。
airwill 发表于 2010-12-12 11:07 | 显示全部楼层
不客气, 不过俺不是版主哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

123

帖子

0

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