蓝桥杯单片机实训版学习周总结1-定时器和中断

本文详细介绍了单片机定时器的工作模式配置、初值设定、中断启用以及中断服务函数的实现,重点讲解了如何通过定时器T0实现5毫秒周期的中断,进而控制LED灯每0.5秒交替闪烁。代码示例中展示了定时器T0的初始化和中断处理过程,以及如何利用定时器溢出标志进行中断判断。
摘要由CSDN通过智能技术生成

首先看一个代码:

 //定时器初始化函数
void Init_Timer0(){
TMOD=0X01;	//定时器T0,工作方式2为16位定时/计数器;
TH0=(65536-5000)/256;  //高四位寄存器的值;
TL0=(65536-5000)%256;  //低四位寄存器的值;
ET0=1;	   //能定时/计数器中断;
TR0=1;	   //启动定时器T0 ;
EA=1;	   //开启总中断;
}
//定时器T0中断服务函数
void time() interrupt 1
{
TH0=(65536-5000)/256;  //5000us=5ms
TL0=(65536-5000)%256;  //5000us=5ms
count++;
if(count==100){
P00=~P00;//每隔0.5秒实现LED灯交替闪烁
count=0;
}

1.-设置定时器的工作模式

TMOD=0X01;

TMOD-定时器的工作模式设定

0X00 : 13位定时/计数器

0X01 : 16位定时/计数器,最大计数值65536

0X10 : 自动重装8位定时计数器,最大计数值255

0X11 : T0分为两个独立的8为定时/计数器,T1无计数

常用:0X10 模式

2.-初始化定时器的高八位和低八位的寄存器的时间

TH0=(65536-5000)/256;  //高四位寄存器的值;
TL0=(65536-5000)%256;  //低四位寄存器的值;

TH0=(65536-5000)/256;
TL0=(65536-5000)%256;

3.-允许定时器中断

ET0=1;	   //能定时/计数器中断;

ET0:定时/计数器T0中断控制位。ET0=1,允许T0中断;ET0=0,禁止T0中断。

4.-打开定时器

TR0=1;	   //启动定时器T0 ;

5.-开总中断

EA=1;	   //开启总中断;

EA:中断总控制位。EA=1,CPU开放所有中断;EA=0,CPU禁止所有中断。

小结:

TF:定时器溢出标志。溢出时该位自动置1。中断执行时硬件清0或软件清0

//如果没有开启中断,则用TF溢出来判断。

代码示例:

void main()
{
	TMOD = 0x10; //定时器 工作模式1
	TH0=(65536-50000)/256;  //高四位寄存器的值;
    TL0=(65536-50000)%256;  //低四位寄存器的值;
	TR1 = 1; //启动定时器
	while(1)
	{
		if(TF1 == 1)
		{
			TF1 = 0;
			TH0=(65536-50000)/256;  //高四位寄存器的值;
            TL0=(65536-50000)%256;  //低四位寄存器的值;
			counter ++;
		}
		if(counter == 20)	//1秒  50000us=50ms 50*20ms=1s
		{
			counter = 0;
			P00 = ~P00;//每隔一秒LED灯闪烁
		}	
	}
}

TR:定时器运行控制位。置1开始计时,清0停止计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值