51单片机中断定时

51单片机中断定时51单片机定时器T1中断怎么使每隔30秒控制一个引脚的低电平高电平,就是隔30秒一变,高低高低高低高低高低这么每隔30一变

51单片机定时器T1,直接定时30秒是不行的,但是,可以定时50ms,以晶振为12M为例,时间常数是:
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
开中断,在中断程序中计数,每中断计一个数,计数600次,就是30秒了,对一个引脚取反,就可以高低变化了,每隔30秒一变。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-25
定时50ms中断一次,600次就是30s,这时将某管脚取反一次即可
sbit LED =P1^0;//定义管脚
uint a=0;//计中断次数的变量
TMOD=0x10; //定时器1工作在定时方式1
TH1=(65536-50000)/256; //定时50毫秒
TL1=(65536-50000)%256;

ET1=1;EA=1;
TR1=1;
void timer1(void) interrupt 3//中断子程序
{
TH1=(65536-50000)/256; //定时50毫秒
TL1=(65536-50000)%256;

a++;
if(a==600){a=0;LED=!LED;}//600次是30s LED就就是要输出高低电平的管脚
}
第2个回答  2017-12-25
30秒这个时间比较长,不知道你的晶振选用的什么频率。一般来说16位方式也很难做到30秒,所以需要借助一个全局的counter变量来辅助提升定时器位数。