📄 serial.lst
字号:
160 /*===============================================================
161 功能:串口接收任务
162 参数:无
163 返回:无
164 说明:缓冲区采用先进先出的原则,当缓冲区已满则停止接收
165 邮件的参数是接收数据的长度。只有接收到数据头才开始接收数据
166 ===============================================================*/
167 void Serial_RECV_Task(void) _task_ SRECV_TASK_ID
168 {
169 1 static uchar xdata _index;
170 1 static uint xdata _data;
171 1 while(1)
172 1 {
173 2 //os_wait(K_SIG,0x00,0x00); //等待串口接收数据
174 2 os_wait(K_MBX+MBX_SERAIL_RECV, 0x00, &_data);
175 2 if(cRecvBuffCnt < RECV_GRUOP)
176 2 {//接收缓冲区未满
177 3 _index = (cRecvBuffPtr+cRecvBuffCnt) % RECV_GRUOP; //缓冲区的偏移地址
178 3 if((uchar)_data == 0xFF)
179 3 {//如果收到起始符
C51 COMPILER V7.10 SERIAL 08/03/2006 13:15:14 PAGE 4
180 4 cRecvBuff[_index][0] = 0xFF;
181 4 cRecvBuffNum = 0x01;
182 4 }
183 3 else if( (cRecvBuffNum > 0x00) && (cRecvBuffNum < RECV_LENGTH) )
184 3 {//其他数据
185 4 cRecvBuff[_index][cRecvBuffNum] = (uchar)_data;
186 4 cRecvBuffNum++;
187 4 if(cRecvBuffNum == (cRecvBuff[_index][1] + 3) )
188 4 {//接收完毕
189 5 cRecvBuffCnt++;
190 5 cRecvBuffNum = 0x00;
191 5 }
192 4 }
193 3 else if(cRecvBuffNum > RECV_LENGTH)
194 3 {//接收的数据超过缓冲区容量清除当前接收的数据
195 4 cRecvBuffNum = 0x00;
196 4 memset(&cRecvBuff[_index][0],0x00,RECV_LENGTH);
197 4 }
198 3 }
199 2 }
200 1 }
201
202 /*===============================================================
203 功能:串口发送任务
204 参数:无
205 返回:无
206 说明:发送
207 邮件的参数是要发送数据的长度
208 ===============================================================*/
209 void Serial_Tran_Task(void) _task_ STRAN_TASK_ID
210 {
211 1 static uchar xdata _sendNum;
212 1 while(1)
213 1 {
214 2 if( (cTranBuffCnt != 0x00) && (cTranBuffPtr < TRAN_GRUOP) )
215 2 {//有数据要发送
216 3 _sendNum = 0x00;
217 3 while(_sendNum < cTranBuff[cTranBuffPtr][1]+3)
218 3 {//数据是否发送完毕
219 4 SBUF = cTranBuff[cTranBuffPtr][_sendNum];
220 4 os_wait(K_SIG,0x00,0x00); //等待数据发送完毕
221 4 _sendNum++;
222 4 }
223 3 //清除发送完毕的数据
224 3 memset(&cTranBuff[cTranBuffPtr][0], 0x00, TRAN_LENGTH);
225 3 cTranBuffPtr = (cTranBuffPtr+1) % TRAN_GRUOP;
226 3 cTranBuffCnt --;
227 3 }
228 2 os_wait(K_TMO, T10MS, 0x00);
229 2 }
230 1 }
231 /*===============================================================
232 功能:调试任务
233 参数:无
234 返回:无
235 说明:发送调试信息,第一个字节为发送长度,后面为协议
236 ===============================================================*/
237 void Debug_Task(void) _task_ DEBUG_TASK_ID
238 {
239 1 while(1)
240 1 {
241 2 if( (cTranBuffPtr2<TRAN_GRUOP2) && (cTranBuffCnt2 != 0x00) )
C51 COMPILER V7.10 SERIAL 08/03/2006 13:15:14 PAGE 5
242 2 {
243 3 cTranBuffNum2 = 0x01;
244 3 while(cTranBuffNum2 < cTranBuff2[cTranBuffPtr2][0])
245 3 {
246 4 SBUF2 = cTranBuff2[cTranBuffPtr2][cTranBuffNum2];
247 4 cTranBuffNum2++;
248 4 os_wait(K_SIG, 0x00, 0x00);
249 4 }
250 3 //清除发送完毕的数据
251 3 memset(&cTranBuff2[cTranBuffPtr2][0], 0x00, TRAN_LENGTH2);
252 3 cTranBuffPtr2 = (cTranBuffPtr2+1) % TRAN_GRUOP2;
253 3 cTranBuffCnt2 --;
254 3 }
255 2 else
256 2 os_wait(K_TMO, T10MS, 0x00);
257 2 }
258 1 }
259
260 /*===============================================================
261 功能:写入调试信息
262 参数:type-类型;buff-数据;
263 返回:无
264 说明:
265 ===============================================================*/
266 void Write_Debug_Info(uchar* buff, uchar len)
267 {
268 1 uchar _tmp;
269 1 if( (cTranBuffCnt2 < TRAN_GRUOP2) && ((len+3) <TRAN_LENGTH2) )
270 1 {//缓冲区还有空间
271 2 _tmp = (cTranBuffPtr2+cTranBuffCnt2)%TRAN_GRUOP2; //计算偏移地址
272 2 memset(cTranBuff2[_tmp], 0x00, TRAN_LENGTH2);
273 2 cTranBuff2[_tmp][0] = len+3;
274 2 memcpy(&cTranBuff2[_tmp][1], buff, len);
275 2 cTranBuff2[_tmp][len+1] = 0x0D;
276 2 cTranBuff2[_tmp][len+2] = 0x0A;
277 2 cTranBuffCnt2++;
278 2 }
279 1 }
280 /*===============================================================
281 功能:设置任务,完成组号的设定和读取
282 参数:
283 返回:
284 说明:组号从地址0x8000开始放置,每个组号共五个汉字
285 总共16组
286 ===============================================================*/
287 void Config_Task(void) _task_ CONFIG_TASK_ID
288 {
289 1 static uchar xdata _tmp;
290 1 static uchar xdata _buff[160];
291 1 while(1)
292 1 {
293 2 os_wait(K_SIG, 0x00, 0x00);
294 2 //去除回车符
295 2 cRecvBuff2[cRecvBuffNum2-1] = 0x00;
296 2 cRecvBuff2[cRecvBuffNum2-2] = 0x00;
297 2
298 2 _tmp = (cRecvBuff2[2]-'0')*10 +cRecvBuff2[3] - '0';
299 2
300 2 }
301 1 }
*** WARNING C280 IN LINE 290 OF SERIAL.C: '_buff': unreferenced local variable
302
C51 COMPILER V7.10 SERIAL 08/03/2006 13:15:14 PAGE 6
303 /*===============================================================
304 功能:
305 参数:
306 返回:
307 说明:
308 ===============================================================*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1970 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 3282 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
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 + -