在使用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;
<pre name="code" class="cpp"> date = SBUF;<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
}}