Microchip
直播中

徐丹

7年用户 291经验值
私信 关注
[问答]

PIC12F1822+USART无法正常工作

大家好,我现在正在用PIC12F1822I制作波特率公式,以便使用:-4800波特;8比特;1停止比特;没有奇偶校验;只有TX。我根据公式设置SPBRG=2。eus+Hyperterminal我只有符号……我将附上代码以显示我的设置,也许我的代码没有错,或者我遗漏了寄存器中的一些东西。请原谅我,如果我遗漏了什么东西,我希望你能帮助与您的建议这个问题谢谢。

回帖(13)

夏涌革

2020-4-10 09:15:18
代码行是一个空白页面,在第1行闪烁光标。
举报

王桂香

2020-4-10 09:25:29
我现在可以上传代码了,我以前有问题。对不起的
举报

王焕树

2020-4-10 09:45:24
您似乎已经选择了最坏的可能组合来选择波特率,即BRG16 off和BRGH off。这给您一个如此低的BRG值,以至于有一个巨大的误差。通过公式反向工作,您的实际波特率是1MHz/(64*(2+1))=5208波特。这是一个8.5%的误差。这就是wh的原因。当你在数据表中的BRG表中查找时,他们不会费心显示4800波特,只显示300和1200。如果你设置BRGH,并使用BRG值12,那么实际的波特率将是1MHz/(16*(12+1))=4807这是一个0.15%的错误,好得多。线表示振荡器频率由CONFIG字控制,但是您没有显示CONFIG字,所以我们根本无法验证您选择了什么。它应该等待直到缓冲区为空。
举报

王玉华

2020-4-10 09:52:29
除了QHB的评论,我还要添加测试,如果移位寄存器是EMPTY不是我通常做的。如果测试TXIF,您将知道TXREG是否为空。这时你可以把另一个字节移到txReg中。你不必等到移位寄存器是空的为止。UART提供了一个字节缓冲区。注意在TXIF进入TXREG之后立即测试TXIF的数据表中的警告。这里有两个指令的延迟IIRC。一个样式说明:您可以立即将字节移动到TXREG中,就像现在这样使用代码。但是,如果你想要一个可靠的子程序(稍后),在移动一个字节之前检查它是否是空的。这样,无论输入时TXREG的状态如何,都可以调用代码。如果希望在退出时具有可预测的状态,则可以在退出之前测试任一状态位。目前没有退出,因为“虽然(1)”,但我认为这是暂时的。最后,你不使用中断。这很好,但是随着应用程序的增长,使用中断可能会提高性能。[添加编辑1。]
举报

更多回帖

发帖
×
20
完善资料,
赚取积分