📄 system.lst
字号:
C51 COMPILER V6.23a SYSTEM 02/04/2009 09:04:10 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE SYSTEM
OBJECT MODULE PLACED IN D:\VW\INTEGR~1\HEAD\SYSTEM.OBJ
COMPILER INVOKED BY: C:\comp51\C51.EXE D:\VW\INTEGR~1\HEAD\SYSTEM.C DB SB OE
stmt level source
1 /*
2 +---------------------------------------------------+
3 | Project: SYSTEM with STC12CX052 |
4 | File: SYSTEM.C |
5 | Data: 2008-12-08 |
6 | Version: V 1.0 |
7 | Initial Editor: Li Jifeng |
8 +---------------------------------------------------+
9 | following environments are supported |
10 | Processor: STC12CX052 |
11 | Compiler: WAVE V |
12 | hardware: JF-2008 |
13 +---------------------------------------------------+
14 | Copyright (C) JF Ltd, 2008 |
15 | All Rights reserved |
16 +---------------------------------------------------+
17 | 功能简介: the system function |
18 +---------------------------------------------------+
19 */
20
21 #include "system.h"
22
23 //bit uart_rcv_finish;
24 //static bit uart_start_flag;
25 //bit tx_flag; //串口收发状态标志 tx_flag=1 发状态 tx_flag=0 收状态
26
27 //static UINT8 data DataBuf[5] = {"27"}; //信息区
28 //static UINT8 data send_buf[24] = {"~EC2A3300E000000000FC34"}; //发送数据区
29 //static UINT8 data rec_buf[18] = {"EC2A0033E028000002"}; //接收数据区
30 //static UINT8 data com_n;
31 //static UINT8 data uart_rcv_flag = 0;
32 //static UINT8 data uart_rcv_len;
33 //static UINT8 data uart_rcv_n;
34 //static UINT8 data sum_buf[5] = {"FC40"};
35
36 bit last_level_flag = 0; //上次读卡时电平
37 bit wait_flag = 0; //等待发送标志
38 bit led_flag = 0; //led显示标志
39 bit new_flag = 0; //读到新卡标志
40 UINT8 data wait_time = 40; //等待发送时间 2 秒
41 UINT8 data led_time = 15; //led 闪烁时间 1 秒
42 UINT8 data card_code[12];
43 UINT8 data old_card[12];
44
45 //static UINT16 Txsum1;
46 //static UINT16 Txsum = 0x350;
47 //static UINT16 Rxsum = 0x390;
48 //static UINT16 Rxsum1 = 0x390;
49 //static UINT16 Rxsum2;
50
51 /***********************************************************************************
52 函数名称:uart_send_byte()
53 功能:串口发送函数
54 函数参数:udata:发送的数据
55 ***********************************************************************************/
C51 COMPILER V6.23a SYSTEM 02/04/2009 09:04:10 PAGE 2
56 void uart_send_byte(UINT8 udata)
57 {
58 1 TI = 0;
59 1 SBUF = udata;
60 1 while (TI == 0);
61 1 TI = 0;
62 1 }
63 /***********************************************************************************
64 函数名称:uart_send()
65 功能:串口发送函数
66 函数参数:*send_buf:发送的数据
67 **********************************************************************************
68 void uart_send(UINT8 *send_buf)
69 {
70 while (*send_buf != 0x00)
71 {
72 uart_send_byte(*send_buf);
73 send_buf++;
74 }
75 }*/
76 /***********************************************************************************
77 函数名称:uart_send1()
78 功能:串口发送函数
79 函数参数:*send_buf:发送的数据
80 n:数据个数
81 ***********************************************************************************/
82 void uart_send1(UINT8 *send_buf,UINT8 n)
83 {
84 1 while (n--)
85 1 {
86 2 uart_send_byte(*send_buf);
87 2 send_buf++;
88 2 }
89 1 }
90 /***********************************************************************************
91 函数名称:uart_isr()
92 功能描述:串口中断服务子程序
93 函数参数:无
94 EC2A0033E02800000227FBBF
95 **********************************************************************************
96 static void uart_isr(void) interrupt SIO_VECTOR using 3
97 {
98 UINT8 tmp;
99 if (RI)
100 {
101 RI = 0;
102 tmp = SBUF;
103 if (tmp == '~') //帧头
104 {
105 uart_start_flag = 1;
106 uart_rcv_flag = 0;
107 com_n = 0;
108 }
109 else if (uart_start_flag)
110 {
111 switch (uart_rcv_flag)
112 {
113 case 0:if (tmp == rec_buf[com_n])
114 {
115 com_n++;
116 }
117 else
C51 COMPILER V6.23a SYSTEM 02/04/2009 09:04:10 PAGE 3
118 {
119 uart_start_flag = 0;
120 }
121 if (com_n == 17)
122 {
123 uart_rcv_flag = 1;
124 }
125 break;
126 default:uart_start_flag = 0;
127 break;
128 }
129 }
130
131 }
132 }*/
133 /***********************************************************************************
134 函数名称:PCA_isr()
135 功能描述:PCA中断服务子程序
136 函数参数:无
137 ***********************************************************************************/
138 static UINT8 PCAM0_timer_tick,PCAM0_timer_N;
139 bit PCAM0_timer_out;
140 static void PCA_isr(void) interrupt PCA_VECTOR using 3
141 {
142 1 if (CCF0)
143 1 {
144 2 CCF0 = 0;
145 2 CH = CH_VALUE; //定时记数初值
146 2 CL = CL_VALUE; //定时记数初值
147 2 /*if(wait_flag) //等待发送维根数据标志
148 2 {
149 2 if(--wait_time == 0)
150 2 {
151 2 wait_flag = 0;
152 2 Ready = 1;
153 2 }
154 2 }*/
155 2 if(led_flag) //led 显示
156 2 {
157 3 if(--led_time == 0)
158 3 {
159 4 CR = 0;
160 4 led_flag = 0;
161 4 LED = 1;
162 4 }
163 3 }
164 2 }
165 1 }
166 /***********************************************************************************
167 函数名称:read_head()
168 函数参数:无
169 功 能 : 读U2270程序,
170 U2270B周期为512us
171 1. 启动U2270后等待刷卡脉冲,如果10毫秒内没有脉冲信号退出
172 在等待时间超过2秒没有得到主CPU应答情况取消发送
173
174 ( 1 ) 脉冲宽度>300的脉冲下跳表示数据1, 脉冲上跳表示数据0
175 脉冲宽度<250的脉冲跳变认为是空跳变。 9个连续1是头码
176
177 ( 2 ) 变量n用于记录头码个数. head_flag=0; 等待并解析头码
178 ( 3 ) 变量 j 用于记录数据为宽度,5个位1个字节,4个有效位,
179 1个校验位(低5位)
C51 COMPILER V6.23a SYSTEM 02/04/2009 09:04:10 PAGE 4
180 ( 4 ) 变量 i 用于记录卡号字节数,
181
182 EM卡数据格式如下:
183 ---------------------------------------------------------------------
184 标识头 H H H H H H H H H
185 ---------------------------------------------------------------------
186 用户标识 U7 U6 U5 U4 P 00
187 U3 U2 U1 U0 P 14=
188 ---------------------------------------------------------------------
189 卡片号码 D31 D30 D29 D28 P 00
190 D27 D26 D25 D24 P 00
191 D23 D22 D21 D20 P 0F
192 D19 D18 D17 D16 P 1B
193 D15 D14 D13 D12 P 1D
194 D11 D10 D9 D8 P 05
195 D7 D6 D5 D4 P 0A
196 D3 D2 D1 D0 P 03
197 X = 列校验; P = 行校验 X X X X 0 10
198 =====================================================================
199 00 14 00 00 0F 1B 1D 05 0A 03 10 00
200 00 14 00 00 0F 1B 1E 1D 0A 17 1E 00
201 ***********************************************************************************/
202 void read_head(void)
203 {
204 1 bit head_flag;
205 1 UINT8 data i,j,n,m,s,k;
206 1 UINT8 data *sip;
207 1 union sa
208 1 {
209 1 UINT16 kk;
210 1 UINT8 sk[2];
211 1 }sz;
212 1 for(m=0;m<12;m++)
213 1 {
214 2 card_code[m] = 0;
215 2 old_card[m] = 0;
216 2 }
217 1 s = 0;
218 1 while(s != 2)
219 1 {
220 2 //WDT_CONTR = 0x3c;
221 2 CFE = 0; //启动u2270
222 2 new_flag = 0; //读到新卡标志清零
223 2 head_flag = 0;
224 2 n = 0;
225 2 i = 0;
226 2 j = 0;
227 2 last_level_flag = 0; //上次读卡时电平标志清零
228 2 sip = &card_code;
229 2 TH0 = 0;
230 2 TL0 = 0;
231 2 TR0 = 1;
232 2 while(!DIN)
233 2 {
234 3 if(TH0 > 6)
235 3 {
236 4 TR0 = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -