PIC和ARDUINO之间的UART通信

问题描述

enter image description here

我正在尝试将 ARDUINO 串行监视器用于我的 PIC 微控制器以进行调试,通过将 PIC 的 TX 和 RX 引脚与 ARDUINO 连接,我为 PIC16f877A 编写了代码,它确实具有硬件 USART 模块,使用Mikroc 编译器,振荡器频率为 4MHz,当我尝试在 Proteus 中模拟时工作正常,输出在串行监视器(Proteus 内部)和我用作 UART 接收器的另一个微控制器上都可见,但我无法让这件事在 PIC 和 Arduino Uno 之间在物理上工作。屏幕(Arduino IDE 串行监视器)保持空白。 这是使用 Mikroc 的 UART 库的 PIC 发送器的代码

char test[]="Test string Incoming \n";
char *p1;
void main()
{
UART1_init(9600);  //initializing USART module with 9600 baud rate
delay_ms(100);
while(1){
p1=test;
while(*p1){UART1_Write(*p1);   p1++ ;   delay_ms(100);} // writing character one by one on serial transmitter  pin
  }
} 

这是Arduino Uno的代码,它将充当接收器,然后将接收到的字符传输到串行监视器:

char byt;
void setup() {
  Serial.begin(9600);
  Serial.println("This is uart test!");
}

void loop() {
 if (Serial.available()){
 byt= Serial.read();
 if (byt==' ') Serial.println(); 
 else Serial.print(byt);
 }
}

这是我在 Proteus 仿真中用作接收器的另一个 PIC16F877A 的代码

sbit lcd_rs at rb2_bit;sbit lcd_en at rb3_bit;sbit lcd_d4 at rb4_bit; sbit lcd_d5 at rb5_bit; sbit lcd_d6 at rb6_bit; sbit lcd_d7 at rb7_bit;

sbit lcd_rs_direction at trisb2_bit; sbit lcd_en_direction at trisb3_bit; sbit lcd_d4_direction at trisb4_bit;
sbit lcd_d5_direction at trisb5_bit; sbit lcd_d6_direction at trisb6_bit; sbit lcd_d7_direction at trisb7_bit;
char ch;
void main() 
{
lcd_init();
lcd_cmd(_lcd_clear);
lcd_cmd(_lcd_cursor_off);
lcd_out(1,1,"This is UART test!");
UART1_init(9600);
while(1)
{
if (UART1_Data_Ready)
{ ch=UART1_Read();
 lcd_chr(2,ch);}

}

}

有人对此有任何想法吗?

解决方法

您在两侧使用相同的串行端口,而您应该对 PC(IDE 串行监视器)和 SoftwareSerial 或类似库使用串行端口,允许在 PIC 端的指定引脚上使用额外的串行端口。

编辑

enter image description here

假设上图中正确描述了您的配置,您可能希望将来自 Serial1 (PIC) 的内容回显到 Serial (PC),如下所示:

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop() {
  if (Serial1.available()) {
    byte inByte = Serial1.read();
    Serial.print(inByte,BYTE);
  }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...