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