(四)开启定时器2中断

定时器2中断的开启

借用isp软件生成代码

在这里插入图片描述

此代码仅仅是开启定时器2的定时功能

void Timer2Init(void)		//1毫秒@12.000MHz
{
	AUXR |= 0x04;		//定时器时钟1T模式
	T2L = 0x20;		//设置定时初始值
	T2H = 0xD1;		//设置定时初始值
	AUXR |= 0x10;		//定时器2开始计时
}

下面进行定时器2中断开启

打开STC15系列单片机用户手册

在这里插入图片描述

可以看到 IE(可位寻址) 和 IE2(不可位寻址) 两个中断允许控制寄存器;

可位寻址与不可位寻址的意思就是:是否可以按位进行赋值操作;

在这里插入图片描述

这里需要打开定时器2的中断开关,因此 IE2 的 ET2位 赋值为1,又因为IE2寄存器不可位寻址,则IE2必须整个字节进行赋值,即 IE2 |= 0x04;这样赋值。

在这里插入图片描述

打开定时器2中断后,还必须开启CPU响应所有中断(总中断允许位),因此 IE 的 EA位 赋值为1,又因为IE寄存器可位寻址,则IE中的每一位可以单独赋值,即"EA = 1"这样赋值。


最终开启定时器2中断的代码

void Timer2Init(void)		//1毫秒@12.000MHz
{
	AUXR |= 0x04;		//定时器时钟1T模式
	T2L = 0x20;		//设置定时初始值
	T2H = 0xD1;		//设置定时初始值
	AUXR |= 0x10;		//定时器2开始计时
	//***************************从此往上 只是单纯的开定时器2
	IE2 |= 0x04;	//开定时器2 的 中断
	EA = 1;		//总中断
}

定时器2中断服务函数的编写

查手册得到定时器2中断查询次序号

(当然也有计算公式)

查手册得次序号为12

在这里插入图片描述

通过公式计算

在这里插入图片描述

中断地址向量=0003H+ 中断序号×8
所以:中断序号 = (中断地址向量 - 0003H)/8;

例如: 定时器2中断(即中断序号为12) 其中断地址向量为0063H,0063H-0003H=0060H=96,96/8 = 12,因此定时器2中断号就为12.

中断服务函数编写

void Timer2Handler() interrupt 12
{	
//这里因为设置的是16位自动重载,不需要像传统51那样给定时器赋初值
}

结合之前学的点亮LED

(三)点亮你的LED

Led1闪烁的代码:

#include <STC15F2K60S2.H>

typedef unsigned char u8;
typedef unsigned int u16;

void DeviceCtrl(u8 p2data,u8 p0data)
{
	P0 = p0data;	//给数据
	P2 = (P2&0x1f)|p2data;	// (开门)
	P2 &= 0x1f;		//(关门)
}

void Timer2Init(void)		//1毫秒@12.000MHz
{
	AUXR |= 0x04;		//定时器时钟1T模式
	T2L = 0x20;		//设置定时初始值
	T2H = 0xD1;		//设置定时初始值
	AUXR |= 0x10;		//定时器2开始计时
	//***************************从此往上 只是单纯的开定时器2
	IE2 |= 0x04;	//开定时器2 的 中断
	EA = 1;		//总中断
}

void main()
{
	DeviceCtrl(0xa0,0x10);//buzz --close   relay --open
	DeviceCtrl(0x80,0xfe);//open led1
	Timer2Init();
	while(1){
		
	}
}

void Timer2Handler() interrupt 12
{
	static u16 one_sec = 0;
	
	one_sec++;
	if(one_sec<=1000){
		DeviceCtrl(0x80,0xfe);//open led1  亮
	}else if(one_sec<=2000){
		DeviceCtrl(0x80,0xff);//灭
	}else{
		one_sec = 0 ;
	}	
}

现象演示

(四)开启定时器2中断



----- 如有错误欢迎大家批评指正!!!

  • 42
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小爪.exe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值