📄 function.lst
字号:
C51 COMPILER V7.50 FUNCTION 07/17/2008 22:58:13 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE FUNCTION
OBJECT MODULE PLACED IN function.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE function.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <REGX52.H>
2 #include <main.h>
3 #include <function.h>
4 #include <typeb.h>
5 /***************************
6 *串口缓冲区
7 ****************************/
8 static idata volatile com com_buff;
9 /***************************
10 *函 数:延时程序
11 *void delay(uchar a)
12 *输入函数
13 ***************************/
14 void Delay(uchar a)
15 {
16 1 static uchar b;
17 1
18 1 while(--a)
19 1 {
20 2 for(b=0;b<255;b++);
21 2 }
22 1 }
23
24 /******************************
25 *函数:写MFRC500
26 *void WriteIO(uchar Address,uchar value)
27 *
28 *********************************/
29 void WriteIO(uchar Address,uchar value)
30 {
31 1 uchar xdata *pa;
32 1
33 1 pa=Base_addr;
34 1
35 1 EA = 0; //关闭中断
36 1
37 1 CS_RC500(); //选中MFRC500
38 1
39 1 *pa=Address>>3;
40 1 pa=Address+Base_addr;
41 1 *pa=value;
42 1
43 1 UCS_RC500(); //不先中MFRC500
44 1
45 1 EA = 1;
46 1 }
47
48
49 /******************************
50 *函数:读MFRC500
51 *uchar ReadIO(uchar Address)
52 *返回来为uchar
53 *********************************/
54 uchar ReadIO(uchar Address)
55 {
C51 COMPILER V7.50 FUNCTION 07/17/2008 22:58:13 PAGE 2
56 1 static uchar xdata *pa;
57 1 static uchar temp;
58 1
59 1 pa=Base_addr;
60 1
61 1 EA = 0; //关闭中断
62 1
63 1 CS_RC500(); //选中MFRC500
64 1
65 1 *pa=Address>>3;
66 1 pa=Address+Base_addr; //读取MFRC500
67 1 temp = *pa;
68 1
69 1 UCS_RC500(); //不选中MFRC500
70 1
71 1 EA = 1; //开中断
72 1
73 1 return(temp); //返回从MFRC500读出来的值
74 1 }
75
76
77 /******************************
78 *函数:蜂鸣器发声
79 *void BellSpeak(void)
80 *无返回值
81 *********************************/
82 void BellSpeak(void)
83 {
84 1 Bell=0; //输出低电平
85 1 Delay(20); //发出响声
86 1 Bell=1; //关闭峰鸣器
87 1 }
88
89 /******************************
90 *函数名称:void system_initial(void)
91 *函数功能:系统初始化
92 *函数说明:初始化整个系统
93 *返 回 值:无返回值
94 *********************************/
95 /****************************
96 *COM初始化
97 *无-->
98 *无-->
99 *Fosc = 22.1184Mhz,Baud = 115200
100 *Reload = Int(22118400/115200/32+0.5)
101 * = Int(6.5)
102 * = 6
103 * = 0006H
104 *10000H - 0006H = FFFAH
105 *RCAP2H = 0xff
106 *RCAP2L = 0xfa
107 *****************************/
108 void system_initial(void)
109 {
110 1 //IO口初始化
111 1 P0 = 0xff;
112 1 P1 = 0xff;
113 1 P2 = 0xff;
114 1 P3 = 0xff;
115 1 //串口初始化
116 1 SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
117 1 TMOD = 0x20; //TMOD: timer 1, mode 2, 8-bit reload
C51 COMPILER V7.50 FUNCTION 07/17/2008 22:58:13 PAGE 3
118 1 TH1 = 0xFd; //Baud:9600 fosc=11.0592MHz
119 1 TL1 = 0xF4;
120 1 TR1 = 1; // timer 1 run
121 1 ES = 0;
122 1 EA = 0;
123 1
124 1 }
125
126 /****************************
127 *串口发送一个字节
128 *输入-->unsigned char ch
129 *返回-->无
130 *****************************/
131 void send_char_com(unsigned char ch)
132 {
133 1 SBUF=ch;
134 1 while(TI==0);
135 1 TI=0;
136 1 }
137
138 /****************************
139 *串口发送字符串
140 *输入-->unsigned char *str;unsigned char strlen ->字符串指针;字符串长度
141 *返回-->无
142 *****************************/
143 void send_string_com(unsigned char *str,unsigned char strlen)
144 {
145 1 unsigned char k=0;
146 1
147 1 do
148 1 {
149 2 send_char_com(*(str + k)); //发送字符串数据
150 2 k++;
151 2 } while(k < strlen);
152 1 }
153
154 /****************************
155 *韦根延时100us
156 *输入-->无
157 *返回-->无
158 *****************************/
159 void dealay100us(void)
160 {
161 1 TH0 = 0xff;
162 1 TL0 = 0xa3;
163 1 TF0 = 0;
164 1 TR0 = 1;
165 1 while (!TF0);
166 1 TR0 = 0;
167 1 TF0 = 0;
168 1
169 1 }
170
171 /****************************
172 *韦根延时1500us
173 *输入-->无
174 *返回-->无
175 *****************************/
176 void dealay1500us(void)
177 {
178 1 TH0 = 0xfa;
179 1 TL0 = 0x99;
C51 COMPILER V7.50 FUNCTION 07/17/2008 22:58:13 PAGE 4
180 1 TF0 = 0;
181 1 TR0 = 1;
182 1 while (!TF0);
183 1 TR0 = 0;
184 1 TF0 = 0;
185 1 }
186
187 /****************************
188 *韦根发送数据
189 *输入-->*str
190 *返回-->无
191 *1:区号 2:ID号高位 3:ID号低位
192 *****************************/
193 void send_wiegand26(uchar *str)
194 {
195 1 uchar idata i,j;
196 1 static uchar data one_num; //计算1的个数
197 1 uchar data check_temp; //韦根包奇偶效验中间暂存
198 1 bit data even; //韦根包前12位偶效验
199 1 bit data odd; //韦根包后12位齐效验
200 1 static uchar data wiegand[3]; //韦根包数据24位
201 1 //计算前8位1的个数,为偶效验用
202 1 wiegand[0]=*str;
203 1 check_temp = wiegand[0];
204 1
205 1 for(i = 0;i<8;i++)
206 1 {
207 2 if(check_temp&0x01) //(check_temp&0x01)
208 2 {
209 3 one_num++;
210 3 }
211 2
212 2 check_temp >>= 1;
213 2 }
214 1
215 1 wiegand[1] = *(str+1);
216 1 //计算接下来的4位1的个数,为偶效验用
217 1 check_temp = wiegand[1];
218 1
219 1 for(i = 0;i<4;i++)
220 1 {
221 2 if(check_temp&0x80)
222 2 {
223 3 one_num++;
224 3 }
225 2
226 2 check_temp<<=1;
227 2 }
228 1 //判断1的个数
229 1 one_num%2 == 0 ? (even = 0):( even = 1);
230 1 one_num = 0;
231 1 //计算接下来的4位1的个数,为奇效验用
232 1 check_temp = wiegand[1];
233 1
234 1 for(i = 0;i<4;i++)
235 1 {
236 2 if(check_temp&0x01)
237 2 {
238 3 one_num++;
239 3 }
240 2
241 2 check_temp>>=1;
C51 COMPILER V7.50 FUNCTION 07/17/2008 22:58:13 PAGE 5
242 2 }
243 1
244 1 wiegand[2] =*(str+2);
245 1 //计算接下来的8位1的个数,为奇效验用
246 1 check_temp = wiegand[2];
247 1
248 1 for(i = 0;i<8;i++)
249 1 {
250 2 if(check_temp&0x01)
251 2 {
252 3 one_num++;
253 3 }
254 2
255 2 check_temp >>= 1;
256 2
257 2 }
258 1 //判断1的个数
259 1 one_num%2 == 0 ? (odd = 1):( odd = 0);
260 1 one_num = 0;
261 1
262 1 //启动发送,用定时器做时间延时
263 1 //韦根 输出端初始化
264 1 Wgl = 1;
265 1 Wgh = 1;
266 1 //发送偶效验
267 1
268 1 //enen韦根包前12位偶效验标志
269 1 if(even)
270 1 {
271 2 Wgh = 0;
272 2 dealay100us();//延时100us
273 2 Wgh = 1;
274 2 }
275 1 else
276 1 {
277 2 Wgl = 0;
278 2 dealay100us();//延时100us
279 2 Wgl = 1;
280 2 }
281 1
282 1 dealay1500us();//延时一个发送周期
283 1
284 1 //发送24位数据
285 1 for(j=0;j<3;j++)
286 1 {
287 2 for(i = 0;i<8;i++)
288 2 {
289 3 //韦根 输出端初始化
290 3 if((wiegand[j])&0x80)
291 3 {
292 4 Wgh = 0;
293 4 dealay100us();//延时100us
294 4 Wgh = 1;
295 4 }
296 3 else
297 3 {
298 4 Wgl = 0;
299 4 dealay100us();//延时100us
300 4 Wgl = 1;
301 4 }
302 3
303 3 wiegand[j] <<= 1;
C51 COMPILER V7.50 FUNCTION 07/17/2008 22:58:13 PAGE 6
304 3
305 3 dealay1500us();//延时一个发送周期
306 3 }
307 2 }
308 1 //发送奇效验位
309 1 //韦根 输出端初始化
310 1 //韦根包后12位后效验标志
311 1 if(odd)
312 1 {
313 2 Wgh = 0;
314 2 dealay100us();//延时100us
315 2 Wgh = 1;
316 2 }
317 1 else
318 1 {
319 2 Wgl = 0;
320 2 dealay100us();//延时100us
321 2 Wgl = 1;
322 2 }
323 1 }
324
325
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 466 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 3
IDATA SIZE = 12 2
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -