大家。

我正在使用PIC18F452单片机。 我在UART上接收数据,通过附加额外的同步字来对其进行构架并进行传输,在按顺序发送同步字时会遇到问题。 我要发送的信息是说...带有数据的EA 09 C3。 现在,我用MikroC编写了以下代码:

int j=0;
SPBRG = 129;
TXSTA = 0b00100110;
RCSTA = 0b10010000;
while(1)
{
   if(j == 0)
   {
     TXREG = 0xEA;
   }
   else if(j == 1)
   {
     TXREG = 0x09;
   }
   else if(j == 2)
   {
     TXREG = 0xC3;
   }
   else
   {
    TXREG = RCREG;
   }
   while(!TRMT); // wait for whole data frame to be ready for transmission
  if(j == 100)
     j = 0; // reset j after 100 bytes
  else
     j++;
   }

现在,这里发生的是同步字被发送,但是顺序不正确,有时还会发生字节重复。 我想要的是j仅在传输一个字节后才递增,这里我认为j的递增与传输无关。

感谢期待。

问候,哈桑

===============>>#1 票数:0

uart传输的隐藏规则是:

_ _ 在您发送的每个字节之间放置一点延迟 _ _

请注意,这是独立于波特率的秘密;)。

例如50微秒。

由于发送方和接收方正在异步工作,因此接收时它们在每个字节上花费过多的精力来同步,而您一直在填充它们……它们只是停滞了。 有时会丢弃字节,有时会丢弃而不清除接收寄存器,因此会复制字节。

因此,如果速度至关重要,则首先给每个字节50ms或更长时间的发送延迟,然后如果它使范围变窄,则将其降低至10微秒。 不断缩小范围,直到它再次开始停止为止,最好将延迟设置为该限制的两倍,以实现故障保护。

我希望不要着急或急于追求速度,否则请使用不是usart的其他沟通渠道。

  ask by Hassan translate from so

未解决问题?本站智能推荐:

3回复

uart和pic 18f452的问题

我有pic18f452和uart的问题,我使用最简单的代码: 在永远while循环之间我有这个代码 我也有我的硬件液晶模块它工作得很好,但我在PC上收到的数据是这样的废料 我检查了所有连接sothand时间没有错也我改变了MAX232 ic但没有运气?! 我的硬件就是这
1回复

PIC18F2680上的UART接收不会触发中断

我已经使用这段代码好几天了,无法弄清楚为什么我的中断没有被触发。 我知道数据成功通过,因为我在逻辑分析仪上使用了探针,我的波特率也正确,因为我可以成功传输UART。 此时我迷路了,我一遍又一遍地阅读数据表,无法弄清楚我的问题。 我将尝试仅包含相关代码,但足以让您了解项目中的工作原理。
1回复

UART pic18至pic18

无法发送字符“ C”并显示在接收者照片上。 LCD打印一些特殊字符,没有'C'...;( 的发射机: 接收器: 取消对串行端口新的两张图片18F26K22的操作...不知道如何测试,因为没有设备,我的代码是否好? 我没有在金属上使用Proteus。 谢谢。
2回复

pic32 uart问题

我们在共享的UART总线上拥有一组PIC32 MCU系统,以及一对类似于芯片选择的握手信号的I / O。 一台主机多台从机。 从主机到从机的传输是直接的,并且运行良好。 从机到主机的响应信号经过主机侧的1K电阻和10K上拉电阻。 如果未选择,每个从机必须禁用其UART,以免干扰其他从机的
1回复

PIC18FXXXXX UART Tx消息功能?

我目前正在使用PIC18F67J60尝试使用UART打印出字符串和/或整数值,但只能从中获取“ 00”。 我是嵌入式C的新手,所以现实上可能缺少一些东西。 该函数定义为: 我获得“ 00”以外的任何东西的唯一方法是回显Rx端收到的信息。 所以我有信心这只是我缺乏知识。 我
1回复

UART在pic18上发送错误的字符

我试图通过调用功能通过UART接口发送字符: UART_Write_Text("hello"); 这是uart.c文件中执行的代码: 现在,当我调试它时,我看到它将wright字符写入TXREG。 最后,它发送了以下字符:“ h”,“ e”,“ l”,“ l”,“ o”,“ \\
3回复

UART通信PIC16f877A

我一直在进行一个需要与我的笔记本电脑和微芯片Pic 16f877a进行通信且通信无法正常工作的项目,但是当我将此示例放在Proteus 8上时,效果很好。 我的笔记本电脑上没有RS232(串行端口),但是我已经购买了TTL模块。 我在板上使用8MHz的外部振荡器,波特率为9600 bps。
2回复

PIC12F1572 UART发送器和接收器问题

我正在设计和RGB LED项目,它由PIC12F1572控制。 我使用的软件是带有XC8编译器的MPLAB IDE。 计划是使用串行通信将LED RGB组合数据命令发送到PIC,以存储在一个变量中,使其执行LED闪烁和发光。当我从PC终端发送RGBFF00001FF001F0并在一个阵列中捕
2回复

图16F913 UART通讯设置

我在下面附加了我的代码(我正在闪烁LED以便能够看到循环正在发生,顺便说一句)。 我没有收到通过UART发送的任何数据,我有Pic 16F913,而引脚17是我要获取的输出,我已将其连接到RF-42N蓝牙模块,我知道该模块可以正常工作,因为如果我将rx连接到tx,则会收到回声。 然后,我
1回复

PIC16F887接收到错误的UART数据

我正在用C(XC8)制作清洁机器人,但UART遇到了一些问题。 让我解释: 该项目在PIC16F887和HC06之间获得了UART通信。 以前,该项目具有PIC16F1455并运行良好。 但是我需要更多,并更改了微型。 使用基于Android的应用程序(我永远不会改变,我知道它可以