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