定时器\计数器中断

(1)工作原理:定时和计数可以一样理解,设置一定的数量,满足条件进行中断,这个满足条件成为溢出。
(2)如何配置定时器\计数器中断:
对TMOD赋值,以确定T0和T1的工作方式。
计算初值,并将其写入TH0、TL0或TH1、TL1。
中断方式时,则对EA赋值,开放定时器中断。
使TR0或TR1置位,启动定时/计数器定时或计数。

(3)原理结构:
在这里插入图片描述**TMOD寄存器****工作方式配置**

(4)源代码:1秒钟开关8位LED灯

#include<reg51.h>
#define LED P2
typedef unsigned char u8;
typedef unsigned int u16;
void Timer0Init()//定时器初始化
{
    
    
	TMOD=0x01;//TMOD赋值,确定是T0还是T1工作,选择计时工作模式,选择工作方式为方式1
	ET0=1;//允许中断
	EA=1;//开关总中断
	TR0=1; //启动定时器
	TH0=0xFC;
	TL0=0x18;//计算1ms中断的初值,写入TH0 TL0
}
void main()
{
    
    
	Timer0Init();//调用初始化函数
	while(1);
}
void Timer0() interrupt 1//中断响应函数
{
    
    
	static u16 i;
	TH0=0XFC;
	TL0=0X18;//1ms中断之后,由于选择的是方式1,不会寄存器重装,所以要把初值重新装入寄存器
	i++;
	if(i==1000)//1ms累加1000次就是1s
	{
    
    	
		LED=~LED;
		i=0;//清0,进入下一次累加
	}
}

猜你喜欢

转载自blog.csdn.net/m0_46484797/article/details/112864007