用 C学习51单片机——记录 4、中断系统 (1)外部中断

用 C学习51单片机——记录 4、中断系统

用 C 学习51单片机过程与自我拓展——记录(STC89C52芯片)
前言——其实51并不太难,多看 多写代码,多调试,就一定会有所感悟。
所以我在此留下一些代码以供自己重复记忆,也希望能够帮到你!

废话少说,来!🙂☞

四、中断系统

中断系统算是属于51的中级难度部分了,同时这也十分重要,所以大家一定学好一点!💪

简单认识:
1、中断系统包含三大类:外部中断、定时器中断和串口中断。
串口中断没有再分类,
外部中断和定时器中断又分为两小类(看下图):

定时器中断外部中断
定时器0外部中断0(操作P3^2)
定时器1外部中断1(操作P3^3)

2、中断系统具有优先级(看下图)
在这里插入图片描述
这次我们先来看看最简单的外部中断

(1)外部中断

外部中断0和外部中断1,它们除了中断优先性上有先后差别外,其使用上两者没有太多的差别。
下面我们先来看看外部中断0的使用:
程序说明:
1、我在里面列了3种不同的方式来触发外部中断0,请大家看清楚说明
2、注意中断函数里 interrupt 后面的数字,与上面列举的优先级后的数字相对应

#include <reg52.h>
sbit s2 = P3^0;
sbit flag = P3^2;
sbit beep = P2^3;

void delay (int  z)//延时函数
{
	int i,j;
	for(i=z;i>0;i--)
		for(j=114;j>0;j--);
}

void int0Init ()//中断0的初始化
{
	EA = 1;	//打开中断总开关
	EX0 = 1; //打开外部中断0开关
	IT0 = 0; //ITO为0,触发中断方式为P3^2为0
			 //ITO为1,触发中断方式为下降沿触发
}

void main ()
{	
	int0Init();	//外部中断0初始化
	beep = 0;  //按下S2前蜂鸣器一直鸣叫
	while(1)
	{	
		if (s2  == 0)
        {
			delay(20);	 //消抖
			if(s2 == 0)
			{
/*方式一 、直接控制P3^2,触发中断*/
				flag = 0;
				flag = 1;
/*方式二、直接P3控制^2产生下降沿触发中断*/
//				flag = 1; //先置高P3^2
//              flag = 0; //置低P3^2产生下降沿
//				flag = 1; //拉高P3^2 结束中断(不能省略,否则只能中断一次)

//注意:使用方式三前先把程序中的flag=P3^2改为 flag = P3^6 
/*方式三、外部杜邦线P3^6连接P3^2使其为0触发中断*/
//				flag = 0; //利用相连接,拉低P3^6来拉低P3^2 
//				flag = 0; //CPU运行速度快,要检测两次P3^2为0才行
//				flag = 1; //拉高P3^2 结束中断
   				beep = 1;//关闭蜂鸣器,并不再响起
				while(!s2);	//松手检测
			}
		}
	}
}

void int0 () interrupt 0 //外部中断0函数
{
	P1 = ~P1; //通过打开流水灯显示中断的成功
} 

至于外部中断1的使用我就不多说了,
把上面的操作的IO口改为P3^3,把ET0改为ET1,IT0改为IT1,
程序最后一个中断程序的interrupt 0改为interrupt 1 就行了

希望这对大家有帮助!🤭

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值