?? commrs232.lst
字號:
207 ** 調(diào)用模塊:
208 **
209 ** 作 者:
210 ** 日 期:
211 **-------------------------------------------------------------------------------------------------------
212 ** 修 改 人: 李偉
213 ** 日 期: 2008年12月09日
214 **-------------------------------------------------------------------------------------------------------
215 ********************************************************************************************************/
216 void soft_receive_enable() //允許接收
217 {
218 1 rs_f_RI_enable = 1; //允許接收
219 1 rs_f_TI_enable = 0; //禁止發(fā)送
220 1 soft_receive_init(); //監(jiān)測起始位, RXD 下降沿觸發(fā)接收字節(jié)過程.
221 1 }
222 /********************************************************************************************************
223 ** 函數(shù)名稱: void soft_send_enable (void) //允許發(fā)送
224 ** 功能描述:
225 ** 輸 入: 無
226 ** 輸 出: 無
227 ** 全局變量:
228 ** 調(diào)用模塊:
229 **
230 ** 作 者:
231 ** 日 期:
232 **-------------------------------------------------------------------------------------------------------
233 ** 修 改 人: 李偉
234 ** 日 期: 2008年12月09日
235 **-------------------------------------------------------------------------------------------------------
236 ********************************************************************************************************/
237 void soft_send_enable (void) //允許發(fā)送
238 {
239 1 TCON_ENABLE_TIMER = 0; //停止定時器
240 1 rs_f_TI_enable = 1; //允許發(fā)送
241 1 rs_f_RI_enable = 0; //禁止接收
C51 COMPILER V7.06 COMMRS232 10/30/2008 13:20:06 PAGE 5
242 1
243 1 rs_shift_count = 0; //清移位計數(shù)器
244 1 rs_f_TI = 1; //發(fā)送一個字符完畢標志
245 1 TCON_ENABLE_TIMER = 1; //啟動定時器
246 1 }
247 /********************************************************************************************************
248 ** 函數(shù)名稱: void rs_send_byte(uint8 SendByte) //發(fā)送一個字節(jié)
249 ** 功能描述:
250 ** 輸 入: 無
251 ** 輸 出: 無
252 ** 全局變量:
253 ** 調(diào)用模塊:
254 **
255 ** 作 者:
256 ** 日 期:
257 **-------------------------------------------------------------------------------------------------------
258 ** 修 改 人: 李偉
259 ** 日 期: 2008年12月09日
260 **-------------------------------------------------------------------------------------------------------
261 ********************************************************************************************************/
262 //由收轉(zhuǎn)到發(fā)時,要先調(diào)用 soft_send_enable ()
263 void rs_send_byte(uint8 SendByte) //發(fā)送一個字節(jié)
264 {
265 1 while ( rs_f_TI == 0); //等待發(fā)送完畢前一個字節(jié)
266 1 rs_TXD = 1;
267 1 rs_timerL = rs_START_BIT_L; //下次中斷在起始位的末尾時刻
268 1 rs_timerH = rs_START_BIT_H;
269 1 rs_BUF = SendByte;
270 1 rs_shift_count = 10;
271 1 rs_TXD = 0; //發(fā)送起始位
272 1 rs_f_TI = 0; //清已發(fā)送完畢一個字節(jié)的標志
273 1 }
274 /********************************************************************************************************
275 ** 函數(shù)名稱: void initiate_MCU (void) //系統(tǒng)初始化
276 ** 功能描述:
277 ** 輸 入: 無
278 ** 輸 出: 無
279 ** 全局變量:
280 ** 調(diào)用模塊:
281 **
282 ** 作 者:
283 ** 日 期:
284 **-------------------------------------------------------------------------------------------------------
285 ** 修 改 人: 李偉
286 ** 日 期: 2008年12月09日
287 **-------------------------------------------------------------------------------------------------------
288 ********************************************************************************************************/
289 void Initiate_RS232(void) //系統(tǒng)初始化
290 {
291 1 soft_rs232_init(); //串口初始化
292 1 EA = 1; //開中斷
293 1 }
294 /*********************************************************************************************************
295 ** 函數(shù)名稱: void Rs232CommSendByteWithChk(uint8 Commdata)
296 ** 功能描述:
297 ** 輸 入: 無
298 ** 輸 出: 無
299 ** 全局變量:
300 ** 調(diào)用模塊:
301 **
302 ** 作 者: 李偉
303 ** 日 期: 2008年12月09日
C51 COMPILER V7.06 COMMRS232 10/30/2008 13:20:06 PAGE 6
304 **-------------------------------------------------------------------------------------------------------
305 ** 修 改 人:
306 ** 日 期:
307 **-------------------------------------------------------------------------------------------------------
308 ********************************************************************************************************/
309 void Rs232CommSendByteWithChk(uint8 Commdata)
310 {
311 1 uint8 i,j;
312 1 i = Commdata >> 4;
313 1 j = Commdata & 0x0F;
314 1 if(i<10)
315 1 i += 0x30;
316 1 else
317 1 i += 0x37;
318 1 if(j<10)
319 1 j += 0x30;
320 1 else
321 1 j += 0x37;
322 1 Rs232ComCalculChkSum += i;
323 1 Rs232ComCalculChkSum += j;
324 1 rs_send_byte(i);
325 1 rs_send_byte(j);
326 1 }
327 /*********************************************************************************************************
328 ** 函數(shù)名稱: void Rs232CommSendByteWithoutChk(uint8 Commdata)
329 ** 功能描述:
330 ** 輸 入: 無
331 ** 輸 出: 無
332 ** 全局變量:
333 ** 調(diào)用模塊:
334 **
335 ** 作 者: 李偉
336 ** 日 期: 2008年12月10日
337 **-------------------------------------------------------------------------------------------------------
338 ** 修 改 人:
339 ** 日 期:
340 **-------------------------------------------------------------------------------------------------------
341 ********************************************************************************************************/
342 void Rs232CommSendByteWithoutChk(uint8 Commdata)
343 {
344 1 uint8 i,j;
345 1 i = Commdata >> 4;
346 1 j = Commdata & 0x0F;
347 1 if(i<10)
348 1 i += 0x30;
349 1 else
350 1 i += 0x37;
351 1 rs_send_byte(i);
352 1 if(j<10)
353 1 j += 0x30;
354 1 else
355 1 j += 0x37;
356 1 rs_send_byte(j);
357 1 }
358 /*********************************************************************************************************
359 ** 函數(shù)名稱: void Rs232CommSendWordWithChk(uint16 Commword)
360 ** 功能描述:
361 ** 輸 入: 無
362 ** 輸 出: 無
363 ** 全局變量:
364 ** 調(diào)用模塊:
365 **
C51 COMPILER V7.06 COMMRS232 10/30/2008 13:20:06 PAGE 7
366 ** 作 者: 李偉
367 ** 日 期: 2008年12月10日
368 **-------------------------------------------------------------------------------------------------------
369 ** 修 改 人:
370 ** 日 期:
371 **-------------------------------------------------------------------------------------------------------
372 ********************************************************************************************************/
373 void Rs232CommSendWordWithChk(uint16 Commword)
374 {
375 1 Rs232CommSendByteWithChk((uint8)(Commword>>8));
376 1 Rs232CommSendByteWithChk((uint8)(Commword));
377 1 }
378 /********************************************************************************************************
379 ** 函數(shù)名稱: void soft_rs232_interrupt( void )
380 ** 功能描述:
381 ** 輸 入: 無
382 ** 輸 出: 無
383 ** 全局變量:
384 ** 調(diào)用模塊:
385 **
386 ** 作 者:
387 ** 日 期:
388 **-------------------------------------------------------------------------------------------------------
389 ** 修 改 人: 李偉
390 ** 日 期: 2008年12月09日
391 **-------------------------------------------------------------------------------------------------------
392 ********************************************************************************************************/
393 void soft_rs232_interrupt( void )
394 {
395 1 /************************ 接收 ****************************/
396 1 if (rs_f_RI_enable == 1)
397 1 {
398 2 if (rs_shift_count == 0) //移位計數(shù)器==0, 表示檢測到起始位的起點
399 2 {
400 3 if ( rs_RXD == 1 )
401 3 {
402 4 soft_receive_enable (); //起始位錯, 從新開始
403 4 }
404 3 else
405 3 {
406 4 //下次中斷在數(shù)據(jù)位或停止位中的某時刻發(fā)生
407 4 rs_timerL += rs_FULL_BIT_L;// + 0x10;
408 4 rs_timerH = rs_FULL_BIT_H;
409 4 rs_shift_count++;
410 4 rs_BUF = 0; //清移位緩沖變量
411 4 }
412 3 }
413 2 else
414 2 {
415 3 rs_timerL += rs_FULL_BIT_L; //下次中斷在數(shù)據(jù)位或停止位中發(fā)生
416 3 rs_timerH = rs_FULL_BIT_H;
417 3
418 3 rs_shift_count++; //2--9:數(shù)據(jù)位 10:停止位
419 3
420 3 if ( rs_shift_count == 9)
421 3 {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -