STC单片机定时器中断问题

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-31
STC89C52单片机中断和定时器问题:TMOD/TH0/TL0/EA/ET0/TR0它们之间的关系是什么啊?

这些寄存器实际试几次就能深刻明白他们的用途了,说的话担心你可能还是不能完全理解。
EA是总中断开关,当EA=0时,单片机不执行任何中断,因此如果想要单片机进入中断,EA必须赋值为1。
ET0、ET1是定时/计数器T0、T1的中断开关,其值为0时对应的中断失效(有争议)
TR0、TR1是定时/计数器T0、T1的运行控制位,等于1时对应的定时/计数器才开始运行,等于0时停止运行
TMOD是设置中断参数的寄存器,定时/计数器T0、T1的计数模式、控制方式、功能都由这个寄存器控制
TH0、TL0时定时/计数器T0的计数变量,计数时,这两个寄存器会不停的加一,直到溢出引起中断。通常在这两个寄存器中设置不同的初始值,从而设置从开始到溢出的时间和次数
这些都是标准MCS-51中的中断结构,实际上你所使用的STC89C52RC是增强型的51单片机,它还有T2定时/计数器和对应的控制位。

我感觉是你用了“using 0”而画蛇添足了。我印象中不同优先级的中断必须分配不同的工作寄存器组,你把两个外部中断都用了using 0,而你的计数器中断又不用using声明一般默认为寄存器组0,这样你三个中断都是寄存器组0,估计会出问题。一般“using 0”不写,交给编译器分配好一些。
你把两个“using 0”删了看看。应该是这问题吧。

#include<reg52.h>
unsigned char i;
main()
{
P2=0xff;
TMOD=0X01; //一般用方式1
EA=1;
ET0=1;
//IE=0xff; //多余
TH0=0;
TL0=0;
TR0=1;
while(1);
}
void time0() interrupt 1 //定时器0
{
TH0=0;
TL0=0;//重新装初值
P2--;
}
以上程序中断会每隔65536us(如果你眼睛够快的话,但是以这个速度人眼应该感觉不到,你可以每隔20次中断再让P2自减一次,这样效果更好)发生一次,但是由于P2--;自减8次之后就会变成0x00,所以之后就看不到任何现象,如果在P2之后添上如下语句就会一直看到所对应的现象(比如流水灯):
i++;
if(i==8)
{
i=0;
P2=0xff;
}
玩单片机一定要多练,希望对你有帮助,再不懂就给我留言,祝你成功

程序是没有问题啊,运行正常的(每次中断P2=P2-1),检查一下硬件连接。
可以中断时间设置长一点 如
TMOD=0X01; // 用定时器方式1 中断时间会长很多

  • 请教下STC单片机定时器的问题:
    答:TO&T1做timer用,会产生定时中断啊,pin脚做IO当然可以了,但用做counter的时候就不行了
  • STC51单片机 中断问题 高手请进
    答:我感觉是你用了“using 0”而画蛇添足了。我印象中不同优先级的中断必须分配不同的工作寄存器组,你把两个外部中断都用了using 0,而你的计数器中断又不用using声明一般默认为寄存器组0,这样你三个中断都是寄存器组0,估计会出问题。一般“using 0”不写,交给编译器分配好一些。你把两个“using...
  • STC15F104W的单片机为啥用定时器0中断时EEPROM就不能读出数据了?_百度...
    答:感觉如果在读EEPROM之前加一句TR0=0;应该是可以关闭T0的,多试试。
  • STC单片机89C52问题
    答:定时器0中断标志位是ET0,不是TR0,TR0是你使能定时器0中断的,也就是说只有你TR0=1的时候,定时器才开始计数,计数到的装值后,ET0=1,这个才是中断标志。
  • stc51单片机利用外部中断记录两次中断获取时间间隔。100分,满意加100...
    答:很简单的了,首先定义两个静态变量static u8 flag=0;static u16 timecount;设置一个静态变量,第一次进入外部中断(外部中断应该设置成下降沿触发)的时候,if(flag == 0){启动定时器0,TR0 = 1; } else { TR0 = 0; 关闭定时器,读取计时值timecount; flag = 0;};在定时器中断里面 time...
  • stc12c5a60s2单片机用定时器0作pwm输出时,定时器0会产生中断吗
    答:stc12c5a60s2 单片机用定时器0作pwm输出时,定时器0会产生中断吗?你设置允许中断,就会产生中断,否则不能。一般都会允许中断,这样输出的PWM波准确,编程方便。
  • STC15W404AS和STC89C52RC的定时器配置和中断函数有什么不同,要改哪些...
    答:STC15W404AS虽然是1T的单片机,但定时器T0与STC89是兼容的,对定时器没影响。但不能用T1定时,因STC15W404AS没有T1定时器,见下表。另外,你原电路如果用到P0也不行了的,因STC15W404AS没有P0口了,电路要改,程序也要改。如下图的封装图。
  • stc51单片机的外部中断问题
    答:请问你这个触发中断是一个按键?你触发的方式是长时间按下还是瞬间按下?我觉得你应该是长时间按下的。回到正题,你这个中断服务函数里只有一句代码,那么中断服务函数执行的速度会很快的,所以如果你只按了一下的话那么看起来就感觉没有执行一样,更重要的是你这个中断服务函数里没有对按键进行消抖,...
  • 关于STC12C5A60S2单片机的中断
    答:EA:总中断允许控制位。EA = 1,开放所有中断。EA = 0,禁止所有中断。不打开EA的话,单片机是不会响应中断的。
  • ...发生器时还要使能定时器(0/1)并允许定时器中断?
    答:串口1波特率可使用定时器1或者独立波特率发生器,使用定时器1时做波特率发生时,你就不能用定时器1了,使用独立波特率发生器时,定时器1得到释放,你可以随时使用;此时你使能定时器(0/1)并允许定时器中断只是为了释放定时器,当然你用不到定时器中断,也可以关掉,对波特率无影响的 ...