C UART没有响应
我能够接收以下代码,但不幸的是,没有返回任何内容。我做错了什么C UART没有响应,c,microcontroller,pic,uart,C,Microcontroller,Pic,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
#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;
}
}
}
#包括
#包括“config.h”
#包括
int i=0;
无符号字符消息缓冲区[200];
void main(){
OSCCONbits.IRCF=0b110;//8MHz
TRISB6=0;//设置为输出的TX
TRISB7=0;//将RX设置为输出
//清除发送中断
//设置接收中断
//8位异步模式
//BRGH=1=高波特率模式
//51=((8MHz/波特)/16)-1,波特=9600
Open2USART(USART\U TX\U INT\U OFF&USART\U RX\U INT\U ON&USART\U异步模式
&USART_八位和USART_BRGH_高,51);
RC2IF=0;//重置RX2标志
RC2IP=0;//优先级不高
RC2IE=1;//Eneble RX2中断
INTCONbits.PEIE=1;//启用外围中断
INTCONbits.GIE=1;//启用中断
RCSTA2bits.SPEN=1;//启用USART
而(1){
}
}
无效中断ISR(){
if(PIR3bits.RC2IF==1){
如果(i0;i--)
MessageBuffer[i]=0x00;//清除数组
i=0;
返回;
}
i++;
RC2IF=0;//清除接收标志
}否则{
puts2USART(MessageBuffer);
对于(;i>0;i--)
MessageBuffer[i]=0x00;//清除数组
i=0;
返回;
}
}
}
我正在传输0x41十六进制代码,我检查了示波器,看到它正在被接收。根据我的代码,接收到的数据的回音应该会被发回。当我检查TX引脚时,没有发生任何事情。将USART\u CONT\u RX添加到Open2USART以启用连续接收 此外,最好在中断服务例程中尽可能少地执行必要的操作。考虑一下:
void interrupt ISR () {
char data;
if(PIR3bits.RC2IF == 1) {
data = Read2USART(); // always read byte from RX reg (clears RC2IF)
if(i<200) { // buffer size
MessageBuffer[i] = data; // read byte from RX reg
i++;
}
else{
// flag buffer full error
}
}
}
void中断ISR(){
字符数据;
if(PIR3bits.RC2IF==1){
data=Read2USART();//始终从RX reg读取字节(清除RC2IF)
如果(iTriedprintf()
“要查看代码的哪些部分运行?您可能想将RX引脚设置为输入。不管我是否将RX引脚设置为输入,它不是由端口外围设备声明的,而是由UART本身声明的。看起来“puts2USART”不是数据传输的正确函数。我尝试了“TXREG2=RCREG2;”。因此,接收到的所有内容都正常到发送寄存器,它工作了。但仍在搜索一个函数,该函数将执行类似“发送:”text“的操作,您说“我正在发送0x41十六进制代码”。您是否在0x41之后发送0x0D?在接收到0x0D之前,不会回显接收到的数据。