📄 main.lst
字号:
C51 COMPILER V6.02 MAIN 01/16/2009 14:50:25 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN F:\5000\JOP\洗车计费\C\2\MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\C51.EXE F:\5000\JOP\洗车计费\C\2\MAIN.C DB SB OE
stmt level source
1 /******************************************************************************************\
2 ============================================================================================
3
4 /*******************************************************************************************/
5 #include <reg52.h>
6 #include <intrins.h>
7 #define uchar unsigned char
8 #define uint unsigned int
9 #define ulong unsigned long
10 #define TIME_OF 127 //22.1184M 254 11.0592M 127
11 #define DELAY_VAL 57 //22.1184M时晶振的值,可用软件模拟准确产生延时115 114 11.0592M 57
12
13 /*******************************************************************************************/
14 uchar buf[16];
15 uchar rxbuf[64];
16 uchar rxs;
17 ulong SN;
18 uchar *s;
19 /*******************************************************************************************/
20 sbit BEEP=P1^0;
21 //sbit IN_2270 BIT P1.5 ;2051
22 sbit Manchester_IN=P1^5; //曼彻斯特码输入端
23 sbit CFE = P1^4;
24 sbit MODE = P1^6;
25 sbit green=P3^7;
26
27 /*******************************************************************************************/
28
29 void Inituart(void);
30 void Delay(uchar n);
31 void TxData(uchar x);
32 void com();
33 void spk(uchar x);
34 void spkl(uchar x);
35 void readid();
36 ulong Read_Card();//尝试读十次卡,无卡则返回0,有卡则返回卡号
37 /*******************************************************************************************/
38 //function main();
39 /*******************************************************************************************/
40 void main(void)
41 {
42 1 Inituart(); // initialize 232 uart
43 1 spkl(1);
44 1
45 1 while(1) // circulation
46 1 {
47 2 if (rxs>3)
48 2 {
49 3 com();
50 3 }
51 2
52 2 else
53 2 {
54 3 readid();
55 3
C51 COMPILER V6.02 MAIN 01/16/2009 14:50:25 PAGE 2
56 3 }
57 2 }
58 1 }
59
60 void com_isr(void) interrupt 4 // 串口中断
61 {
62 1
63 1 uint ook;
64 1 ES=0;
65 1
66 1 ook=0;
67 1 while(ook<556)
68 1 {
69 2 rxbuf[rxs]=SBUF;
70 2 RI=0;
71 2 rxs++;
72 2 ook=0;
73 2 while(RI==0)
74 2 {if(ook++>555)break;}
75 2
76 2 }
77 1
78 1 ES=1;
79 1
80 1 }
81
82
83 /*******************************************************************************************/
84 //function Inituart();
85 /*******************************************************************************************/
86 void Inituart(void)
87 {
88 1 TMOD = 0x20; //timer1 working mode 1
89 1 TL1 = 0xfd; //f7=9600 for 16mhz Fosc,and ...
90 1 TH1 = 0xfd; //...fd=19200 for 11.0592mhz Fosc
91 1 SCON = 0x50; //uart mode 3,ren==1
92 1 PCON = 0x00; //smod=0
93 1 TR1 = 1; //start timer1
94 1 ES=1; //串口中断
95 1 EA=1;
96 1 MODE=0;
97 1 CFE=0;
98 1 }
99
100 /*******************************************************************************************/
101 //function Delay100us();Delay 100us
102 /*******************************************************************************************/
103 void Delay(uchar n)
104 {
105 1 uint i;
106 1 while(n--)
107 1 {for(i=0;i<80;i++); }
108 1 }
109
110 /*******************************************************************************************/
111 //Function TxData ();
112 /*******************************************************************************************/
113 void TxData(uchar x)
114 {uint ook;
115 1 ES=0;
116 1 SBUF=x;
117 1 while(TI==0){if(ook++>65530){return ;} }
C51 COMPILER V6.02 MAIN 01/16/2009 14:50:25 PAGE 3
118 1 TI=0;
119 1 ES=1;
120 1 }
121
122 uchar rxdata()
123 { uchar temp,i;
124 1 ES=0;
125 1
126 1 temp=rxbuf[0];
127 1 rxs--;
128 1 for (i=0;i<rxs;i++)
129 1 {
130 2 rxbuf[i]=rxbuf[i+1];
131 2 }
132 1
133 1 ES=1;
134 1
135 1 return temp;
136 1 }
137
138 /*******************************************************************************************/
139 void com() //232串口接收 处理
140 { uchar i,j,crc,temp,orde;
141 1 uint ook;
142 1
143 1 temp=rxdata();
144 1 RI=0;
145 1 if(temp!=0xfe){return ;}
146 1
147 1 ook=0001;
148 1 while(rxs==0){if(ook++>65530){spk(3);return ;} }
149 1 buf[10]=rxdata();
150 1 RI=0;
151 1
152 1 ook=0001;
153 1 while(rxs==0){if(ook++>65530){spk(3);return ;} }
154 1 buf[11]=rxdata();
155 1 RI=0;
156 1
157 1 ook=0001;
158 1 while(rxs==0){if(ook++>65530){spk(3);return ;} }
159 1 orde=rxdata();
160 1 RI=0;
161 1
162 1 ook=0001;
163 1 while(rxs==0){if(ook++>65530){spk(3);return ;} }
164 1 j=rxdata();
165 1 RI=0;
166 1
167 1 crc=j+orde+buf[11]+buf[10];
168 1
169 1 for (i=0;i<j;i++)
170 1 { ook=0001;
171 2 while(rxs==0){if(ook++>65530){spk(3);return ;} }
172 2 buf[i]=rxdata();
173 2 RI=0;
174 2 crc=crc+buf[i];
175 2 }
176 1 ook=0001;
177 1 while(rxs==0){if(ook++>65530){spk(3);return ;} }
178 1 temp=rxdata();
179 1 RI=0;
C51 COMPILER V6.02 MAIN 01/16/2009 14:50:25 PAGE 4
180 1 if(temp!=crc){spk(3);return ;}
181 1
182 1 ook=0001;
183 1 while(rxs==0){if(ook++>65530){spk(3);return ;} }
184 1 temp=rxdata();
185 1 RI=0;
186 1 if(temp!=0xfd){spk(3);return ;}
187 1
188 1
189 1 switch(orde)
190 1 {
191 2 case 02:
192 2 spk(buf[0]);
193 2 break;
194 2 case 03: //FE 00 00 04 00 04 FD
195 2 TxData(0xfe);
196 2 TxData(0x00);
197 2 TxData(0x00);
198 2 TxData(0x04);
199 2 TxData(0x00);
200 2 TxData(0x04);
201 2 TxData(0xfd);
202 2 spk(1);
203 2 break;
204 2 default: break;
205 2 } //end switch
206 1
207 1 }
208
209
210
211 void spk(uchar x)
212 {
213 1
214 1 while(x--)
215 1 {
216 2 BEEP=0;
217 2 green=0;
218 2 Delay(100);
219 2 BEEP=1;
220 2 green=1;
221 2 Delay(50);
222 2
223 2 }
224 1 }
225
226 void spkl(uchar x)
227 {
228 1
229 1 while(x--)
230 1 {
231 2 BEEP=0;
232 2 green=0;
233 2 Delay(255);
234 2 BEEP=1;
235 2 green=1;
236 2 Delay(200);
237 2 }
238 1 }
239
240 //精确的384us延时,此延时可以不严格,但要大于256us小于512us
241 void Delay384us()
C51 COMPILER V6.02 MAIN 01/16/2009 14:50:25 PAGE 5
242 {
243 1 uchar i=DELAY_VAL;
244 1 while(i--);
245 1 }
246 void readid()
247 { uchar i,j,k;
248 1 SN=Read_Card();
249 1 if(SN)
250 1 { ///FE 00 00 01 04 01 02 03 04 12 FD
251 2
252 2 s=&SN;
*** WARNING C182 IN LINE 252 OF F:\5000\JOP\洗车计费\C\2\MAIN.C: pointer to different objects
253 2 for(i=0;i<4;i++)
254 2 {
255 3 buf[10+i]=*s;
256 3 s++;
257 3 }
258 2 SN=Read_Card();
259 2
260 2 if(SN==0)SN=Read_Card();
261 2
262 2 if(SN==0)SN=Read_Card();
263 2
264 2 if(SN==0)SN=Read_Card();
265 2
266 2 if(SN==0)SN=Read_Card();
267 2 if(SN)
268 2 { s=&SN;
*** WARNING C182 IN LINE 268 OF F:\5000\JOP\洗车计费\C\2\MAIN.C: pointer to different objects
269 3 for(i=0;i<4;i++)
270 3 {
271 4 buf[i]=*s;
272 4 s++;
273 4 }
274 3 for(i=0;i<4;i++)
275 3 {
276 4 if (buf[i]!=buf[10+i])return;
277 4 }
278 3 TxData(0xfe);
279 3 TxData(0x00);
280 3 TxData(0x00);
281 3 TxData(0x01);
282 3 TxData(0x04);
283 3 k=0x05;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -