标题:
STC12C5A60S2定时器0里发送串口数据不返回main
[打印本页]
作者:
ABCD123
时间:
2016-9-28 21:22
标题:
STC12C5A60S2定时器0里发送串口数据不返回main
void UartInit(void) //115200bps@11.0592MHz 独立波特率发生器
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
BRT = 0xFD; //设定独立波特率发生器重装值
AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
AUXR |= 0x10; //启动独立波特率发生器
ES=1;
}
void Timer0Init(void) //5000微秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x28; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 0; //定时器0开始计时
ET0=1;
EA=1;
}
oid Timer0Interrupt(void) interrupt 1 //定时计数器0中断 跑够5ms 即引发此中断 此中断用于对消息数据的处理
{//unsigned char i;
TR0=0; //关闭定时器0
TL0 = 0x00; //设置定时初值
TH0 = 0x28; //设置定时初值
receive_time++;
if(receive_time>500) //20ms的时间到了
{
P1=~P1;
EA=0;
ly_SendOneByte('0'); //2S发送一个心跳包
EA=1;
receive_time=0; //定时时间清0
receive_x=0; //接收位置清0
if(receive_mode==1) //模式来自于手机消息
{
receive_order=receive_date[1]; //取出指令码
receive_mode=0; //关闭控制模式
}
else; //否则啥都不执行。
}
TR0=1; //打开定时器0
}
进入定时器0中断后。receive_time>500这个条件满足后。就不在返回main里。。而是一直在定时中断里循环。 重复发送'0'
麻烦遇到的大神指点一下呗。。困扰两天了。。各种想不明白。
作者:
luoluoluo136
时间:
2016-9-29 11:25
你用的单片机和你设置的定时器方式不对~你要先确定你的单片机支持哪种定时器方式~看你的程序,应该是12系列用了15系列的定时器初始化程序~
作者:
yzwzfyz
时间:
2016-9-30 23:54
在中断结束处放一个断点,看看是否真的未中断返回
作者:
ABCD123
时间:
2016-10-1 19:50
程序用KEIL调式没问题,下到板子里就不正常了。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1