我用PC给单片机发送7个数据,单片机再传回前5个数据,用debugger是正常的,烧到片子里就接收不正常。我已经调了好多天了,数据手册也研究几遍了,实在是没找到端倪,请大侠们不吝指教。#include "p30f3014.h"
int failmemory[40];
unsigned int receive[7]={0,0,0,0,0,0,0}; // 接收数据数组
unsigned int send[5]={0,0,0,0,0}; // 发送数据数组
unsigned int receive_count=0; // 接收数据个数计数
unsigned int send_count=0; // 发送数据个数计数
unsigned int Receiveflag=0; // =1,接收到7个数据
void Uart_Initial()
{
TRISFbits.TRISF4 =1; //RC脚输入
TRISFbits.TRISF5 =0; //TX脚输出
IFS1bits.U2TXIF=0; //复位发送中断标志位
IFS1bits.U2RXIF=0; //复位接收中断标志位
IPC6bits.U2RXIP=1; //收中断优先级:1级
IPC6bits.U2TXIP=1;
U2MODE=0x8000; //使能UART,8,N,1
U2STA=0x0000; //发送使能
U2BRG=0x31; //9600pds
}
void __attribute__((__interrupt__)) _U2RXInterrupt()
{
while(U2STAbits.URXDA==1)
{
receive[receive_count]=U2RXREG; // 接收数据并存储
receive_count++; // 接收计数器加1
if(receive_count>6) // 如果已经接收到5个数据
{
receive_count=0; // 接收计数器清0
Receiveflag=1;
}
}
IFS1bits.U2RXIF=0;
}
void __attribute__((__interrupt__)) _U2TXInterrupt()
{
while(U2STAbits.TRMT==0);
IFS1bits.U2TXIF=0; //复位发送中断标志位
}
int main(void)
{
unsigned int j=0;
receive_count=0; // 接收数据个数计数
send_count=0; // 发送数据个数计数
Receiveflag=0; // =1,接收到8个数据
Uart_Initial();
for(j=0;j<5;j++){};
IEC1bits.U2RXIE=1 ; //UART1接收使能
IEC1bits.U2TXIE=1; //UART1发送使能
U2STAbits.UTXEN=1;
while(1)
{
if(Receiveflag==1)
{
if(U2STAbits.UTXBF==0)
{
if(send_count<5)
{
U2TXREG=receive[send_count];
send_count++;
}
else
{
Receiveflag=0;
send_count=0;
}
}
}
}
} |