📄 com.lst
字号:
C51 COMPILER V6.23a COM 08/17/2006 16:45:14 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE COM
OBJECT MODULE PLACED IN .\Obj\Com.obj
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE ..\..\Driver\Comm\Com.c LARGE OPTIMIZE(2,SPEED) MODP2 PRINT(.\Obj\Com.lst)
-OBJECT(.\Obj\Com.obj)
stmt level source
1
2 /*
3 * CopyRight (C) 2006,江苏盛唐电子产品有限公司
4 * All Rights Reserved.
5 *
6 * 文件名称:com.c
7 * 文件标识:
8 * 摘 要:串口RS233底层收发驱动。
9 *
10 * 当前版本:1.0
11 * 作 者:熊刚
12 * 完成日期:2004-05-04
13 *
14 * 取代版本:
15 * 原作者 :
16 * 完成日期:
17 */
18 #include "..\inc\includes.h"
19
20 char xdata ser_buffer[SERIAL_BUFF_SIZE]; /* the receive buffer*/
21
22 int ser_end = -1;
23 int ser_start=-1; /* indexes into receive buffer*/
24 int ser_ch;
25 int char_ready=0; /* current character and ready flag*/
26
27 int serial_lock = 0; /* serial ISR semaphore so the buffer*/
28 /* isn't altered will it is being written*/
29 //功能介绍:串口通讯中断服务程序。
30 //入口参数:无
31 //出口参数:无
32 //备注:系统开中断后由中断触发执行。
33 void Serial_Isr(void) interrupt 4
34 {
35 1
36 1 /* this is the ISR (Interrupt Service Routine) for the com port. It is very*/
37 1 /* simple. When it gets called, it gets the next character out of the receive*/
38 1 /* buffer register 0 and places it into the software buffer. Note: C takes care*/
39 1 /* of all the register saving and house work. Cool huh!*/
40 1
41 1 /* lock out any other functions so the buffer doesn't get corrupted*/
42 1 if(TI)
43 1 {
44 2 //TI = 0;
45 2 return ;
46 2 }
47 1
48 1 if ( !RI )
49 1 {
50 2 return ; //有数据或无数据用1、0表示
51 2 }
52 1 serial_lock = 1; /*封锁对串行缓冲区的其它操作*/
53 1
54 1 /* place character into next position in buffer*/
C51 COMPILER V6.23a COM 08/17/2006 16:45:14 PAGE 2
55 1
56 1 ser_ch = SBUF;
57 1 if (++ser_end > SERIAL_BUFF_SIZE-1)
58 1 {
59 2 ser_end = 0; /*寻找到循环缓冲区的结尾位置*/
60 2 }
61 1
62 1 ser_buffer[ser_end] = ser_ch; /*将串行口读取到的数据放入队列尾部*/
63 1
64 1 ++char_ready; /*接收数量计数器加1 */
65 1
66 1 serial_lock = 0; /*打开对串行接收数据缓冲区的锁定*/
67 1 RI = 0;
68 1 }
69
70 /*///////////////////////////////////////////////////////////////////////*/
71 //功能介绍:检查缓冲区是否接收到数据。获取收到的数据的数量
72 //入口参数:无
73 //出口对数:返回接收的数据个数,没有数据返回0
74 //备注:
75
76 int Ready_Serial(char SeriesComID)
77 {
78 1 SeriesComID = SeriesComID;
79 1 return(char_ready);
80 1
81 1 }
82
83 /*/////////////////////////////////////////////////////////////////////////*/
84 // 功能介绍:从串行缓冲接收区中读取1个数据
85 // 入口参数:存放读取到的数据的地址指针
86 // 出口参数: 读取成功,返回1,失败时,返回数据0
87 // 备注:
88 int Serial_Read(char SeriesComID,char *RdData)
89 {
90 1 /* wait for isr to end*/
91 1
92 1 SeriesComID = SeriesComID;
93 1
94 1 while(serial_lock); /*等待串行接收中断完成*/
95 1 if (ser_end != ser_start)
96 1 {
97 2
98 2 if (++ser_start > SERIAL_BUFF_SIZE-1) /*移动头指针, 找到读取数据的位置*/
99 2 ser_start = 0;
100 2
101 2 *RdData = ser_buffer[ser_start]; /*从缓冲区中取数*/
102 2 /*并送到入口变量中*/
103 2 if (char_ready > 0) /*接收数据数量计数器减1*/
104 2 --char_ready;
105 2
106 2 return(1); /*返回读取到数据的成功标志*/
107 2
108 2 }
109 1 else
110 1 {
111 2 return(0); /*读取失败时,返回读取失败的标志*/
112 2 }
113 1 }
114
115 //功能介绍:将字符的内容从串行口发出
116 //入口参数:准备发送的数据
C51 COMPILER V6.23a COM 08/17/2006 16:45:14 PAGE 3
117 //出口参数:无
118 //备注: 程序中没有使用超时退出机制,如果硬件发生故障,会出现死循环.
119 void Serial_Write(char SeriesComID,char ch)
120 {
121 1 SeriesComID = SeriesComID;
122 1
123 1 SBUF = ch;
124 1 while ( !TI );
125 1 TI = 0;
126 1 }
127
128 //功能介绍:打开串行口
129 // 入口参数: port_base 使用串行口的端口号
130 // baud 串行口设定的波特率
131 // configuration 串行口工作参数设置,包括数据位数,剞偶校验等
132 // 出口参数:
133 // 备注: 请使用头文件中定义的符号常量来设置工作参数
134 void Open_Serial(int port_base, int baud, int configuration)
135 {
136 1 port_base = port_base;
137 1 baud = baud;
138 1 configuration = configuration;
139 1
140 1 //串口初始化
141 1 SCON = 0x52; //设置串口
142 1 PCON &= 0x80;
143 1
144 1 TMOD = 0x20;
145 1 TH1 = 0xFB; //波特率19200
146 1 TL1 = 0xFB;
147 1
148 1 TR1 = 1;
149 1 TI = 0;
150 1
151 1 ES = 1; //允许串口中断
152 1 EA = 1;
153 1
154 1 }
155
156 /*功能介绍:关闭串行口
157 入口参数:将关闭的串行口号
158 出口参数:无
159 备注:
160 */
161 void Close_Serial(int port_base)
162 {
163 1 port_base = port_base;
164 1 ES = 0;
165 1 }
166
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 505 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 74 15
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 + -