打印
[AVR单片机]

只接受六位

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

粉丝