📄 comm_51.lst
字号:
C51 COMPILER V7.50 COMM_51 03/06/2007 22:47:35 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE COMM_51
OBJECT MODULE PLACED IN COMM_51.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE COMM_51.C LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\DeBug\COMM_51.lst) SRC(.\
-DeBug\COMM_51.SRC)
line level source
1 /*
2 *********************************************************************************************************
3 * 基于uC/OS-II高速串口驱动及应用程序接口函数
4 * 版权所有
5 *
6 * 文件名 : COMM_51.C
7 * 版本号 :beat3
8 * 作者 : 陈是知 csz-mail@126.com 北京中软 2005.4.21
9 *********************************************************************************************************
10 */
11
12 #include "includes.h"
13
14 #define TBUF_SIZE 256 // 这两行不要修改
15 #define RBUF_SIZE 256
16
17 INT8U tbuf [TBUF_SIZE];
18 INT8U rbuf [RBUF_SIZE];
19
20 INT8U t_in=0;
21 INT8U t_out=0;
22 INT8U t_disabled=0;
23
24 INT8U r_in=0;
25 INT8U r_out=0;
26
27 /******************************* 中断处理函数 ***************************
28 * 功能:完成数据得的接收合发送
29 ************************************************************************/
30 void CommISRHandler() reentrant
31 {
32 1 if (RI)
33 1 {
34 2 // 接收
35 2 RI = 0;
36 2 if ((r_in + 1) != r_out)
37 2 rbuf [r_in++] = SBUF;
38 2 //rbuf [r_in++] = 0x99;
39 2 }
40 1
41 1 if (TI)
42 1 { // 发送
43 2 TI = 0;
44 2 if (t_in != t_out)
45 2 SBUF = tbuf [t_out++];
46 2 else
47 2 t_disabled = 1;
48 2 }
49 1 }
50
51
52 void CommInit() reentrant
53 {
54 1 PS=1;
C51 COMPILER V7.50 COMM_51 03/06/2007 22:47:35 PAGE 2
55 1 TMOD=TMOD&0x0F;
56 1 TMOD=TMOD|0x20;
57 1 TL1=0xFF,TH1=0xFF; //57600, 22.1184MHz
58 1 SCON=0x50;PCON=0x00;
59 1 t_disabled = 1;
60 1 TR1=1;
61 1 ES=1;
62 1 }
63
64
65 /************************** 串行口字符输出函数 ***************************
66 * 功能:从串行口输出一个字符c
67 **************************************************************************/
68 INT8U CommPutChar (INT8U c) reentrant
69 {
70 1
71 1 if ((t_in-t_out)==255)
72 1 return (COMM_TX_FULL); // 如果发送缓冲区满则返回 COMM_TX_FULL
73 1
74 1 OS_ENTER_CRITICAL(); // 关中断
75 1 tbuf [t_in++] = c; // 将数据加入到发送缓冲区并开中断
76 1 if (t_disabled)
77 1 {
78 2 t_disabled = 0;
79 2 TI = 1;
80 2 }
81 1 OS_EXIT_CRITICAL();
82 1 return (COMM_NO_ERR); // 串行口输出正确,返回0
83 1 }
84
85
86 /************************* 串行口字符输入函数 ****************************
87 * 功能:从串行口输入一个字符
88 **************************************************************************/
89 INT8U CommGetChar (INT8U *err) reentrant
90 {
91 1 INT8U c;
92 1
93 1 if ((r_in-r_out) == 0)
94 1 *err=COMM_RX_EMPTY; // 如果接收缓冲区长度为0(未收到字符),返回 -1
95 1 else
96 1 {
97 2 OS_ENTER_CRITICAL();
98 2 c = rbuf [r_out++];
99 2 OS_EXIT_CRITICAL();
100 2 *err=COMM_NO_ERR;
101 2 return (c); // 串行口输入正确,返回输入的字符
102 2 }
103 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 302 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 517 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -