用 C学习51单片机——记录 4、中断系统
用 C 学习51单片机过程与自我拓展——记录(STC89C52芯片)
前言——其实51并不太难,多看 多写代码,多调试,就一定会有所感悟。
所以我在此留下一些代码以供自己重复记忆,也希望能够帮到你!
废话少说,来!🙂☞
四、中断系统
中断系统算是属于51的中级难度部分了,同时这也十分重要,所以大家一定学好一点!💪
简单认识:
1、中断系统包含三大类:外部中断、定时器中断和串口中断。
串口中断没有再分类,
外部中断和定时器中断又分为两小类(看下图):
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 就行了