gpt4 book ai didi

assembly - 使用 PIC16F18326 进行背对背 UART 传输 - 跳过字节

转载 作者:行者123 更新时间:2023-12-04 06:31:35 25 4
gpt4 key购买 nike

我正在使用PIC16F18326通过 UART(异步,250k 波特率)传输一些数据。 MCU运行频率为32MHz,实际指令频率为8MHz。

我使用以下汇编代码发送 4 个字节(从 0xAA 到 0xAD - 不要介意无用的重复 BANKMASK):

movlw   0xAA
banksel TX1REG
movwf BANKMASK(TX1REG)
movlw 0xAB
banksel TX1REG
movwf BANKMASK(TX1REG)
movlw 0xAC
banksel TX1REG
movwf BANKMASK(TX1REG)
movlw 0xAD
banksel TX1REG
movwf BANKMASK(TX1REG)
goto $

逻辑分析仪的结果是仅发送了 0xAA 和 0xAD(第一个和最后一个字节)。

我知道我无法连续发送 4 个字节(没有任何延迟,或对 UART 寄存器进行一些检查),但我希望发送 0xAA 和 0xAB(前 2 个字节)。

根据数据表,如果 TX1REG 和 TSR 寄存器为空(这是我的情况,因为我从未发送过任何内容),我可以写入 TX1REG 以开始发送第一个字节,然后在至少 1 个时钟周期后发送我可以将第二个字节排队。根据下面的代码,两次写入之间有3个时钟周期。

那么,到底出了什么问题?

最佳答案

查看 this 的第 367 页关于功能列表:

  • 全双工异步发送和接收
  • 双字符输入缓冲区
  • 单字符输出缓冲区
  • 可编程 8 位或 9 位字符长度
  • 9 位模式下的地址检测
  • 输入缓冲区溢出错误检测
  • 接收到的字符帧错误检测
  • (等)

您遇到的问题就像缓冲区溢出一样。如果这是关于正确的 USART,那么您将得到预期的结果。

更通用的软件位对于循环每个字符并在使用下一个字符加载缓冲区之前等待“缓冲区就绪位”(或任何名称)非常有用。

关于assembly - 使用 PIC16F18326 进行背对背 UART 传输 - 跳过字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55169529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com