Serial port 8051与nfc的串行缓冲通信

Serial port 8051与nfc的串行缓冲通信,serial-port,microcontroller,keil,8051,Serial Port,Microcontroller,Keil,8051,我有串行通信微控制器8051的问题。我的硬件MCU带有att7035au和模块-1350M CJH NFC读卡器。我已经测试了pc机和mcu的接收和传输与usb ttl/rs232进行得很好。用于成功无误地发送1个字符和长度数据。但是在我尝试在mcu和NFC模块之间进行通信之后,在从NFC接收数据的过程中出现了一个错误。我使用中断来接收数据 例如: mcu发送(十六进制数据): NFC接收数据mcu并发送反馈: 02 55 00 02 FF AA mcu从NFC接收数据时应(025500 02

我有串行通信微控制器8051的问题。我的硬件MCU带有att7035au和模块-1350M CJH NFC读卡器。我已经测试了pc机和mcu的接收和传输与usb ttl/rs232进行得很好。用于成功无误地发送1个字符和长度数据。但是在我尝试在mcu和NFC模块之间进行通信之后,在从NFC接收数据的过程中出现了一个错误。我使用中断来接收数据

例如: mcu发送(十六进制数据):

NFC接收数据mcu并发送反馈:

02 55 00 02 FF AA
mcu从NFC接收数据时应(
025500 02 FF AA
)已接收

02 55 00 02 FF 05
什么问题?为什么MCU读取接收数据错误

我的代码配置:

BWPR = 0xcf;
BWPR = 0xbc;
PLLCFG = 0x87;  
CLKCFG |= 0x04;
EA = 1;     
//Serial config 0   
SCON0 = 0x50 ;                  //SCON: serail mode 1, 8-bit UART
PCON|=0x80;                     //PCON.7 (SMOD)  Indicate  Baud rate double 
SMOD_1=1;                       //ADCON.7 
S0RELL=0xfd;                    //115200bps
S0RELH=0x03;
TI=0;
RI=0;
ES0 = 1 ;       
编辑添加代码中断:

void    UART_0(void)    interrupt   4
{
    if(SCON0&0x01){     //RI=1
        SCON0=SCON0&0xfc;       //RI=0
        card_id[RECE_NUMB]=SBUF0;
        if(RECE_NUMB==6){
            if(card_id[1]==0x02&&card_id[2]==0x55&&card_id[5]==0xff){
                f_ReceiveSucceed=1;
                SCON0&=0xef;                 //disable receive
            }
        }
        ++RECE_NUMB; 
    }
    SCON0=0x50;      
}
对于主代码(无效):

如果获得接收,则我发送到serialcommunication(),用于使用usb ttl进行监视器数据串行

void SerialCommunication(void){
    unsigned char count;
    ES0 = 0;
    for(count=0;count<=50;count++)
    { 
        SBUF0=card_id[count];
        while(TI==0);
        TI=0;
    }
    ES0 = 1;
    clear();
    SCON0=0x50;  //open receive

}

void clear(void)
{
    unsigned char r;
    for(r=0;r<50;r++){
        card_id[r]=0x00;
    }
    RECE_NUMB=0;
}
void串行通信(void){
无符号字符计数;
ES0=0;

对于(count=0;count您是否使用串行接收缓冲区以及缓冲区的长度?可能需要查看串行中断例程和处理字符的代码以提供更多诊断。感谢@jeff,我使用了很长的缓冲区例如:我将数据字符a发送到Z在MCU和PC之间不是问题(使用usb ttl/rs-232)但是,当使用NFC读卡器时,出现了一个数据错误。我正在添加行代码,您可以在串行通信例程中看到它,您在0处启动串行缓冲区,但是我注意到,在UART\u 0中断例程中,您测试的卡\u id[1]==0x02,我希望该字符位于卡\u id[0]中。我不知道这是否与您的错误有关。我发现配置中断优先级有问题,因为我也设置了其他中断。谢谢您的帮助
while(1)
{ 
//...
//lines of code to send NFC
//...

if(f_ReceiveSucceed)
    {
        f_ReceiveSucceed=0;
        SerialCommunication();                      
    }           
}
void SerialCommunication(void){
    unsigned char count;
    ES0 = 0;
    for(count=0;count<=50;count++)
    { 
        SBUF0=card_id[count];
        while(TI==0);
        TI=0;
    }
    ES0 = 1;
    clear();
    SCON0=0x50;  //open receive

}

void clear(void)
{
    unsigned char r;
    for(r=0;r<50;r++){
        card_id[r]=0x00;
    }
    RECE_NUMB=0;
}