📄 serial.lst
字号:
36 =1 extern char *strrchr (const char *s, char c);
37 =1 extern int strrpos (const char *s, char c);
38 =1
39 =1 extern int strspn (char *s, char *set);
40 =1 extern int strcspn (char *s, char *set);
41 =1 extern char *strpbrk (char *s, char *set);
42 =1 extern char *strrpbrk (char *s, char *set);
43 =1 extern char *strstr (char *s, char *sub);
44 =1 extern char *strtok (char *str, const char *set);
45 =1
46 =1 extern char memcmp (void *s1, void *s2, int n);
47 =1 extern void *memcpy (void *s1, void *s2, int n);
48 =1 extern void *memchr (void *s, char val, int n);
49 =1 extern void *memccpy (void *s1, void *s2, char val, int n);
50 =1 extern void *memmove (void *s1, void *s2, int n);
51 =1 extern void *memset (void *s, char val, int n);
52 =1 #pragma RESTORE
53 =1
54 =1 #endif
4 #define TBUF_SIZE 256 /* 这两行不要改动 */
5 #define RBUF_SIZE 256
6
7 static xdata unsigned char tbuf [TBUF_SIZE];
8 static xdata unsigned char rbuf [RBUF_SIZE];
9 static xdata unsigned char t_in = 0;
10 static xdata unsigned char t_out = 0;
11 static xdata unsigned char t_disabled = 0;
12 static xdata unsigned char r_in = 0;
13 static xdata unsigned char r_out = 0;
14
15 /* 串行口中断服务函数 */
16 static void com_isr (void) interrupt 4 using 2 {
17 1 if (RI != 0) { /* 接收处理 */
18 2 RI = 0;
19 2 if ((r_in + 1) != r_out)
20 2 rbuf [r_in++] = SBUF;
21 2 }
22 1
23 1 if (TI != 0) { /* 发送处理 */
24 2 TI = 0;
25 2 if (t_in != t_out)
26 2 SBUF = tbuf [t_out++];
27 2 else
28 2 t_disabled = 1;
29 2 }
30 1 }
31
32 /* 串行口初始化函数 */
33 void com_initialize (void) {
34 1 com_baudrate (57600); /* 设定波特率 */
35 1 INT_DISABLE;
36 1 t_in = 0; /* 清零串行口缓冲器 */
37 1 t_out = 0;
38 1 t_disabled = 1;
39 1 r_in = 0;
40 1 r_out = 0;
41 1 SM0 = 0; SM1 = 1; /* 设定串行口工作于方式1 */
42 1 SM2 = 0;
43 1 REN = 1; /* 允许接收 */
44 1 TI = 0; /* 清零串行口中断标志位 */
45 1 RI = 0;
46 1 ES = 1; /* 允许串行口中断 */
C51 COMPILER V7.50 SERIAL 04/01/2006 14:08:06 PAGE 5
47 1 PS = 0; /* 设置串行口中断优先级 */
48 1 INT_ENABLE;
49 1 }
50
51 /* 波特率设置函数 */
52 void com_baudrate (unsigned baudrate) {
53 1 INT_DISABLE;
54 1 TI = 0; /* 清零发送中断标志 */
55 1 t_in = 0; /* 清零发送缓冲区 */
56 1 t_out = 0;
57 1 t_disabled = 1; /* 禁止发送 */
58 1 TR1 = 0; /* 停止T1 */
59 1 ET1 = 0; /* 禁止T1中断 */
60 1 PCON |= 0x80; /* 设置SMOD=1: 波特率加倍 */
61 1 TMOD &= ~0xF0; /* 设置T1工作于方式2 */
62 1 TMOD |= 0x20;
63 1 TH1 = (unsigned char) (256 - (TCLK / (16L * 12L * baudrate)));
64 1 TR1 = 1; /* start timer 1 */
65 1 INT_ENABLE;
66 1 }
67
68 /* 字符发送函数 */
69 char com_putchar (unsigned char c) {
70 1 if ((TBUF_SIZE - com_tbuflen ()) <= 2) /* 若缓冲区满,则返回出错标志 */
71 1 return (-1);
72 1 INT_DISABLE;
73 1 tbuf [t_in++] = c; /* 数据送往发送缓冲区 */
74 1 if (t_disabled) {
75 2 t_disabled = 0;
76 2 TI = 1;
77 2 }
78 1 INT_ENABLE;
79 1 return (0);
80 1 }
81
82 /* 字符串发送函数 */
83 char com_puts (char *s) {
84 1 if ((TBUF_SIZE - com_tbuflen ()) <= strlen (s))
85 1 return (-1);
86 1 INT_DISABLE;
87 1 for (; *s != '\0'; s++)
88 1 tbuf [t_in++] = *s;
89 1 if (t_disabled) {
90 2 t_disabled = 0;
91 2 TI = 1;
92 2 }
93 1 INT_ENABLE;
94 1 return (0);
95 1 }
96
97 /* 字符接收函数 */
98 int com_getchar (void) {
99 1 xdata int c;
100 1 if (com_rbuflen () == 0)
101 1 return (-1);
102 1 INT_DISABLE;
103 1 c = rbuf [r_out++];
104 1 INT_ENABLE;
105 1 return (c);
106 1 }
107
108 unsigned char com_rbuflen (void) { /* 计算接收缓冲区长度 */
C51 COMPILER V7.50 SERIAL 04/01/2006 14:08:06 PAGE 6
109 1 return (r_in - r_out);
110 1 }
111
112 unsigned char com_tbuflen (void) { /* 计算发送缓冲区长度 */
113 1 return (t_in - t_out);
114 1 }
C51 COMPILER V7.50 SERIAL 04/01/2006 14:08:06 PAGE 7
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
com_getchar. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
c. . . . . . . . . . . . . . . . . . AUTO XDATA INT 0000H 2
EA . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00AFH 1
t_disabled . . . . . . . . . . . . . . STATIC XDATA U_CHAR 0000H 1
size_t . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2
com_rbuflen. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
com_tbuflen. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
ES . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ACH 1
RI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0098H 1
TI . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0099H 1
PS . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00BCH 1
r_in . . . . . . . . . . . . . . . . . STATIC XDATA U_CHAR 0001H 1
r_out. . . . . . . . . . . . . . . . . STATIC XDATA U_CHAR 0002H 1
t_in . . . . . . . . . . . . . . . . . STATIC XDATA U_CHAR 0003H 1
t_out. . . . . . . . . . . . . . . . . STATIC XDATA U_CHAR 0004H 1
rbuf . . . . . . . . . . . . . . . . . STATIC XDATA ARRAY 0005H 256
SBUF . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0099H 1
PCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0087H 1
tbuf . . . . . . . . . . . . . . . . . STATIC XDATA ARRAY 0105H 256
TMOD . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0089H 1
ET1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 00ABH 1
TH1. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 008DH 1
_com_baudrate. . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
baudrate . . . . . . . . . . . . . . * REG * DATA U_INT 0006H 2
_com_puts. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
s. . . . . . . . . . . . . . . . . . AUTO DATA PTR 0000H 3
SM0. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009FH 1
SM1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009EH 1
SM2. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009DH 1
TR1. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 008EH 1
com_initialize . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
REN. . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 009CH 1
com_isr. . . . . . . . . . . . . . . . STATIC CODE PROC 0000H -----
_strlen. . . . . . . . . . . . . . . . EXTERN CODE PROC ----- -----
_com_putchar . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
c. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 459 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 517 2
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
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 + -