ABOV单片机外部引脚中断EINT实现讲解及示例代码-[MC96F6332D]

一、准备工作

1、KEIL C51编译环境

2、CodeGen8 代码生成器

3、MC96F6332D 开发板

4、USB-OCD II仿真器

二、生成外部引脚中断的代码

1、在CodeGen8 代码生成器的外设窗口中选择内部RC时钟作为时钟源,设置时钟源的频率为8MHz,配置GPIO引脚P02和P52分别为外部的可中断输入引脚,使能MCU内部的上拉电阻和防抖动功能;具体配置如下图①、②所示,GPIO配置生成的代码如下图⑧所示:

2、配置外部中断引脚的中断方式为下降沿触发(因为有配置引脚内部的上拉电阻),使能引脚的中断功能;GUI的配置见下图⑤、⑥所示,在下图⑦中可以看到配置后的引脚高亮显示了当前的引脚复用功能;中断功能配置生产的代码如上图③所示;

3、点击CodeGen8 中的C 图标,自动打开KEIL C51软件;下一步进行代码的修改、编译和程序下载

4、在中断函数中添加代码,对外部中断进行状态标志,避免在中断函数中进行数据的处理(中断函数讲究快进快出);

//定义2个全局变量,用来表示外部中断的状态
unsigned char EXIT8_STA = 0;
unsigned char EXIT0_STA = 0;

//======================================================
// interrupt routines
//======================================================

void INT_Ext8() interrupt 6
{
	// External interrupt 8 
	EXIT8_STA = 1;		//外部中断8标志使能
	
}



void INT_Ext0_7() interrupt 5
{
	// External interrupt 0 ~ 7
	//判断外部引脚0是否被按下
		if(EIFLAG0 & 0x01)
			{
				EIFLAG0 &= 0xFE;
				EXIT0_STA = 1;		//外部中断0标志使能
			}
}

特别注意:外部中断0-7中断后需要软件手动清除标志位;在规格书中也同样有体现:

5、关于引脚的方向和上拉寄存器在此不再赘述,之前的GPIO章节有详细讲解;

此处针对消抖做下介绍:现代单片机MCU内部可以对引脚进行消抖处理,所以引脚外部可以不增加滤波电容或电阻等硬件电路;关于消抖的使用:需要先配置消抖的时钟,然后对需要消抖的I/O口进行配置即可;消抖时钟寄存器和端口引脚的消抖配置如下图所示:

6、关于外部中断的触发条件配置:MCU外部的中断触发有3种可供选择,一般情况下会选用最多的是上升或下降沿触发,因为之前GPIO引脚有配置内部的上拉电阻,所以此处配置为下降沿触发;

特别注意:在代码生成器中自动生成的EIPOL1寄存器配置为了0x56;见文章前面的图④所示:此处应该配置0x02即可;

建议:因为外部中断设置都是单独打开和关闭,所以只要使用的中断引脚触发条件配置正确即可,当然还是推荐采用正确配置,便于之后代码的调试工作。

7、使能外部引脚对应的中断,可以看到总中断的开关也是在IE寄存器中进行配置。

外部中断8在IE1寄存器中进行配置,如下图所示:

8、在主函数中增加判断外部中断标志的代码

//主函数中增加如下代码

if(EXIT8_STA)		//判断外部中断8是否存在
		{
			EXIT8_STA = 0;
			printf("EXIT 8 Interrupt.\r\n");
			
		}
		else if(EXIT0_STA)	//判断外部中断0是否存在
		{
			EXIT0_STA = 0;
			printf("EXIT 0 Interrupt.\r\n");
		}

9、点击编译器的下载按钮,将刚刚编译好的代码下载到MCU中进行调试仿真。

10、连接串口助手到PC端,可以看到代码可以正常运行。

三、实验现象(具体内容可以参考工程中的Readme.txt文件)

1、MCU主频选择为内部8MHz;

2、当引脚P02和P52有下降沿时会触发中断,在主函数中会判断对应的中断状态是否为真,如果为真,串口会打印对应的中断内容提示有中断触发,见上图;

3、具体的代码可以访问链接:https://share.weiyun.com/5efkBCB;进行免费下载。


因为小编自己能力水平有限,文中难免有错误或表达失误的信息,还望广大阅读者留言批评指正,谢谢。

猜你喜欢

转载自blog.csdn.net/praguejing/article/details/105211869