微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于UART RXCn标志AVR的基本问题

如何解决关于UART RXCn标志AVR的基本问题

我在学习 AVR 时卡在了中断部分。 数据表说关于 RXCn 标志: "该标志位在接收缓冲区中有未读数据时置位,在接收缓冲区为空时清零 (即,不包含任何未读数据)。”

还有一个用uart获取字符的例子

while ( !(UCSRnA & (1<<RXCn)) );
/* Get and return received data from buffer */
return UDRn;

它会一直在这里等待直到数据来自Uart吗?并且会因为“while(1);”而使mcu无法做任何其他工作?

我知道这个方法是轮询的,我也知道有一个中断方法,但是 mcu 会因此被锁定吗?

解决方法

  1. 是的。当条件 (!(UCSRnA & (1<<RXCn))) 满足时,它将永远等待。 IE。它将等到 UCSRnA 设置了位 RXCn

  2. 如果全局中断标志(I 寄存器中的 SREG 标志)未被清除(通过调用 cli(),进入中断处理程序),则中断仍然能够运行,所有外设(计数器、SPI、TWI 等)在此周期内继续工作。当然循环下面的程序不会执行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。