定时器中断控制LED闪烁(每隔1s)---普中科技开发仪

定时器中断o,利用中断控制LED闪烁每隔1s闪烁一次(精确的1s
notes:
(1)工作方式寄存器TMOD ,低四位用于To,高四位用于T1,(GATE,C/T- ,M1,M0)
一般让GATE =0,C/T=0是定时器,C/T=1是计数器;
MiM0: 工作方式设置位,一 般用01 (16位定时计数器)或者10 (8位自动重装定时计数器)

(2)定时器中断的步骤:
一,对TMOD赋值,确定T0或T1的工作方式:
二,计算初值,并写入TH0, TL0或者TH1 ,TL1
三,开放定时器中断ETx=1以及总中断EA=1;
四,打开定时器:
(3)M1M0:01 (16位定时计数器)和10(8位自动重装定时计数器)的区别在于前者需要在中断里面重新设置THx以及TLx初值,后者则不需要。

/*********************************


*********************************/
#include"reg52.h"
#include"intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit led=P0^0; 
sbit K3=P3^2; 
u16 i=0;
void delay(unsigned int);
void delay(unsigned int i)
{
  unsigned int j;
	for(;i>0;i--)
	 for(j=0;j<124;j++)
	{}
}
void main()
{
	TMOD|=0x01;//选择为定时器0模式,工作方式1,具体上面讲的详细
	
	TH0=0XFC;//2^16-1000+1再取16进制(1000=1ms/1us)
	TL0=0X18;//给定时器赋初值,定时1ms
	
	ET0=1;//打开定时器0中断允许
	EA=1;//开总中断
	TR0=1;//´打开定时器T0
	while(1)
	{
	}
}
void time0()interrupt 1
{
	TH0=0XFC;
	TL0=0X18;
	i++;
	if(i==1000)
	{
		i=0;
		led=~led;
	}
}

此篇文章可以对比外部中断,对比着看。

你可能感兴趣的:(单片机)