📄 suart2.lst
字号:
C51 COMPILER V7.20 SUART2 11/03/2007 17:08:46 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE SUART2
OBJECT MODULE PLACED IN .\output\suart2.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\driver\suart2.c LARGE ORDER INCDIR(.\src\include) DEBUG OBJECTEXTEND PR
-INT(.\output\suart2.lst) OBJECT(.\output\suart2.obj)
line level source
1 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&软串口2驱动&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
2 //*文件名称:suart2.c
3
4 //*文件作用:串口驱动
5
6 //*文件作者:翟 鹏
7
8 //*创建日期:2004年5月
9 //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
10
11
12
13 #include <include.h>
14
15
16
17 uchar idata suart2_th0=0;
18 uchar idata suart2_tl0=0;
19 uchar idata suart2_th0_1_3=0;//设置到BIT宽度的1/3处
20 uchar idata suart2_tl0_1_3=0;//设置到BIT宽度的1/3处
21
22 uchar idata SUART2_RI=0;//接收数据位计数器
23 uchar bdata SUART2_BUF=0;//数据寄存器
24 sbit SUART2_BUF_HIGH=SUART2_BUF^7;//数据寄存器最高位-用于接收移位
25
26 uchar idata SUART2_TI=0;//发送数据位计数器
27 uchar bdata SUART2_SBUF=0;//数据寄存器
28 sbit SUART2_SBUF_LOW=SUART2_SBUF^0;//数据寄存器最低位-用于发送移位
29
30 uchar idata suart2_fifo[SUART2_FIFO_SIZE];//接收FIFO
31 uchar idata suart2_fifo_in=0;//写指针
32 uchar idata suart2_fifo_out=0;//读指针
33
34
35
36 //********************************************************************************************************
-***************
37 //函数作用:软串口起始位中断服务程序
38 //参数说明:无
39 //注意事项:
40 //返回说明:无
41 //********************************************************************************************************
-***************
42 static void suart2_isr(void) interrupt IRQ_EXTINT1 //using USE_EXTINT
43 {
44 1 EX1=0;//关INT1中断
45 1 TH0=suart2_th0_1_3;//设置到BIT宽度的1/3处
46 1 TL0=suart2_tl0_1_3;//设置到BIT宽度的1/3处
47 1 SUART2_RI=1;//送接收标志
48 1 TR0=1;//开Timer0
49 1 }
50
51 //********************************************************************************************************
-***************
C51 COMPILER V7.20 SUART2 11/03/2007 17:08:46 PAGE 2
52 //函数作用:定时器0中断服务程序
53 //参数说明:无
54 //注意事项:注意中断号码和优先级设置 使用R2寄存器
55 //返回说明:无
56 //********************************************************************************************************
-***************
57 static void timer0_isr(void) interrupt IRQ_TIMER0 //using USE_EXTINT
58 {
59 1 //装载初值
60 1 TL0=suart2_tl0;
61 1 TH0=suart2_th0;
62 1
63 1 //*******************数据接收*****************************
64 1 if(SUART2_RI)
65 1 {
66 2 if(SUART2_RI==1)//起始位
67 2 {
68 3 //起始位容错
69 3 if(SUART2_RXD)
70 3 {
71 4 SUART2_RI=0;//清数据位计数器
72 4 EX1=1;//开INT1中断 准备接收下一个字节
73 4 }
74 3 else
75 3 {
76 4 SUART2_RI++;
77 4 }
78 3 }
79 2 else if(SUART2_RI==10)//停止位
80 2 {
81 3 //停止位容错
82 3 if(SUART2_RXD)
83 3 {
84 4 //送FIFO缓冲区
85 4 suart2_fifo[suart2_fifo_in++]=SUART2_BUF;
86 4 if(suart2_fifo_in>=SUART2_FIFO_SIZE)suart2_fifo_in=0;
87 4 }
88 3 SUART2_RI=0;//清数据位计数器
89 3 EX1=1;//开INT1中断 准备接收下一个字节
90 3 }
91 2 else//数据位
92 2 {
93 3 SUART2_BUF>>=1;
94 3 SUART2_BUF_HIGH=SUART2_RXD;
95 3 SUART2_RI++;
96 3 }
97 2 }
98 1
99 1 //**********************数据发送***************************
100 1 if(SUART2_TI)
101 1 {
102 2 if(SUART2_TI==1)//起始位
103 2 {
104 3 SUART2_TXD=0;
105 3 SUART2_TI++;
106 3 }
107 2 else if(SUART2_TI==10)//停止位
108 2 {
109 3 SUART2_TXD=1;
110 3 SUART2_TI=0;//清数据位计数器
111 3 }
112 2 else//数据位
C51 COMPILER V7.20 SUART2 11/03/2007 17:08:46 PAGE 3
113 2 {
114 3 SUART2_TXD=SUART2_SBUF_LOW;
115 3 SUART2_SBUF>>=1;
116 3 SUART2_TI++;
117 3 }
118 2 }
119 1
120 1 //如果没有接收 也没有发送 关闭Timer0
121 1 if(!SUART2_RI && !SUART2_TI)TR0=0;//关Timer0
122 1 }
123
124 //********************************************************************************************************
-***************
125 //函数作用:清除串口缓存的数据
126 //参数说明:无
127 //注意事项:
128 //返回说明:无
129 //********************************************************************************************************
-***************
130 void suart2_flush(void)
131 {
132 1 suart2_fifo_in=suart2_fifo_out=0;
133 1 }
134
135 //********************************************************************************************************
-***************
136 //*函数作用:初始化
137 //*参数说明:
138 //*注意事项:
139 //*返回说明:无
140 //********************************************************************************************************
-***************
141 void suart2_init(uint baud)
142 {
143 1 ET0=0;//关中断
144 1 PT0=1;//高优先级
145 1 TMOD|=0x01;//timer0方式1---16位计数器
146 1 TR0=0;//关闭timer0
147 1 suart2_th0=(65536-((ulong)F_OSC)/baud/CLOCK_COUNT)>>8;//计算初始值
148 1 suart2_tl0=(65536-((ulong)F_OSC)/baud/CLOCK_COUNT)&0x00FF;//计算初始值
149 1 suart2_tl0+=30;//修正
150 1 suart2_th0_1_3=(65536-((ulong)F_OSC)/baud/CLOCK_COUNT/3)>>8;//计算下降沿1/3
151 1 suart2_tl0_1_3=(65536-((ulong)F_OSC)/baud/CLOCK_COUNT/3)&0x00FF;//计算下降沿1/3
152 1 ET0=1;//开中断
153 1
154 1 EX1=0;//关INT1中断
155 1 IT1=0;//低电平触发模式
156 1 PX1=1;//高优先级
157 1 suart2_flush();//清缓冲区
158 1 EX1=1;//开INT1中断
159 1 }
160
161 //********************************************************************************************************
-***************
162 //函数作用:查询软串口 如果有数据读取一个字节
163 //参数说明:ch---读取字符存放地址
164 //注意事项:
165 //返回说明:如果有数据返回1
166 //********************************************************************************************************
-***************
167 uchar suart2_read_char(uchar *ch)
168 {
C51 COMPILER V7.20 SUART2 11/03/2007 17:08:46 PAGE 4
169 1 if(suart2_fifo_out==suart2_fifo_in)return 0;
170 1 *ch=suart2_fifo[suart2_fifo_out];//得到当前要读取的字符
171 1 suart2_fifo_out++;//指向下一个要读取的字符
172 1 if(suart2_fifo_out==SUART2_FIFO_SIZE)suart2_fifo_out=0;//如果到了fifo末尾 则重从头开始
173 1 return 1;
174 1 }
175
176 //********************************************************************************************************
-***************
177 //函数作用:向串口发送一个字符
178 //参数说明:ch---要发送的字符
179 //注意事项:
180 //返回说明:无
181 //********************************************************************************************************
-***************
182 void suart2_write_char(uchar ch)
183 {
184 1 SUART2_SBUF=ch;//送发送数据
185 1 SUART2_TI=1;//送发送标志
186 1 TR0=1;//开Timer0
187 1 while(SUART2_TI);//如果TI说明还没有发送完毕---死等
188 1 }
189
190 //********************************************************************************************************
-***************
191 //函数作用:向串口发送字符串
192 //参数说明:str---要发送的字符串
193 //注意事项:
194 //返回说明:无
195 //********************************************************************************************************
-***************
196 void suart2_write_str(uchar *str)
197 {
198 1 while(*str)suart2_write_char(*str++);
199 1 }
200
201 //********************************************************************************************************
-***************
202 //函数作用:向串口发送缓冲区的数据
203 //参数说明:
204 //注意事项:
205 //返回说明:无
206 //********************************************************************************************************
-***************
207 //void suart2_write_buf(uchar *buffer, uint length)
208 //{
209 // while(length--)
210 // {
211 // suart2_write_char(*buffer++);
212 // }
213 //}
214
215
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 527 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 5
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
IDATA SIZE = 24 ----
C51 COMPILER V7.20 SUART2 11/03/2007 17:08:46 PAGE 5
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 + -