定时器\计数器中断

本文介绍了单片机中定时器的工作原理和配置方法,通过设置定时器中断来实现每1秒钟切换8位LED灯的状态。首先解释了定时器的溢出概念,然后详细阐述了配置定时器/计数器中断的步骤,包括设置TMOD、计算初值、开放中断和启动定时器。最后,提供了一段C语言源代码,展示了如何在中断服务函数中计数并控制LED灯的亮灭。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(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,进入下一次累加
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值