|
发表于 2012-6-15 09:59:09
|
显示全部楼层
本帖最后由 lcw_swust 于 2012-6-15 10:01 编辑
//FIFO工作模式
#define DTYPE INT16S
//数据类型
//--------------------------------------------------
//全局变量定义定义
//--------------------------------------------------
DTYPE quebuf[QUESIZE];
INT8U que_count=0;//队列元素计数
INT8U que_front=0;//队头
INT8U que_rear=0;//队尾
//--------------------------------------------------
//写队列
//①当头尾指针相等时,队列为空。
//②在非空队列里,队头指针始终指向队头元素,尾指针始终指向队尾元素的下一位置。
//--------------------------------------------------
void QueWrite(DTYPE din)
{
que_count++;
quebuf[que_rear]=din;
que_rear=(que_rear+1)%QUESIZE;//可写成que_rear++;if(que_rear>=QUESIZE)que_rear=0;
}
//--------------------------------------------------
//读取队列
//--------------------------------------------------
DTYPE QueRead(void)
{
DTYPE ret;
//FIFO模式
que_count--;
ret=quebuf[que_front];
que_front=(que_front+1)%QUESIZE;;//可写成que_front++;if(que_front>=QUESIZE)que_front=0;
return ret;
}
//--------------------------------------------------
//队列满(返回1)
//--------------------------------------------------
INT8U QueFull(void)
{
return (que_count==QUESIZE);
}
//--------------------------------------------------
//队列空(返回1)
//--------------------------------------------------
INT8U QueEmpt(void)
{
return (que_count==0);
}
串口中断里:
if(QueFull()==0)QueWrite(drx);//FIFO未满,则写入串口数据
主循环里
if(QueEmpt()==0)dtx=QueRead();//FIFO未空,则读取数据 |
|