本帖最后由 puptong 于 2016-5-6 09:10 编辑
用的是STC的
单片机,串口波特率是使用独立发生器的,然后想用定时器0和定时器1分别做延时,也就是定时器0 一个延时,定时器1一个延时,下面是初始化代码,以及定时器延时代码, 问题是定时器0 的延时正确,但是定时器1的延时就不对了。问下这是什么原因。void UART_Init(void)
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
BRT = 0xDC; //设定独立波特率发生器重装值0xdc
AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
AUXR |= 0x10; //启动独立波特率发生器
EA=1; //打开所有中断
ES=1; //使能串口接收中断,
}
void
timer0_Init(void) //1毫秒@11.0592MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式 16位
TL0 = 0x66; //设置定时初值
TH0 = 0xfc; //设置定时初值 1ms
TF0 = 0; //清除TF0标志
TR0 = 0; //定时器0 no 开始计时
ET0 = 0; // 1使能定时器0中断
}
void Timer1_Init(void) //1毫秒@11.0592MHz
{
AUXR &= 0xBF; //定时器时钟12T模式
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x10; //设置定时器模式 16位
TL0 = 0x66; //设置定时初值
TH0 = 0xfc; //设置定时初值 1ms
TF1 = 0; //清除TF0标志
TR1 = 0; //定时器0 no 开始计时
ET1 = 0; // 1使能定时器0中断
}
void tm0_isr() interrupt 1 using 1
{
TL0 = 0x66; //设置定时初值
TH0 = 0xFc; //设置定时初值
timer0_cont_tem++;
if(timer0_cont_tem>=500)
{
TR0 = 0; ET0 = 0;
flag_1=1;
timer0_cont_tem=0;
}
}
void tm1_isr() interrupt 3 using 1
{
TL0 = 0x66; //设置定时初值
TH0 = 0xFc; //设置定时初值
timer1_cont_tem++;
if(timer1_cont_tem>=500)
{
TR1=0; ET1=0;
timer1_cont_tem=0;
flag_2=1;
}
}
定时器1的延时调试出来不为500MS,而且误差很大。
一周热门 更多>