历史上的今天
今天是:2025年07月16日(星期三)
2018年07月16日 | 51单片机之——外部中断0(INT0)
2018-07-16 来源:eefocus
寄存器是干什么的?怎么配置它?配置完寄存器后,有什么作用呢?
寄存器是中央处理器内的组成部分。它是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。寄存器可以用来暂存指令、暂存数据、暂存地址。换而言之,我们配置寄存器,便是给寄存器中赋予一定的值,而这些值又要与我们的目的想对应,这样它便会有相应的作用。
例如,芯片的资料规定,当给芯片的 A 寄存器赋“0x11”时,它会出现 B 现象;赋“0x77”时,它会出现 C 现象。那么当我们目的是完成 B 现象时,我们就只需要配置 A 寄存器为“0x11”即可。
虽说看起来很简单,并且去完成目的时的流程并非这么容易。但是,实实在在而言,这些就是控制寄存器的根本!
这里以外部中断0(INT0)为例,使得外部中断0每发生一次,最后一位数码管的数值加1。
前一篇博文已经提到,要实现外部中断0,就必须要配置好两个寄存器IP、IE。而对于中断优先级寄存器IP,当我们使用默认优先级时(上篇博文的优先级表格所述),就不必要去配置IP。
接下来附上IE寄存器的每一位的作用:
首先,中断允许位寄存器 IE 是可位寻址的,意思是说,我们可以单独的对D0~D7每一位进行操作,而不需要对 IE 整个赋值(为什么可以这样,因为keil的头文件“reg52.h”已经对 IE 的地址进行了定义)。
在这里说明一点,对于51单片机的 I/O 口而言,上电时,默认输出为高电平。对于其寄存器而言,上电是,默认为0。可见,当要完成外部中断0的配置时,我们只需要配置中的EX0、EA,当然还有外部中断0的触发方式(产生方式),这里就要看到中断及控制寄存器TCON,其成员及意义如下:
可见外部中断0和外部中断1的设置方式雷同,跟据上表所述,我们通过设置IT0来设置外部中断0的触发方式(分别为:低电平触发、下降沿触发),其中 IE 位由硬件自身控制,不需要软件操作。
实例的核心代码如下:
/*数码管配置完成*/
void main()
{
IT0 = 1; //设置为下降沿触发
EX0 = 1; //外部中断0中断允许位
EA = 1;
while(1); //等待外部中断0发生
{
display();
}
}
void INT0() interrupt 0 //中断服务函数的书写格式
{
if( IE == 1) //产生了外部中断,IE 自动置为1
{
dspbuf[0]++;
}
}
在上面可以看到配置外部中断0相关的寄存器时,我们先打开EX0=1,允许外部中断产生,再EA = 1,打开总中断,这样就配置好了能产生外部中断0的先决条件,通过IT0 来配置中断的触发方式。在中断服务函数中,函数名“INT0”可自由编写,并且中单服务函数不需要声明,后面所加的“interrupt X”X为该中断对应的C语言序号。
值得注意的是,对于51单片机而言,上电之后,所有寄存器的值默认为“0”,所有 I/O 口的值默认为“1”。
通过外部中断的理解,很方便的能引出下一节的定时器/计数器中断。
下一篇:51单片机中断详解(中)
史海拾趣
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 急需!!! 电子技术研发设计开发方案!!! 急需!!! 方案!!! 公司拓展,急需方案,请拥有方案或部分技术的公司和个人迅速与我联系, 请注明公司全名或个人的姓,详细准确的 ...… 查看全部问答> |
|
需要加几个硬件功能按钮,因而与用户软件之间有一点点接口。 大家帮忙推荐一下,哪家工控机制造商(最好是北京的,沟通和联调会方便些)会承接这方面的业务? 哪些厂家的产品质量好些?… 查看全部问答> |
|
本人第一次接触VHDL编成,使用的是Xilinx ISE7.1。由于是第一次接触,也没有找到什么合适的参考书,所以对于这个环境的使用方法还十分不熟悉,请高手指点。 我只写了一个多路选择器的小程序,写完之后该怎样调试?仿真的时候还需要建立什么波形文 ...… 查看全部问答> |
|
不知道何时才能见到你 Windows API 程序设计参考大全 你让我找了好久... 也没有一点头绪 真的快崩溃了啊... 朋友们快快帮帮我吧 在哪儿能买到? 二手的也行 在此先谢谢朋友们了... 急需急需!!! … 查看全部问答> |
|
因客户的要求,需将一USB驱动打包成安装程序,如下: 我现有驱动包含两个文件,一个是.ini文件,一个是.sys文件,在插入USB设备时,只要选择该文件目录,系统就可安装该驱动。 现在我该如何将这两个文件打包成可执行文件?… 查看全部问答> |
|
我在做MMA7455测角度,测量出来的数据除去最高的标志位剩下的数据在0到66,但是不清楚得到的这个数据怎么转换成角度??那位给我解释下 或者加我QQ350091724… 查看全部问答> |




