Synchronization 在不同时钟上同步两个8250 UART(微控制器)

Synchronization 在不同时钟上同步两个8250 UART(微控制器),synchronization,microcontroller,uart,8051,Synchronization,Microcontroller,Uart,8051,我正试图找出最好的算法,让我的客户机微控制器(8051)自动同步其uart与主微控制器(也是8051),以便通信可以发生。瓶颈是UART只能保存一个字节。微控制器实际上是AT89S52,因此每个指令都以1/2到1微秒的速度执行,因为我使用22.1184Mhz晶体和33pF NPO电容器 这是我目前掌握的代码。P3.0是微控制器上的接收引脚(数据位进入的位置) 最后四行代码设置串行端口,以便我可以使用软件中断 速度值是8051上确定波特率的计算数字。我使用0FDh的值,因为UART的速度是38.4

我正试图找出最好的算法,让我的客户机微控制器(8051)自动同步其uart与主微控制器(也是8051),以便通信可以发生。瓶颈是UART只能保存一个字节。微控制器实际上是AT89S52,因此每个指令都以1/2到1微秒的速度执行,因为我使用22.1184Mhz晶体和33pF NPO电容器

这是我目前掌握的代码。P3.0是微控制器上的接收引脚(数据位进入的位置)

最后四行代码设置串行端口,以便我可以使用软件中断

速度值是8051上确定波特率的计算数字。我使用0FDh的值,因为UART的速度是38.4Kbps。keil的波特率计算器是我用来最好地确定速度值的

redosync:
    jb P3.0,$ ;scan line twice to see if line is low (is this enough times?)
    jb P3.0,$
    ;Wait for the time of 8 bytes 
    mov TH1,#((256 - SPEED) * 8) 
    w:
      mov ACC,#06h
      djnz ACC,$
    djnz TL1,w 
  ;check end byte twice to see if its a 1
  ;if in any check its not a 1, then start the sync all over again
  jnb P3.0,redosync
  jnb P3.0,redosync
  ;Here the UART is in sync so set it up
  mov TL1,#SPEED
  mov PCON,#80h
  mov SCON,#50h
  setb TR1
我的同步想法正确吗? 如果是这样的话,那么我扫描比特的次数是否足够? 如果我改变数据,情况会有所改善吗

目前数据格式如下:

ffh,ffh用于开始字节 15字节的原始数据
然后,1个字节表示15个字节的校验和

您尝试用此同步解决哪个问题?您知道UART模块在起始位的下降沿自动同步吗?这就是异步串行通信背后的思想。异步串行线上的空闲电平为1,起始位为0,后跟数据位,以及(如果使用)一个奇偶校验位和停止位。停止位是1,因此另一个字节可以立即跟随。这正是UART所擅长的,不同的时钟系统相互通信。当您正常设置UART并正常使用它们时,会发生什么情况?即使是单个字符也应该可以正常使用。您是在使用硬件UART,还是试图在软件中逆转大爆炸?