📄 uart0.lst
字号:
C51 COMPILER V6.23a UART0 04/14/2008 15:21:34 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN Uart0.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe Uart0.c DB OE
stmt level source
1
2 //*********************************************************
3 // 项 目: 通用控制器-V1.0
4 // 文件名: Uart0.C
5 // 描 述: 串口0中断服务程序
6 //*********************************************************
7
8 //===============================================
9 #include "main.h" //全部头文件
10 #include "Uart0.h"
11 #include "MFRC522.h"
12 //===============================================
13
14 //***********************************************
15 //变量定义
16 //***********************************************
17 UCHAR bdata BitFlag1; //位寻址变量
18 sbit NewPack = BitFlag1^0; //串口新数据包标志
19 sbit Head_flag = BitFlag1^1; //串口包头标志
20
21 UCHAR bdata DataFormat; //读卡器数据输出格式
22 sbit ReqMode = BitFlag1^0; //寻卡方式:0-非休眠卡,1-所有卡
23 sbit keySelect = BitFlag1^0; //密钥选择:0=KeyA,1=KeyB
24 sbit OutFomart = BitFlag1^0; //输出格式:1=读系列号,0=读数据块/
25 sbit ReadMode = BitFlag1^0; //读卡方式:0=块,1=字节
26 sbit AutoSend = BitFlag1^0; //自动发送:0=被动,1=自动
27
28 extern UCHAR xdata rx_buf[TX_PLOAD_WIDTH]; //
29 extern UCHAR xdata tx_buf[TX_PLOAD_WIDTH];
30 extern UCHAR data SetxxBuf [4];
31
32 UCHAR data CardId; //读卡器地址
33 UCHAR data SioBurd; //读卡器波特率
34 UCHAR data CardCs1; //读卡器参数1
35
36 UCHAR data Sio_Lth;
37 UCHAR idata Pack_len; //数据长度
38 UCHAR idata ComTBufHead, ComTBufTail;
39 UCHAR idata ComRBufHead, ComRBufTail;
40
41 UCHAR xdata ComTBuf[Com0TBuf_len] _at_ Com0TBuf_addr; //00H
42 UCHAR xdata ComRBuf[Com0RBuf_len] _at_ Com0RBuf_addr; //40H
43 //***********************************************
44 //函数开始
45 //===============================================
46 //初始化UART0
47 //===============================================
48 void Init_Com0(void) //初始化串口0
49 {
50 1 ClearComRBuf(); //清发送、接收缓冲区
51 1 OpenCom0(); //设置串口0
52 1 }
53 //-----------------------------------------------
54 //清发送、接收缓冲区
55 //-----------------------------------------------
C51 COMPILER V6.23a UART0 04/14/2008 15:21:34 PAGE 2
56 void ClearComRBuf(void) //
57 {
58 1 unsigned char i;
59 1
60 1 ComRBufHead=ComRBufTail=0;
61 1
62 1 ComTBufHead=ComTBufTail=0;
63 1
64 1 for (i=0;i<Com0TBuf_len;i++)
65 1
66 1 { ComTBuf[i]=0; } //清发送缓冲区
67 1
68 1 for (i=0;i<Com0RBuf_len;i++)
69 1
70 1 { ComRBuf[i]=0; } //清接收缓冲区
71 1
72 1 }
73 /***********************************************
74 //打开UART0
75 /***********************************************/
76 void OpenCom0(void)
77
78 { //CKCON=T3H,T3L,T2H,T2L,T1,T0,SCA1,SCA0
79 1 CKCON &= 0xF7; //T1M=0,T1CLK=SYSCLK/12
80 1 TMOD = 0x21; //T1 方式2,重加载
81 1 TH1 = TBUAD; //MAIN.H定义:256-SYSCLK/12/BUAD=106
82 1 TR1 =1; //S0MD,-,MCE0,REN0,TB80,RB80,TI0,RI0
83 1 SCON0 = 0x30; // 0 0 1 1 0 0 0 0
84 1
85 1 ComTBufHead=ComTBufTail=0; //置发送缓冲头、尾指针=0
86 1 ComRBufHead=ComRBufTail=0; //置接收缓冲头、尾指针=0
87 1 ES0=1; //容许串口0中断
88 1 }
89
90 /***********************************************
91 //UART0中断处理程序
92 //接收数据包格式:STX,长度,目地,源地,类型,命令.....ETX
93 // AA 10 25 81 01 XX BB
94 /***********************************************/
95
96 void CommISR(void) interrupt 4
97 {
98 1 if (RI0==1)
99 1
100 1 { RS232_Rev(); }
101 1
102 1 //串口发送中断处理
103 1 if (TI0==1)
104 1
105 1 { RS232_Send();}
106 1 }
107 /***********************************************
108 //串口接收中断处理
109 /***********************************************/
110 void RS232_Rev(void)
111 {
112 1 unsigned char tmp;
113 1
114 1 RI0=0; //接收数据
115 1 tmp = SBUF0;
116 1 ComRBuf[ComRBufTail]=tmp;
117 1 ComRBufTail++; //存储指针+1
C51 COMPILER V6.23a UART0 04/14/2008 15:21:34 PAGE 3
118 1
119 1 if (Head_flag == FALSE)
120 1
121 1 {
122 2 ComRBufTail = 0;
123 2
124 2 if (tmp==0xAA)
125 2 {
126 3 ComRBufTail=1; //发现AA包头,指针=01
127 3 Head_flag=TRUE; //置包头标志
128 3 }
129 2 return;
130 2 }
131 1
132 1 if (ComRBufTail == 2 && tmp != CardId)
133 1
134 1 { //地址不符合,禁止接收
135 2 ComRBufTail = 0;
136 2 Head_flag = FALSE; //清包头标志
137 2 return;
138 2 }
139 1
140 1 //AA包头,地址符合
141 1
142 1 if (ComRBufTail>=Com0RBuf_len)
143 1
144 1 { //包长异常
145 2 NewPack=0;
146 2 Head_flag=0;
147 2 ComRBufTail=0; //重新开始
148 2 return;
149 2 }
150 1
151 1 if (tmp==0xBB && ComRBufTail==ComRBuf[2]+5) //判包尾标志BB,
152 1
153 1 { //已收包尾,且包长>6
154 2 Pack_len=ComRBufTail; //数据包长度
155 2 ComRBufTail=0;
156 2 Head_flag=0;
157 2 NewPack=1;
158 2 Pack_Exec(); //数据包解析
159 2 }
160 1 }
161
162 /***********************************************
163 //串口发送中断处理
164 /***********************************************/
165 void RS232_Send(void)
166 {
167 1 TI0=0; //清发送中断
168 1
169 1 if (ComTBufHead==Com0TBuf_len)
170 1 {
171 2 ComTBufHead=0; //到最大长度指针归零
172 2 }
173 1 if (ComTBufHead<Sio_Lth) //
174 1 {
175 2 SBUF0=ComTBuf[ComTBufHead]; //未完发送下字节
176 2 ComTBufHead++;
177 2 }
178 1 else RW485 = 0;
179 1 }
C51 COMPILER V6.23a UART0 04/14/2008 15:21:34 PAGE 4
180 /***********************************************
181 //接收数据包解析:
182 /***********************************************/
183 void Pack_Exec(void)
184 {
185 1 unsigned char i,ptype,pcom;
186 1
187 1 if (NewPack)
188 1
189 1 {
190 2 pcom = ComRBuf[3]; //包命令
191 2
192 2 switch (pcom)
193 2
194 2 {
195 3 case 0x80: //设置信息
196 3
197 3 Card_Setxx();
198 3
199 3 break;
200 3 //-------------------
201 3 case 0x81: //
202 3 Read_Setxx(); //读设置信息
203 3 break;
204 3 //-------------------
205 3 case 0x8E: //设置读卡器输出方式
206 3
207 3 break;
208 3 //-------------------
209 3 case 0x21: //输出到P1口
210 3
211 3 break;
212 3 //-------------------
213 3 case 0x22: //
214 3 i=3;
215 3 break;
216 3 //-------------------
217 3 default:
218 3 i=0xff; //
219 3 break;
220 3 }
221 2 NewPack = 0;
222 2 }
223 1
224 1 }
*** WARNING C280 IN LINE 185 OF UART0.C: 'ptype': unreferenced local variable
225 /***********************************************
226 //上位机设置读卡器参数
227 /***********************************************/
228 void Card_Setxx(void)
229 {
230 1 unsigned char i;
231 1 i = 1;
232 1
233 1 SetxxBuf[0] = ComRBuf[4];
234 1 SetxxBuf[1] = ComRBuf[5];
235 1 SetxxBuf[2] = ComRBuf[6];
236 1 SetxxBuf[3] = ComRBuf[7];
237 1 //
238 1 CardId = SetxxBuf[0];
239 1 SioBurd = SetxxBuf[1];
240 1 DataFormat = SetxxBuf[2];
C51 COMPILER V6.23a UART0 04/14/2008 15:21:34 PAGE 5
241 1 CardCs1 = SetxxBuf[3];
242 1 //擦除FLASH
243 1 FLASH_PageErase (FLASH_TEMP);
244 1 //设置写FLASH
245 1 FLASH_Write (FLASH_TEMP, SetxxBuf, 4);
246 1 //设置命令回答
247 1 Cmd_Ack();
248 1
249 1 }
250 //===============================================
251 //读设置信息
252 //===============================================
253 void Read_Setxx(void)
254 {
255 1 ComTBuf[0] = 0xaa; //
256 1 ComTBuf[1] = CardId;
257 1 ComTBuf[2] = 04;
258 1 ComTBuf[3] = 0; //'00'OK
259 1 ComTBuf[4] = CardId;
260 1 ComTBuf[5] = SioBurd;
261 1 ComTBuf[6] = DataFormat; //读P1口状态
262 1 ComTBuf[7] = CardCs1;
263 1 ComTBuf[8] = 0xbb;
264 1 //
265 1 RW485 = 1; //使能发送
266 1 ComTBufHead=1;
267 1 Sio_Lth = 9;
268 1 SBUF0 = ComTBuf[0]; //启动串口发送
269 1 }
270 //===============================================
271 //读本地口状态:读口状态并生成数据包
272 //===============================================
273 void Cmd_Ack(void)
274 {
275 1 ComTBuf[0] = ComRBuf[0]; //
276 1 ComTBuf[1] = ComRBuf[1];
277 1 ComTBuf[2] = ComRBuf[2];
278 1 ComTBuf[3] = 0; //'00'OK
279 1 ComTBuf[4] = ComRBuf[4];
280 1 ComTBuf[5] = ComRBuf[5];
281 1 ComTBuf[6] = ComRBuf[6]; //读P1口状态
282 1 ComTBuf[7] = ComRBuf[7];
283 1 ComTBuf[8] = ComRBuf[8];
284 1 //
285 1 RW485 = 1; //使能发送
286 1 ComTBufHead=1;
287 1 Sio_Lth = 9;
288 1 SBUF0 = ComTBuf[0]; //启动串口发送
289 1 }
290 //********************************************
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 522 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 3
IDATA SIZE = 5 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -