芯片STC11F32EX
定时器0作为定时用,通过串口下发定时数据到单片机,实现通过串口实时改变定时器0时长的功能。
发现发一次数据后,串口就不工作了,不能收发数据了。软件仿真调试发现SCON变为0x55。大神们帮忙看看啥原因?
代码片段:
void main()
{
ENA=1;
PUL=0;
DIR=0; //初始化电机反转
Init_Timer(); //初始化定时器
Init_Uart();
while(1)
{
Key_Scan();
}
}
void Init_Timer() //初始化定时器
{
TMOD |= 0x01;
AUXR |= 0x80; //timer0工作在1T模式
TH0=(65536-CYCLE)/256; //给time0装初值
TL0=(65536-CYCLE)%256;
TR0=1;
IE |= 0x82;
}
void Init_Uart()
{
EA = 1; //打开总中断
ES = 1; //打开串口中断
SM0 = 0; SM1 = 1;//串口工作方式1,8位UART波特率可变
REN = 1;//串口允许接收
TR1 = 1;//启动定时器1
TMOD |= 0x20;//定时器1,工作模式2 8位自动重装
TH1 = 0xfd;
TL1 = 0xfd;//设置比特率9600
}
void Enter_Timer0() interrupt 1 //进入定时器中断
{
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
PUL=~PUL;
}
//串口中断函数
void UART() interrupt 4
{
if(RI)//判断接收是否完成
{
num = SBUF;//读SBUF,读出串口接收到的数据
RI = 0;//软件清零接收标志位
SBUF = num;//写SBUF,把要发送的数据送给发送缓存器
if(num <= 3 & num >=0)
CYCLE=SPEED_LIST[num];
}
if(TI)//判断是否发送完成
TI = 0;//清零发送完成标志位
}
|