在使用STC51单片机的串口时,有时候会进入一种很奇怪的情况,就是程序进入了一下子跑死了,初始化代码如下:
void UsartConfiguration(unsigned int bps)
{
SCON = 0X50; //设置为工作方式1 10位异步收发器
TL2 = RCAP2L = bps; //set auto reload value
TH2 = RCAP2H = bps>>8;
T2CON = 0x34;//0011 0100 timer2 sart run
ES = 1;//打开串口中断,注意打开开一定要写串口中断函数
EA = 1;//打开总中断
}
经过程序模拟DEBUG可以发现程序跑死在发送串口数据,等待TI标志位上了
char putchar(char ch)
{
/* Place your implementation of fputc here */
SBUF=(unsigned char)ch; //将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
return ch;
}
解决方法:
1、关闭串口中断,即
ES = 0;
2、添加串口服务函数,之前是打开中断后却忘了添加中断服务函数
void UARTInt() interrupt 4
{
unsigned char date;
if(RI == 1)
{
RI = 0;
date = SBUF;}}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』