如何解决PIC和ARDUINO之间的UART通信
我正在尝试将 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 端的指定引脚上使用额外的串行端口。
编辑
假设上图中正确描述了您的配置,您可能希望将来自 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);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。