QUEUE que;
unsigned int pos =0;
/*void delayms(int z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
} */
void Uart_IRQHendler() interrupt 4
{
uint ucTemp;
EA=0;
if(RI == 1) //当硬件接收到一个数据时,RI会置位
{
RI = 0; //接收到一位数据后就让RI为零,关闭中断
ucTemp= SBUF; //保存接收到的数据
if((que._head+1)%QUEUE_MAX_SIZE!=que._tail)
{
que._data[que._head]=ucTemp;
que._head=(que._head+1)%QUEUE_MAX_SIZE;
}
}
EA =1;
}
int main(void)
{
uint recv_data[20]={0};
uint size =0;
uint i,j,temp;
P3M1&=0xFC;
P3M0|=0x03;//P3.0 P3.1
Uart1Init();
queue_reset();
//delayms(10);
while(1)
{
if(queue_size(que)>0)
{
for(i=0;i<queue_size(que);i++)
{
if(que._tail!=que._head)//非空
{
temp = que._data[que._tail];
que._tail= (que._tail+1)%QUEUE_MAX_SIZE;
}//此函数是从队列中取一个数据,而且从队尾开始取
if(pos<QUEUE_MAX_SIZE)
recv_data[pos++] = temp;//将队列中的数据均取出到这个数组中
else
pos =0;
if(temp==0x0A)
{
size = pos;
pos = 0;
}
else
size = 0;
// Uart2Data_SendByte(temp);
}
if(size>0)
{
for(j=0;j<size;j++)
{
Uart1Data_SendByte(recv_data[j]);
}
size =0;
}
}
}
} 我想利用这个程序实现不定长数据的接收,先把接收的数据存入到队列中,然后从队列中取数据,再发送给上位机,我在用串口调试助手发送数据时,在接收缓冲区没有接收到数据,不知道程序那里的问题 |