我不知道你的 setd_2(); clrd_2(); 这两个函数是干什么的.
但推测是 允许和关闭数据发送的. 如果是, 那问题就好解释了.
AVR 的 UART 的发送寄存器是双缓冲的.
当你执行到 clrd_2(); 的时候, 虽然你已经向 UDR 写了 8 次. 但是其实只发送了 6 个 0xAA, 而还有两个还在发送寄存器的缓冲中还没有发送呢, 你就关闭了 发送, 所以 PC 就只能收到 6 个字符了.
你可以试试:
1. 发送 16 个字符, 是不是, 只能收到 14 个?
2. 发送完成后, clrd_2(); 之前加一个延时两个字符的时间(20倍的波特率), 看看是否能够收满 8 个字符了
|