在8051单芯片的架构中,定时器0和外部中断0(ES = External Interrupt 0)共享一些硬件资源。如果你在程序中错误配置了这些资源,它们之间的冲突可能导致不可预知的行为。
共用一个计数器
网上查的解决办法:1.在定时器0的中断函数里暂时禁用串口中断ES=0( 我这么干的
)
2.修改定时器0的优先级,使其低于串口中断的优先级,这样可以使串口中断不被其打断(我是串口中断抢了定时器0,我把串口优先级设为高,定时器0设为低 PT0=1 PS=0 ,不冲突了。按道理定时器0的中断号更小的,我的反而是反过来,不明白有没有大神解惑?
)
3.修改波特率,使其低于定时器0的中断频率(没试)
调了
#include <REGX52.H>
#include <intrins.h>
sbit beep=P2^3;
void Timer0Init(){
//PT0=1; //方法2的优先级
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x00; //设置定时初始值
TH0 = 0x4C; //设置定时初始值
TF0 = 0; //清除TF0标志
EA=1;
ET0=1;
TR0 = 1; //定时器0开始计时
}
void ttl_init()
{
//PS=0; //方法2优先级
PCON &= 0x7F; //波特率不倍速
SCON=0x50;