Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C UART没有响应_C_Microcontroller_Pic_Uart - Fatal编程技术网

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)

如果(iTried
printf()
“要查看代码的哪些部分运行?您可能想将RX引脚设置为输入。不管我是否将RX引脚设置为输入,它不是由端口外围设备声明的,而是由UART本身声明的。看起来“puts2USART”不是数据传输的正确函数。我尝试了“TXREG2=RCREG2;”。因此,接收到的所有内容都正常到发送寄存器,它工作了。但仍在搜索一个函数,该函数将执行类似“发送:”text“的操作,您说“我正在发送0x41十六进制代码”。您是否在0x41之后发送0x0D?在接收到0x0D之前,不会回显接收到的数据。