2
我可以用下面的代码接收,但不幸的是,没有任何回应。我究竟做错了什么?UART没有响应
#include <pic18f25k80.h>
#include "config.h"
#include <usart.h>
int i = 0;
unsigned char MessageBuffer[200];
void main() {
OSCCONbits.IRCF = 0b110; // 8MHz
TRISB6 = 0; // TX set as output
TRISB7 = 0; // RX set as output
// Clear TX interrupt
// Set RX interrupt
// 8-bit Asynch. mode
// BRGH = 1 = high baud mode
// 51 = ((8MHz/baud)/16)-1 with baud = 9600
Open2USART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE
& USART_EIGHT_BIT & USART_BRGH_HIGH, 51);
RC2IF = 0; // reset RX2 flag
RC2IP = 0; // not high priority
RC2IE = 1; // Eneble RX2 interrupt
INTCONbits.PEIE = 1; // enable peripheral interrupts
INTCONbits.GIE = 1; // enable interrupts
RCSTA2bits.SPEN = 1; // enable USART
while(1){
}
}
void interrupt ISR() {
if(PIR3bits.RC2IF == 1) {
if(i<200) { // buffer size
MessageBuffer[i] = Read2USART(); // read byte from RX reg
if (MessageBuffer[i] == 0x0D) { // check for return key
puts2USART(MessageBuffer);
for(;i>0;i--)
MessageBuffer[i] = 0x00; // clear array
i=0;
return;
}
i++;
RC2IF = 0; // clear RX flag
} else {
puts2USART(MessageBuffer);
for(;i>0;i--)
MessageBuffer[i] = 0x00; // clear array
i = 0;
return;
}
}
}
我发送0x41十六进制代码,我检查了范围,看看是否正在接收。根据我的代码,接收到的数据应该被回送。当我检查TX引脚时,什么都没有发生。
尝试了'printf()'来查看代码的哪些部分运行? – 2014-11-03 13:19:15
您可能想要将RX引脚设置为输入 – rm5248 2014-11-03 13:31:45
将RX引脚设置为输入或不是由它决定,它不是由端口外设声明,而是由UART本身声明。 它看起来像'puts2USART'是不正确的数据传输功能。我试过'TXREG2 = RCREG2;'。所以接收到的所有内容都发送到Transmit寄存器,并且工作。但仍然在寻找一个功能,可以做'发送':'文本''' – 2014-11-03 13:58:13