×
单片机 > 单片机程序设计 > 详情

51单片机的FIFO(先入先出)循环队列实现

发布时间:2020-09-02 发布时间:
|
//////////////////////////////////////////////////////////
// 文件:config.h
//////////////////////////////////////////////////////////
#ifndef __CONFIG_H
#define __CONFIG_H
//这一段无需改动
//This segment should not be modified
#ifndef TRUE
#define TRUE  1
#endif
#ifndef FALSE
#define FALSE 0
#endif
typedef unsigned char  uint8;                   /* defined for unsigned 8-bits integer variable  无符号8位整型变量  */
typedef signed   char  int8;                    /* defined for signed 8-bits integer variable  有符号8位整型变量  */
typedef unsigned short uint16;                  /* defined for unsigned 16-bits integer variable  无符号16位整型变量 */
typedef signed   short int16;                   /* defined for signed 16-bits integer variable   有符号16位整型变量 */
typedef unsigned int   uint32;                  /* defined for unsigned 32-bits integer variable  无符号32位整型变量 */
typedef signed   int   int32;                   /* defined for signed 32-bits integer variable   有符号32位整型变量 */
typedef float          fp32;                    /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */

#i nclude "FIFOQUEUE.h"
#endif
 
 
 
 
//////////////////////////////////////////////////////////
// 文件:FIFOQUEUE.h
//////////////////////////////////////////////////////////
#ifndef _FIFOQUEUE_H
#define _FIFOQUEUE_H
#define ElemType       uint8
#define QueueSize      20
#define QueueFull      0
#define QueueEmpty     1
#define QueueOperateOk 2
struct FifoQueue
{
    uint16 front;
    uint16 rear;
    uint16 count;
    ElemType dat[QueueSize];
};
//Queue Initalize
extern void QueueInit(struct FifoQueue *Queue);
// Queue In
extern uint8 QueueIn(struct FifoQueue *Queue,ElemType sdat);
// Queue Out
extern uint8 QueueOut(struct FifoQueue *Queue,ElemType *sdat);
#endif
 
 
 
//////////////////////////////////////////////////////////
// 文件:FIFOQUEUE.C
//////////////////////////////////////////////////////////
#i nclude "config.h"
//Queue Init
void QueueInit(struct FifoQueue *Queue)
{
    Queue->front = Queue->rear;
    Queue->count = 0;
}
// Queue In
uint8 QueueIn(struct FifoQueue *Queue,ElemType sdat)
{
    if((Queue->front == Queue->rear) && (Queue->count == QueueSize))
                      // full
        return QueueFull;
    }else
                      // in
        Queue->dat[Queue->rear] = sdat;
        Queue->rear = (Queue->rear + 1) % QueueSize;
        Queue->count = Queue->count + 1;
        return QueueOperateOk;
    }
}
// Queue Out
uint8 QueueOut(struct FifoQueue *Queue,ElemType *sdat)
{
    if((Queue->front == Queue->rear) && (Queue->count == 0))
                      // empty
        return QueueEmpty;
    }else
                      // out
        *sdat = Queue->dat[Queue->front];
        Queue->front = (Queue->front + 1) % QueueSize;
        Queue->count = Queue->count - 1;
        return QueueOperateOk;
    }
}
 
 
 
//////////////////////////////////////////////////////////
// 文件:Main.C
//////////////////////////////////////////////////////////
#i nclude
#i nclude "config.h"
void main(void)
{
    struct FifoQueue MyQueue;
    ElemType sh;
    uint8 i;
    QueueInit(&MyQueue);
    while(1)
    {
        for(i = 0;i < 30;i++)
        {
            if(QueueIn(&MyQueue,i) == QueueFull) break;
        }
        for(i = 0;i < 30;i++)
        {
            if(QueueOut(&MyQueue,&sh) == QueueEmpty) break;
        }
    }
    while(1);
}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机的数码管动态扫描方法