📄 uartcom1.lst
字号:
155 1 //OCRAH=0x00; //(OCRAH:OCRAL)=(TOR2H:TOR2L)/2,PWM的占空比为50%
156 1 //OCRAL=0xd2;
157 1
158 1 TOR2H=0x03; //定时器重装值
159 1 TOR2L=0x4a;
160 1 OCRAH=0x01; //(OCRAH:OCRAL)=(TOR2H:TOR2L)/2,PWM的占空比为50%
161 1 OCRAL=0xa5;
162 1 TCR21=0x85; //PLL预分频为5+1
163 1 CCCRA=1; //非反相的PWM,
164 1
165 1 TCR20=0;
166 1 PLEEN=1;
167 1 while(!PLEEN);
168 1 TCR20|=3; //启动定时器,非对称PWM模式
169 1 }
170
171
172 /*******************************************************************
173 ** 函 数 名: UART1_Init()
174 ** 输 入: 无
175 ** 输 出: 无
176 ** 描 述: UART初始化,波特率9600bit/s
177 ** 全局变量: 无
178 ** 调用模块: 无
179 ** 被调模块:
C51 COMPILER V7.09 UARTCOM1 12/05/2005 10:23:19 PAGE 4
180 ** main -- 主循环处理函数
181 ** 作 者: 金雨和
182 ** 创建日期: 2005年11月16日
183 ** 修 改:
184 ** 日 期 版本 修改人 修改内容
185 ** 1.
186 ********************************************************************/
187 void UART1_Init()
188 {
189 1 //PCON=0;
190 1 //SSTAT=0; //双缓冲禁止,中断禁止,采用查询方式发送和接收
191 1 SSTAT=0xE0; //选择独立的Tx/Rx中断
192 1 SCON=0x50; //串口模式1,接收禁止
193 1 //PCON|=0x40; //SMOD0=1,SCON的位7作为FE
194 1 BRGCON=0;
195 1 BRGR1=0x04; //0x02;//波特率为9600bits/s
196 1 BRGR0=0xd2; //0xf0;//波特率为9600bits/s
197 1 BRGCON=3; //启动UART的波特率发生器
198 1
199 1 ESR=1; //ESR=Enable Serial Recieve
200 1 // EST=1; //EST=Enable Serial Transmit
201 1 EA=1; //使能中断
202 1 }
203
204
205 /*******************************************************************
206 ** 函 数 名: Delay()
207 ** 输 入:
208 ** k -- 延时时间
209 ** 输 出: 无
210 ** 描 述: 延时0.1*k秒(振荡器为6MHz)
211 ** 注意:如果入口参数k等于0,则不延时而直接返回。
212 ** 全局变量: 无
213 ** 调用模块: 无
214 ** 被调模块: 无
215 ** 作 者: 金雨和
216 ** 创建日期: 2005年11月16日
217 ** 修 改:
218 ** 日 期 版本 修改人 修改内容
219 ** 1.
220 ********************************************************************/
221 void Delay(uchar k)
222 {
223 1 uchar i,j;
224 1 if(k==0)
225 1 {
226 2 return;
227 2 }
228 1 for(;k;k--)
229 1 {
230 2 for(j=200;j;j--) //延时0.1S
231 2 {
232 3 for(i=250;i;i--)
233 3 {
234 4 //nop();
235 4 //nop();
236 4 //nop();
237 4 ;//nop();
238 4 }
239 3 }
240 2 }
241 1 }
C51 COMPILER V7.09 UARTCOM1 12/05/2005 10:23:19 PAGE 5
242
243
244 /*******************************************************************
245 ** 函 数 名: UART1_Rcv_ISR()
246 ** 输 入: 无
247 ** 输 出: 无
248 ** 描 述: C51串口1接收中断处理函数.
249 ** 全局变量: 无
250 ** 调用模块:
251 ** UART1SendData -- 串口1字符串发送函数
252 ** 被调模块: 无
253 ** 作 者: 金雨和
254 ** 创建日期: 2005年11月29日
255 ** 修 改:
256 ** 日 期 版本 修改人 修改内容
257 ** 1.
258 ********************************************************************/
259 void UART1_Rcv_ISR() interrupt 4
260 {
261 1 uchar temp;
262 1 uchar sndBuf[10];
263 1 //;当接收完一个字节RI置1进入Recieve中断
264 1 EA=0;
265 1 // while(!RI) //等待接收完时RI置位
266 1 temp=SBUF; //保存所读取的数据
267 1 RI=0; //RI清0以等待下次发送
268 1
269 1 #if 0
SBUF = temp; //发送数据
while(!TI); //当TI为1时发送完毕
TI=0; //TI清0准备发送
#endif
274 1
275 1 if(temp == 0x0D) //回车键
276 1 UART1SendData("\r\n", 2);
277 1 else if(temp == 0x0A) //换行
278 1 UART1SendData("\r\n", 2);
279 1 else if(temp == 0x08) //backspace键
280 1 {
281 2 sndBuf[0] = 0x08;
282 2 sndBuf[1] = ' ';
283 2 sndBuf[2] = 0x08;
284 2 UART1SendData(sndBuf, 3);
285 2 }
286 1 else
287 1 UART1SendData(&temp,1); //发送接收到的字符
288 1
289 1 g_ucI2CSendBuf[0] = UART1;
290 1 g_ucI2CSendBuf[1] = temp;
291 1 g_ucI2CSendBuf_Len = 2;
292 1 g_ucI2CSendBuf_offset = 0;
293 1 IICSendIntToCPU();
294 1
295 1 EA=1;
296 1 }
297 //--------------------------------
298 //在有的时候会出现仅发送一次然后程序卡死这种现象但是如果把程序中
299 //指令的流程稍微修改一下把TI=0移到 while(!TI)的后面程序可连续接收发送 SBUF=temp;
300 //发送数据 while(!TI); //当TI为1时发送完毕 TI=0; //TI清0准备下一次发送
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.09 UARTCOM1 12/05/2005 10:23:19 PAGE 6
CODE SIZE = 321 ----
CONSTANT SIZE = 3 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 14
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 + -