51 单片机 2个定时器 同时工作

#include<reg52.h>
sbit LED1=P1^0;
sbit LED2=P1^1;
int a=0,b=0;
void init () //一些变量和中断T0T1的初始化
{
TMOD=0x11; //以下都是定时器T0T1的初始化
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
void time0() interrupt 1 //定时器中断T0 1S钟流水灯流一下
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++; //中断产生20次,一次50MS,所以20次就是1S
if (a==20) //如果20次到了
{
a=0; //从新开始20次
LED1=~LED1;
}
}

void time1() interrupt 3 //定时器中断T1
{
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
b++;
if (b==20)
{
b=0;
LED2=~LED2;
}
}
void mian()
{ void init ();
LED1=1;
LED2=1;
while(1);//等待中断

}
结果2个都不工作。。。。。

你的两个定时器的时间都设成一样的了,当两个定时器到了点后,单片机到底该进行处理那一个啊,所以要么你修改时间,要么你把IP优先寄存器设施下PT0或者PT1等于1,就行了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-06
试一试设置一下中断优先级,即IP寄存器。
可能是因为两个定时器同时中断,无法识别是谁中断吧导致的无法工作。
第2个回答  2013-06-06
错误void mian()
{ void init ();
应为
void main()
{init ();
main写成mian没有主程序,单片机不工作
调用子程序不能带void追问

还是不行。。

追答

程序看不出什么新问题,是不是硬件还有问题

51单片机两个定时器能共用吗
可以。可以运行,在执行A中断程序时,来了B中断,A的中断优先级高于B,B的中断请求将不被得到响应,51单片机有两个定时器,这两个定时器可以工作,互不影响。

51单片机可以两个定时器同时使用吗
两个定时器使用没有什么特殊设置,但是有一个经验你必须明白,中断里面重新对定时器赋值的操作必须放在中断处理的头端,否则会有一个整个中断处理的时间延时。如:void timer1()interupt3 using1 { ... \/\/如果这里的...程序段太长,那么每次中断就慢了处理这段程序的时间 TH1=0X..TL1=0X......

51 单片机 2个定时器 同时工作
你的两个定时器的时间都设成一样的了,当两个定时器到了点后,单片机到底该进行处理那一个啊,所以要么你修改时间,要么你把IP优先寄存器设施下PT0或者PT1等于1,就行了。

51单片机可以同时使用两个timer0吗
该情况不可以。51单片机可以同时使用两个定时器,分别是timer0和timer1,但不可以使用两个timer0。定时器0和定时器1都有自己的寄存器,可以独立设置计时器的时钟源、计时模式和计时时间。同时使用两个定时器可以实现更复杂的计时功能,如同时计时两个不同的事件。

51单片机两个定时器同时走吗
同时进行,互不干扰。单计数器溢出时进行一次中断,然后继续计数。切记,避免同时进入中断,否则程序会絮乱。但是设置优先级,能够解决这种问题。

关于51单片机使用两个定时器进行控制的问题
if(aa==20){ aa=0;D1=1;\/\/LED亮,持续亮两秒,TF1=0;TF0=1;} if(bb==40){ bb=0;D1=0;\/\/LED灭一秒 TF0=0;TF1=1;} } 并且在程序开始处开启定时器1(也就是先执行的定时器),但是要注意,你现在是两个定时器同时工作,应该在if中关闭当前的定时器,并打开另一个定时...

51单片机 如果有两个定时器都开,而且定时器0是1T的定时器1是12T的...
主程序运行的时候,定时器什么也不管,只管把定时寄存器按振荡源的频率来累加,加到溢出时 若开了中断就跳到中断域执行程序。

51单片机,定时器0和定时器1,都设为工作方式1,能否同时工作
可以,他们是独立工作,如果是中断的话,定时器0的优先级高于定时器1

51单片机T的两个计时器怎么同时使用
使用定时器首先要设置定时器的工作方式,在TMOD这个特殊寄存器设置,再设置初值,定多长时间,最后开定时器中断

51单片机同时使用两个计时器的问题
void main(){ TIMER_ini();while(1){ TEMP[0]=NUMBER[num\/1000];TEMP[1]=NUMBER[num\/100%10];TEMP[2]=NUMBER[num\/10%10];TEMP[3]=NUMBER[num%10];display(4,4);} } 问题就解决了。最后就一句,那计数是很快了,是每秒计一个数吗,还是就是计数?这样改,要关掉定时器T1的中断。

相似回答