UART pic18至pic18

UART pic18至pic18,c,pic,uart,mikroc,C,Pic,Uart,Mikroc,无法发送字符“C”并在接收器pic上显示。LCD打印一些特殊字符,没有“C”;( 传送器: char uart_rd; int uart_rdi; sbit LCD_RS at LATB0_bit; sbit LCD_EN at LATB1_bit; sbit LCD_D4 at LATB5_bit; sbit LCD_D5 at LATB4_bit; sbit LCD_D6 at LATB3_bit; sbit LCD_D7 at LATB2_bit; sbit LCD_RS_Direct

无法发送字符“C”并在接收器pic上显示。LCD打印一些特殊字符,没有“C”;(

传送器:

char uart_rd;
int uart_rdi;

sbit LCD_RS at LATB0_bit;
sbit LCD_EN at LATB1_bit;
sbit LCD_D4 at LATB5_bit;
sbit LCD_D5 at LATB4_bit;
sbit LCD_D6 at LATB3_bit;
sbit LCD_D7 at LATB2_bit;

sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB5_bit;
sbit LCD_D5_Direction at TRISB4_bit;
sbit LCD_D6_Direction at TRISB3_bit;
sbit LCD_D7_Direction at TRISB2_bit;


void main() {
  ANSELA  = 0;                     // Configure AN pins as digital
  ANSELB = 0;
  ANSELC = 0;

  Lcd_Init();

  UART2_Init(9600);               // Initialize UART module at 9600 bps
  Delay_ms(100);                  // Wait for UART module to stabilize



 while (1) {

   UART2_Write('C');
   }
 }
接收人:

char uart_rd;
int uart_rdi;

sbit LCD_RS at LATB0_bit;
sbit LCD_EN at LATB1_bit;
sbit LCD_D4 at LATB5_bit;
sbit LCD_D5 at LATB4_bit;
sbit LCD_D6 at LATB3_bit;
sbit LCD_D7 at LATB2_bit;

sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB5_bit;
sbit LCD_D5_Direction at TRISB4_bit;
sbit LCD_D6_Direction at TRISB3_bit;
sbit LCD_D7_Direction at TRISB2_bit;


void main() {
  ANSELA  = 0;                     // Configure AN pins as digital
  ANSELB = 0;
  ANSELC = 0;

  Lcd_Init();

  UART2_Init(9600);               // Initialize UART module at 9600 bps
  Delay_ms(100);                  // Wait for UART module to stabilize


 while (1) {
    if (UART2_Data_Ready()) {     // If data is received,
     uart_rdi = UART2_Read();     // read the received data,
       uart_rd = uart_rdi;
      LCD_Out(1,1, uart_rd);

   }
 }
}

取消两张图片18F26K22,串口新手…不知道如何测试它,因为没有设备,我的代码好吗?我没有使用Proteus,在金属上工作。谢谢。

我曾经遇到过这个问题,事实是这个字符不是无符号字符。所以试着转换它

...
while (1) {
if (UART2_Data_Ready()) {     // If data is received,
  uart_rdi = UART2_Read();     // read the received data,
  uart_rd = uart_rdi;
  LCD_Out(1,1, (unsigned char) uart_rd);
...

您能否将调试器连接到接收器PIC,看看它是否正确接收字符,而不是仅仅在LCD上正确显示字符?或者,如果它看到字符和/或正确的字符,请打开/关闭指示灯。此外,UART模块不需要时间“稳定”,你划分系统时钟并以特定的比特率结束。当处理器启动并开始执行代码时,时钟的不稳定性可以忽略不计。你说的调试器是什么意思,好像你在谈论示波器,我没有它…我从发送pic得到了一些东西,但我不能在接收器pic上显示它,因为它显示一些符号ols,而不是C字母…在您尝试传输之前,您的接收器是否已通电并正在运行?此外,接收器可能会在向发射器通电时拾取垃圾。我所说的调试器是指类似or的东西。添加延迟(可能10毫秒)在您的写循环中,这样您就不会背对背地写字符了。您知道要发送多少个停止位吗?