【发布时间】:2014-07-03 04:27:54
【问题描述】:
我已经让 UART TX 在一张图片上工作,但无法让 UART RX 在另一张图片上工作。我的计划是让第一个 PIC 将数据发送到第二个 PIC。
我对第一个 PIC TX 的初始化代码是,
代码:
void configure_TX_port(){
/*Port configurations*/
OSCCON = 0X68;
//Push button
TRISC3 = 1;
INLVLC3 = 0;
ANSC3 = 0;
//Led output
TRISC2 = 0;
//TX output
TRISA2 = 0;
ANSA2 = 0;
/*PPS setup for RA2*/
PPSLOCK = 0x55;
PPSLOCK = 0xAA;
PPSLOCK = 0;
RA2PPS = 0x14;
PPSLOCK = 0x55;
PPSLOCK = 0xAA;
PPSLOCK = 1;
/*UART configuration*/
TXEN = 1;
SYNC = 0;
SPEN = 1;
TXSTA = (0x4|0x20);
SPBRG = (int)(4000000L/(16UL * 9600) -1);
}
我发送数据到tx代码是
代码:
void putch(unsigned char byte) {
/* output one byte */
while (!TXIF) /* set when register is empty */
TXREG = byte;
}
我对第二个 PIC RX 的初始化代码是,
void configure_RX_port(){
/*Port configurations*/
OSCCON = 0X68;
//Led output
TRISC3 = 0;
//RX input
TRISC5 = 1;
ANSC5 = 0;
/*UART configuration*/
CREN = 1;
SYNC = 0;
SPEN = 1;
TXSTA = (0x4|0x20);
RCSTA = 0x90;
SPBRG = (int)(4000000L/(16UL * 9600) -1);
}
我的接收数据代码是,
unsigned char getch(void) {
/* retrieve one byte */
unsigned char ret;
while (!RCIF) { /* set when register is not empty */
}
ret = RCREG;
return ret;
}
当我调试代码时,getch 函数在等待一个字符时被阻塞,但我的另一个 PIC 正在发送数据。在这张 PIC RC5 上是一个指定的 RX 引脚,所以我认为我不需要做任何 pps 配置。
拉胡尔
【问题讨论】:
-
您是否启用了中断?如果可以包含更多细节,例如初始化等,任何人都会得到更多的理解。
-
在这种情况下不需要中断来读取 RCIF 和 TXIF 寄存器,无论如何都设置了它们。
标签: embedded microcontroller pic uart mplab