要实现T0中断,需要选择中断模式和T0工作方式,以及确定TH0和TL0的初始值

我们做一个1ms的定时,51单片机的晶振为12MHz,采用方式一的工作方式,所以初始值为(0x10000-x)*12MHz/12= 1ms 解的初始值为:TH0=0xFC,TL0=0x18.

main.c代码:

#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit led = P0^0;
//T0中断初始化
void Timer0Init(){
	//工作方式一 模式T0定时器 GATE模式为1,即INIT引脚为高电平才会触发定时
	TMOD |= 0X01;
	//打开T0中断允许
	ET0=1;
	//打开总中断
	EA = 1;
	//定时器赋值,延时1ms计算方式 0x1000-0xfc18=1000   1000*12/12MHZ = 1ms
	TH0=0XFC;
	TL0=0X18;
	//启动计数器
	TR0=1;		
}
//T0中断执行代码
void Timer0() interrupt 1{
	u16 i;
	//赋值定时器
	TH0=0XFC;
	TL0=0X18;
	i++;
	if(i==1000){
		led = ~led;
		i=0;
	}
	
}
void main(){
	Timer0Init();
	while(1);
	
}

Protues仿真

仿真及连线
分类: MCS-51

0 条评论

发表评论

电子邮件地址不会被公开。