////////////////////////////////////////////////////////////////////////// #define FALSE 0 #define TRUE 0xFF #define RECBUFFLEN 8 //Recieve buffer lenth #define WRAP 0x07 extern unsigned char RecBuf[RECBUFFLEN]; extern unsigned char RecCount;//计数器 extern unsigned char PutFifoPt;//存放指针 rearPoint extern unsigned char GetFifoPt;//读取指针 FrontPoint extern unsigned char TempFifo; ////////////////////////////////////////////////////////////////////////
///////////////////////////////////////// // 函数介绍: // 输入参数: // 输出参数: // 返回值 : // 状态: //////////////////////////////////////////// void InitialFifo(void)//FIFO 的初始化应该是关闭中断,不可重入 { // RecCount=0; // PutPt = GetPt = &RecBuf[0]; RecCount = PutFifoPt = GetFifoPt = 0; }
///////////////////////////////////////////// // 函数介绍:特殊卷绕FIFO指针 // 输入参数: // 输出参数: // 返回值 : // 状态: //////////////////////////////////////////// unsigned char McuPutFifo(void) { //关中断 if(RecCount==RECBUFFLEN) { return 0; //我是在主程序里判断RecCount Fail, FIFO FULL } else { *(RecBuf + PutFifoPt) =RCREG;//put data into fifo PutFifoPt++; PutFifoPt = PutFifoPt & WRAP;// WRAP Point RecCount++; return !0; //successful } }
///////////////////////////////////////////// // 函数介绍:特殊卷绕FIFO指针 // 输入参数: // 输出参数: // 返回值 : // 状态: 不能使用 //////////////////////////////////////////// void McuGetFifo()//unsigned char *datapt) //unsigned char McuGetFifo(unsigned char *datapt) { if (0 == RecCount) { return 0;//fail fifo is empty } else { // *datapt = *(RecBuf + GetFifoPt); TempFifo = *(RecBuf + GetFifoPt); GetFifoPt++; GetFifoPt = GetFifoPt & WRAP; RecCount--; // TXREG = 0x44;
} //return 0;
} |