📄 main.lst
字号:
C51 COMPILER V7.02b MAIN 01/18/2005 21:41:19 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE main.c OMF2 BROWSE DEBUG
stmt level source
1 /****************************************/
2 /* Copyright (c) 2004, 通信工程学院 */
3 /* All rights reserved. */
4 /****************************************/
5
6 #include "head.h"
7
8 void ClearR_bufR_data(); // 清除r_buf和r_data函数
9 void RecOverDeal(); // 串口中断处理函数
10 void TimeOverDeal(); // 超时处理函数
11 void CheckErrorDeal(); // 校验错误处理函数
12 void RecRightDeal(); // 接收正确处理函数
13
14 xdata uchar Flag_Data = 0 ; //数据处理标志位
15 xdata uchar FLag_StartRec = 0 ; //开始接受数据标志位
16 xdata uchar Flag_RecOver = 0 ; //接收结束标志位
17 xdata uchar Flag_TimeOver = 0 ; //接收超时标志位
18 xdata uchar Flag_CheckError = 0 ; //校验错误标志位
19 xdata uchar Flag_CheckRight = 0 ; //接收正确标志位
20
21 xdata uchar gCount = 0 ;
22 xdata uchar r_buf[11]; // 1开始字节"$",1长度字节LEN,
23 // 7字节数据,1校验和字节,
24 // 1 结束字节"*"
25 xdata uchar r_data[7];
26 xdata ulong RecData = 0 ;
27
28 xdata uchar TCount = 0 ;
29 xdata uchar Time0Sel = 0 ;
30
31 /* 定时器0中断服务子程序 */
32 void timer() interrupt 1 using 2
33 {
34 1 if (!Time0Sel)
35 1 {
36 2 if (!Flag_RecOver)
37 2 {
38 3 Flag_TimeOver = 1; //超时100ms
39 3 Flag_CheckError = 0;
40 3 Flag_CheckRight = 0;
41 3 }
42 2 TH0 = -100000/256;
43 2 TL0 = -100000%256;
44 2 ET0 = 0;
45 2 TR0 = 0;
46 2 }
47 1 else
48 1 {
49 2 Time0Sel = 0;
50 2 P1_0 = 0; // 开关控制信号清零,形成脉冲
51 2 ET0 = 1;
52 2 TR0 = 1;
53 2 }
54 1 }
55
C51 COMPILER V7.02b MAIN 01/18/2005 21:41:19 PAGE 2
56 void main(void)
57 {
58 1 ClearR_bufR_data();
59 1 P1_0 = 0;
60 1 Time0Sel = 0;
61 1
62 1 /* 11.0592MHz下,设置串行口2400波特率,工作方式1
63 1 8位数据位,1位停止位,无奇偶校验,*/
64 1 TMOD = 0x21;
65 1 SCON = 0xb8;
66 1 PCON = 0x00;
67 1 /* Timer1 定时器1 */
68 1 TL1 = 0xf4;
69 1 TH1 = 0xf4;
70 1 TR1=1;
71 1
72 1 /* Timer0 */
73 1 PT0 = 1;
74 1 TH0 = -100000/256; //100ms
75 1 TL0 = -100000%256;
76 1
77 1 IE = 0x90;
78 1
79 1 while (1)
80 1 {
81 2 if (Flag_RecOver)
82 2 {
83 3 RecOverDeal();
84 3 Flag_RecOver = 0;
85 3 }
86 2 if (Flag_TimeOver)
87 2 {
88 3 TimeOverDeal();
89 3 Flag_TimeOver = 0;
90 3 RI = 0;
91 3 }
92 2 if (Flag_CheckError)
93 2 {
94 3 CheckErrorDeal();
95 3 Flag_CheckError = 0;
96 3 RI = 0;
97 3 }
98 2 if (Flag_CheckRight)
99 2 {
100 3 RecRightDeal();
101 3 Flag_CheckRight = 0;
102 3 RI = 0; //打开接收中断
103 3 }
104 2 }
105 1 }
106
107 /* 串口中断服务子程序 */
108 void serial ( ) interrupt 4 using 1
109 {
110 1 /* 判断是否收到字符'$',其数值为0x24,置开始接收标志位*/
111 1 if ((!FLag_StartRec) && (SBUF == 0x24))
112 1 {
113 2 FLag_StartRec = 1;
114 2
115 2 /* 启动定时器0,计算超时*/
116 2 TH0 = -100000/256;
117 2 TL0 = -100000%256;
C51 COMPILER V7.02b MAIN 01/18/2005 21:41:19 PAGE 3
118 2 ET0 = 1;
119 2 TR0 = 1;
120 2 }
121 1 if ((FLag_StartRec) && (gCount <11))
122 1 {
123 2 r_buf[gCount ] = SBUF;
124 2 gCount ++;
125 2 }
126 1 /* 判断是否收到字符'*',其数值为0x2A,置接收完成标志位*/
127 1 if ((r_buf[gCount -1] == 0x2A)||(gCount == 11))
128 1 {
129 2 r_buf[gCount -1] == 0x2A;
*** WARNING C275 IN LINE 129 OF MAIN.C: expression with possibly no effect
130 2 Flag_RecOver = 1; //一帧接收完毕
131 2 gCount = 0;
132 2 FLag_StartRec = 0;
133 2
134 2 /* 关闭定时器0 */
135 2 ET0 = 0;
136 2 TR0 = 0;
137 2 }
138 1 else
139 1 {
140 2 RI = 0 ;
141 2 }
142 1 }
143
144 void ClearR_bufR_data(void)
145 {
146 1 uchar xdata k ;
147 1 for (k=0;k++;k<11)
148 1 {
149 2 r_buf[k] = 0;
150 2 }
151 1 for (k=0;k++;k<7)
152 1 {
153 2 r_data[k] = 0;
154 2 }
155 1 }
156
157 /* 接收完成处理函数*/
158 void RecOverDeal(void)
159 {
160 1 uchar xdata j = 0;
161 1 uchar xdata len = 0;
162 1 uchar xdata CheckSum =0 ;
163 1 len = r_buf[1];
164 1 for ( j=0;j++;j<len)
165 1 {
166 2 r_data[j] = r_buf[j+2];
167 2 CheckSum = CheckSum + r_data[j];
168 2 }
169 1 if (CheckSum == r_buf[len+2])
170 1 {
171 2 Flag_CheckRight = 1; //接收正确
172 2 Flag_CheckError = 0;
173 2 Flag_TimeOver = 0;
174 2
175 2 RecData =0;
176 2 for ( j=0;j++;j<r_data[1])
177 2 {
178 3 RecData =r_data[j] + RecData*10;
C51 COMPILER V7.02b MAIN 01/18/2005 21:41:19 PAGE 4
179 3 }
180 2 }
181 1 else
182 1 {
183 2 Flag_CheckError = 1; //校验错误
184 2 Flag_CheckRight = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -