51单片机中断嵌套,定时器延时

本文详细讲解了如何在51单片机中实现定时器延时和外部中断的嵌套应用,包括设置定时器的工作方式、中断配置、中断函数编写和完整代码示例。通过定时器定时和外部中断触发,演示了如何控制程序流程并进行精确的时间控制。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

这里讲的是中断嵌套,具体的话是用定时器延时,外部中断触发,不断切换


提示:以下是本篇文章正文内容,下面案例可供参考

一、如何做到定时器延时?

1、设置定时器:若晶振为12M赫兹,则定时器每接受一个脉冲需要的时间为1us;设置定时其工作方式为方式2,为八位自动重装载模式(TMOD=0X02),既一次定时最多0.256ms,我们这里设置一次定时为0.2ms(即我们设置TL0=0X38,TH0=OX38);
2、定时器中断:定时器中断需要设置总中断,源中断,优先级以及定时器的计数运行控制位,打开总中断(EA = 1),源中断(ET0 = 1),优先级设置高优先级(PT0 = 1)(以便于在中断触发程序中调用),设置计数运行控制位为停止模式(TR0=0)(这里先不开启定时器,在定时器延时函数
中在开启定时器,延时完成后再关闭定时器),编写定时器中断程序(这里用的是定时时器0中断,中断触发等级为interrupt 1)。

二、如何做到外部中断?

外部中断:设置外部中断要设置触发方式,总中断,源中断,以及优先级(单一中断优先级可不设置,不设置默认为低优先级,以及外部中断请求标志位硬件自动清零),这里设置下降沿触发(IT0 = 1),打开总中断(EA = 1),源中断(EX0 = 1),编写中断触发程序(这里用的是外部中断0,即中断触发程序等级为最高(不是优先级,是指在同一个优先级里面的等级梯度 ),为interrupt 0)。

三、完整代码

代码如下(示例):

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

int a1,a2=0,a3,a4;

/*延迟函数*/
void delay_ms(uint x)
{
   
   
	uint i,j;
	for(i=0;i<=x;i++)
	for
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值