?? 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 + -