繁体   English   中英

UART通信PIC16f877A

[英]UART communication PIC16f877A

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

当我连接笔记本电脑并发送到TTL模块时,A符号无所nothing形;当我多次发送A时,我会收到像'?'之类的奇怪符号。 或'#'返回。

这是Pic的代码:

char x;
void main(){
  TRISB = 0x00;
  PORTB = 0x00;
  UART1_Init(9600);
  delay_ms(10);
while(1){
  if(UART1_Data_Ready())
  {
     x = UART1_Read();
     if(x == 'A')
     {
         PORTB = 0xFF;
         UART1_Write(13);
         UART1_Write_Text("A");
         UART1_Write(13);
     }
     else
     {
        PORTB = 0x00;
     }
  }
 x= '\0';
}
}

有人能帮我吗 ? 有什么问题 ?

据我所知,有两种可能性(假设UART1_Init(9600);是正确的库函数):

  1. 您没有将Rx引脚设置为输入。 将TRIS寄存器设置为0将使该端口的所有引脚输出。

  2. 您使用不正确的奇偶校验。

你在行上设置断点了吗

x = UART1_Read();

要查看从终端程序发送时实际得到了什么?

您是否查看过示波器以了解Rx引脚上实际输入的内容?

delay_ms(10); 完全没有必要。

@DiBosco,我尝试与注册表一起使用并使用以下代码:

void main() {
char st[] = "PROBA";
int i;
TRISC = 0x00;
TXSTA = 0x24;
RCSTA = 0x80;
SPBRG = 51;
delay_ms(10);
while(1)
{
 for(i=0;st[i]!='\0';i++)
 {
  TXREG = st[i];
  while(!(TXSTA&0x02));
 }
 delay_ms(1000);
}

}

我在程序中得到的是:?????

但是当我在mikroC上使用USART Terminal时,我得到:0xAF 0xAF 0xEB 0xFB 0xFB

PS:在Proteus上,此示例也可以正常工作 :\\

SPBRG = 139

参考此链接设置相应的波特率发生器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM