📄 serial.lst
字号:
C51 COMPILER V7.50 SERIAL 11/24/2008 09:12:33 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN Serial.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE Serial.c BROWSE DEFINE(__DEBUG__) DEBUG OBJECTEXTEND
line level source
1 /*===============================================================================//
2 //== 文 件 名:Serial.c
3 //== author :gnsusn
4 //== 说 明:串口操作
5 //== 修改日志:2008.7.14 创建文件
6 //==
7 //===============================================================================*/
8 #include <reg52.H>
9
10 #include "Serial.h"
11
12 static struct _serial serial; //== 串口操作结构体
13
14 //===============================================================================//
15 //== 函 数 名:Init_Serial_Data
16 //== 功 能 :初始化串口用到的数据
17 //== 说 明 :
18 //== 时 间 :2008.7.15 创建函数
19 //== 入口参数:无
20 //== 返 回 值:0(表示成功)
21 //===============================================================================//
22 unsigned char Init_Serial_Data(void)
23 {
24 1 serial.send_position = 0;
25 1 serial.send_bufp = 0;
26 1 serial.flag = 0;
27 1 serial.send_number = 0;
28 1 serial.rece_position = 0;
29 1 //serial.rece_bufp = rece_buf;
30 1 //serial.rece_number = sizeof(rece_buf);
31 1
32 1 return 0;
33 1 }
34
35 //===============================================================================//
36 //== 函 数 名:Print_Msg
37 //== 功 能 :通过串口0打印信息
38 //== 说 明 :
39 //== 时 间 :2008.7.14 创建函数
40 //== 入口参数:信息的首地址
41 //== 返 回 值:0(表示成功)
42 //===============================================================================//
43 unsigned char Print_Msg(unsigned char* pMsg)
44 {
45 1 if (!pMsg) //== 判断指针是否有效
46 1 {
47 2 return INVAL_POINTER; //== 数据指针无,效返回1
48 2 }
49 1
50 1 if (serial.flag != SIDEL) //== 判断串口是否被占用
51 1 {
52 2 while(serial.flag != SIDEL);//== 等待释放串口
53 2 }
54 1
55 1 serial.flag = SMESSAGE; //== 置发送类型为信息
C51 COMPILER V7.50 SERIAL 11/24/2008 09:12:33 PAGE 2
56 1 serial.send_bufp = pMsg; //== 信息地址指针赋给发送缓冲区指针
57 1 SBUF = *(serial.send_bufp++); //== 发送第一个字符,剩下的由中断处理
58 1
59 1 return 0;
60 1 }
61
62 //===============================================================================//
63 //== 函 数 名:Print_Data
64 //== 功 能 :通过串口发送数据
65 //== 说 明 :
66 //== 时 间 :2008.7.14 创建函数
67 //== 入口参数:pData:信息的首地址;Num:发送字节的个数
68 //== 返 回 值:0(表示成功)
69 //===============================================================================//
70 unsigned char Print_Data(unsigned char* pData, unsigned char Num)
71 {
72 1 if (!pData) //== 判断指针是否有效
73 1 {
74 2 return INVAL_POINTER; //== 数据指针无,效返回1
75 2 }
76 1
77 1 if (serial.flag != SIDEL) //== 判断串口是否被占用
78 1 {
79 2 while(serial.flag != SIDEL);//== 等待释放串口
80 2 }
81 1
82 1 serial.flag = SDATA; //== 置发送类型为数据
83 1 serial.send_number = Num; //== 将要发送数据的个数
84 1 serial.send_bufp = pData; //== 数据地址指针赋给发送缓冲区指针
85 1 SBUF = *serial.send_bufp; //== 发送第一个字符,剩下的由中断处理
86 1 serial.send_position = 1; //== 数据已经发送完一个
87 1
88 1 return 0;
89 1 }
90
91 //===============================================================================//
92 //== 函 数 名:PrintLongInt
93 //== 功 能 :打印长整型数据
94 //== 说 明 :
95 //== 时 间 :2008.7.14 创建函数
96 //== 入口参数:Data:要打印的数据
97 //== 返 回 值:0(表示成功)
98 //===============================================================================//
99 unsigned char Print_Long(unsigned long Data)
100 {
101 1 unsigned char display_buffer[10];
102 1 unsigned long number = Data;
103 1 char i;
104 1
105 1 for (i=0; i<10; i++)
106 1 {
107 2 display_buffer[i] = 0;
108 2 }
109 1
110 1 for (i=9; i>=0; i--)
111 1 {
112 2 display_buffer[i] = '0' + number%10;
113 2 number /= 10;
114 2 }
115 1
116 1 for (i=0; i<9; i++)
117 1 {
C51 COMPILER V7.50 SERIAL 11/24/2008 09:12:33 PAGE 3
118 2 if (display_buffer[i] != '0') break;
119 2 }
120 1
121 1 Print_Data(&display_buffer[i], 10-i);
122 1
123 1 return 0;
124 1 }
125
126 //===============================================================================//
127 //== 函 数 名:Print_Hex
128 //== 功 能 :打印十六进制数
129 //== 说 明 :
130 //== 时 间 :2008.7.14 创建函数
131 //== 入口参数:Data:要打印的数据
132 //== 返 回 值:0(表示成功)
133 //===============================================================================//
134 unsigned char Print_Hex(unsigned char* pData, unsigned char number)
135 {
136 1 unsigned char code HEX_Tab[] = {'0','1','2','3','4','5','6','7',
137 1 '8','9','A','B','C','D','E','F',};
138 1 unsigned char i, temp[2];
139 1
140 1 for (i=0; i<number; i++)
141 1 {
142 2 Print_Msg("0x");
143 2 temp[1] = HEX_Tab[(*(pData+i))&0x0f];
144 2 temp[0] = HEX_Tab[(*(pData+i))>>4];
145 2 Print_Data(temp, 2);
146 2 Print_Msg(" ");
147 2 }
148 1
149 1 return 0;
150 1 }
151
152 //===============================================================================//
153 //== 函 数 名:Serial_Saver
154 //== 功 能 :串口中断服务程序
155 //== 说 明 :
156 //== 时 间 :2008.7.15 创建函数
157 //== 入口参数:无
158 //== 返 回 值:无
159 //===============================================================================//
160 void Serial_Saver(void) interrupt 4
161 {
162 1 if (TI)
163 1 {
164 2 TI = 0;
165 2
166 2 switch (serial.flag)
167 2 {
168 3 case SMESSAGE: //== 发送信息时引起的中断
169 3 {
170 4 if (*serial.send_bufp) //== 信息未发送完
171 4 {
172 5 SBUF = *(serial.send_bufp++);
173 5 }
174 4 else //== 信息发送完
175 4 {
176 5 serial.send_bufp = 0; //== 发送缓冲区无效
177 5 serial.flag = SIDEL; //== 置串口状态为闲
178 5 }
179 4 }break;
C51 COMPILER V7.50 SERIAL 11/24/2008 09:12:33 PAGE 4
180 3
181 3 case SDATA: //== 发送数据时引起的中断
182 3 {
183 4 if (serial.send_position<serial.send_number)
184 4 {
185 5 SBUF = *(serial.send_bufp+serial.send_position);
186 5 serial.send_position += 1;
187 5 }
188 4 else //== 数据发送完毕
189 4 {
190 5 serial.send_bufp = 0;
191 5 serial.flag = SIDEL;
192 5 serial.send_position = 0;
193 5 serial.send_number = 0;
194 5 }
195 4 }break;
196 3
197 3 default: break;
198 3 }
199 2 }
200 1 else
201 1 {
202 2 RI = 0;
203 2 }
204 1 }
205
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 451 ----
CONSTANT SIZE = 21 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 20
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 + -