📄 fifo.lst
字号:
C51 COMPILER V8.02 FIFO 07/26/2008 19:16:14 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE FIFO
OBJECT MODULE PLACED IN fifo.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe fifo.c DB OE BR
line level source
1 /************************************************************ 已测试
2 * Copyright (C) 2006, 华中科技大学电气与电子科技创新中心 *
3 * All Rights Reserved. *
4 * *
5 * 文件名: fifo.c *
6 * 文件描述: *
7 * *
8 * 当前版本: 1.0 *
9 * 作者: 王璠(wang.fan@smail.hust.edu.cn) *
10 * 完成日期: 2008年7月23日 *
11 ************************************************************/
12 #include"fifo.h"
13
14 #define DEPTH 80 //存储深度设置
15
16 unsigned char xdata fifo[8][DEPTH]; //FIFO寄存器
17 static unsigned char fifowp; //FIFO写指针
18 static unsigned char fiforp; //FIFO读指针
19 //static unsigned char virtualwp; //虚拟写指针,用于Scan
20 //static unsigned char virtualrp; //虚拟读指针,用于Scan
21
22
23
24
25 /*****************************
26 FIFO初始化
27 ******************************/
28 void FIFO_Init(void)
29 {
30 1 fifowp = 0;
31 1 fiforp = 0;
32 1 // virtualwp = 0;
33 1 // virtualrp = 0;
34 1 }
35
36 /*****************************
37 写FIFO
38 ******************************/
39 void WriteFIFO(unsigned char *logic)
40 {
41 1 unsigned char i;
42 1
43 1 for(i=0;i<8;i++)
44 1 {
45 2 fifo[i][fifowp] = logic[i]; //数据写入fifo
46 2 }
47 1
48 1 if(fifowp>DEPTH-1)
49 1 fifowp = 0; //循环指针
50 1 else
51 1 fifowp++; //写指针后移
52 1 if(fifowp==fiforp)
53 1 fiforp = fifowp + 1; //若未读数据被覆盖,读指针移到写指针的上一个单元
54 1
55 1 // virtualwp = fifowp;
C51 COMPILER V8.02 FIFO 07/26/2008 19:16:14 PAGE 2
56 1 // virtualrp = fiforp;
57 1 }
58
59 /******************************
60 读FIFO
61 *******************************/
62 void ReadFIFO(unsigned char *logic) reentrant
63 {
64 1 unsigned char i;
65 1
66 1 for(i=0;i<8;i++)
67 1 {
68 2 if(fifowp == fiforp)
69 2 {
70 3 logic[i] = 0;
71 3 }
72 2 else if(fifowp > fiforp)
73 2 {
74 3 logic[i] = fifo[i][fiforp];
75 3 if(i==7)
76 3 fiforp++;
77 3 }
78 2 else // if(fifowp < fiforp)
79 2 {
80 3 logic[i] = fifo[i][fiforp];
81 3 if(i==7)
82 3 fiforp++;
83 3 if(fiforp == DEPTH)
84 3 fiforp = 0;
85 3 }
86 2 }
87 1
88 1 // virtualwp = fifowp;
89 1 // virtualrp = fiforp;
90 1 }
91
92
93
94
95 /**********************************
96 查看FIFO,不改变读写指针的位置
97 **********************************/
98 /*
99 void ScanFIFO(unsigned char *logic)
100 {
101 unsigned char i;
102
103 for(i=0;i<8;i++)
104 {
105 if(virtualwp == virtualrp)
106 {
107 logic[i] = 0;
108 }
109 else if(virtualwp > virtualrp)
110 {
111 logic[i] = fifo[i][virtualrp];
112 if(i==7)
113 virtualrp++;
114 }
115 else // if(fifowp < fiforp)
116 {
117 logic[i] = fifo[i][virtualrp];
C51 COMPILER V8.02 FIFO 07/26/2008 19:16:14 PAGE 3
118 if(i==7)
119 virtualrp++;
120 if(virtualrp == DEPTH)
121 virtualrp = 0;
122 }
123 }
124 }
125 */
126
127
128 /********************************
129 返回FIFO中的数据量
130 ********************************/
131 unsigned char FIFO_length(void)
132 {
133 1 unsigned char num;
134 1
135 1 if(fiforp == fifowp)
136 1 num = 0;
137 1 else if(fifowp > fiforp)
138 1 num = (fifowp-fiforp);
139 1 else // if(fifowp < fiforp)
140 1 num = (DEPTH-fifowp+fiforp);
141 1
142 1 return num;
143 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 317 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 640 ----
PDATA SIZE = ---- ----
DATA SIZE = 2 3
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -