51单片机同时开启串口中断和定时器0中断的程序这样为什么错了

void Time0_Init() //定时器0
{
TH0=0xfe;
TL0=0x33;
TR0=1;
}

void main() //程序入口
{
TMOD=0x21; //定时器0和定时器1开启
PCON = 0x80;
SCON = 0x50;
TH1 = 0xfA; //设置波特率 9600
TL1 = 0xfA;
TR1 = 1; //启动定时器1

ET1 =0;
ES = 1; //开串口中断
PS=1; //设计串行口中断优先级
EA = 1; //开总中断
IT0=0;
EX0=1;
Time0_Init(); //调用定时0函数
}

定时器的初始化要放前面,为什么你打开外部中断的使能,却没打开定时器0的使能。
void Time0_Init() //定时器0
{
TH0=0xfe;
TL0=0x33;
TR0=1;
}

void main() //程序入口
{
TMOD=0x21; //定时器0和定时器1开启
PCON = 0x80;
SCON = 0x50;
TH1 = 0xfA; //设置波特率 9600
TL1 = 0xfA;
TR1 = 1; //启动定时器1
Time0_Init(); //调用定时0函数

ET1 =0; //这句多余了
ES = 1; //开串口中断
PS=1; //设计串行口中断优先级

ET0=1; //打开定时器中断

EA = 1; //开总中断
//IT0=0; //这句多余了
//EX0=1; //为什么要打开外部中断??

}
void SERIAL_HANDLE(void) interrupt 4 //串口中断函数,打开了中断就必须有
{....................
}
void T0_HANDLE(void) interrupt 1 //定时器0中断函数,打开了中断就必须有
{....................
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-29
头文件你添加进去了没有啊!如:reg51.h,具体我不知道你用的是哪家公司的单片机,没法给你测试一下!
第2个回答  2013-03-29
定时器中断没打开, 在定时器初始化中加上下面这句
ET0 =1;
第3个回答  2013-03-29
IT0=0,说明没有启动定时器0追问

这个不是外部中断触发控制位吗 ?

51单片机定时和串口冲突?
T0中断太频繁了,因为同级中断,T0优先,所以总抢占中断,串口被边缘话了。修改一下程序:void timer_init(){ TMOD=0x22;SCON=0X50;TH1=0xfd;TL1=0xfd;TR1=1;TH0=246;TL0=246;ET0=1;TR0=1;ES=1;EA=1;PS=1; } void timer0_int() interrupt 1 {time++;if(time<50)\/\/count为占空比...

51单片机串口中断和产生波特率的定时器中断为什么不能同时开启?
利用51单片机的定时器1的溢出率产生波特率,并不需要打开 T1 的中断。如果打开了,你就应该编写相应的中断程序。如果,你没有写中断程序,那么,它中断后,自然就会给你添乱。

51单片机怎么同时开启两个中断的问题?
高优先级中断执行过程中低的不能执行。中断使能,中断允许即此中断已开启。但CPU不可以同时执行两个中断。所以中断分优先级。要优先于高级中断,再开低级中断。当系统有个定时中断。比如定时采集温度值,然后通过串口发送到上位机。这样程序里要用到定时中断和串口中断。处理了定时中断后,再处理的串口中断。

51单片机串口通讯(模式1)问题:发送内容前半部分出错,后半部分正确。错...
ET1=1;此语句是罪魁祸首,定时器1已经作为串口波特率发生器了,就不能做其他用途了,此时定时必须禁止中断,而你程序中恰恰相反,来了句ET1=1;开启了定时器1中断,导致串口波特率发生混乱。那当然串口通信会有问题了,删掉ET1=1;该语句即可。

STC51单片机同时使用定时器0定时器1和串口
用 T1 控制波特率,此期间,T1 就不能用来中断了。其实,想要实现定时,有一个 T0 足以满足各种需求。T1,就不应该用来做定时用。T2,是有的。

51单片机定时器0和定时器1使用冲突
当 REN=1; 执行完后,单片机完全符合串口方式0,同步移位方式,如果你这时板子接在电脑串口上,不管你电脑有没有发串口数据,单片机RXD脚已经在接收了,而且你没写串口中断,RI不清0,那就在串口中断里出不来了,下面的程序都做不到,所以你定时器0不动,关了T1就等于关了串口,也就正常了。

51单片机定时器0中断会不会影响串口中断
会。在51单片机机器中,若用户在使用时发现其定时器跳转到了0,并且出现中断的现象,那么是会影响串口的,并且是会导致其也发生中断的,在这时只需要重新进行定时,即可解决该问题。

51单片机和计算机串口通信,不断收到乱码如何解决?
如果收到乱码很频繁,应该是波特率误差太大所致,这有两方面原因。1、单片机和电脑设置的波特率不一致。2、晶振性能较差,其频率很不稳定,导致波特率误差过大。

51单片机定时中断导致主程序数码管显示出问题
1,最简单的,在通信可靠的前提下尽可能提高串口波特率,同时降低发送频率(就是增大定时器中断周期),再把要发送的数据弄少点,能用缩写的就别写一大串。。2,串口发送改为中断方式,这个不细说了,网上有资料。。3,舍弃数码管扫描的软件延时,改用硬件延时(就是把数码管的位的切换也放在定时器...

关于51单片机的串口和定时器共用冲突
串口需要定时器1或定时器2作为波特率发生器哦,这个定时器要工作在方式2,不能中断。按照你说的,应该没有这个问题,串口不会影响T0的。代码不完全,看不出来呢

相似回答