前言:本次实验依旧是基于ccs开发环境下写入。
一、中断标志寄存器PxIFG
每个PxIFGx位是针对其相应I/O引脚的中断标志,并且当被选择的输入信号边沿出现在引脚上时被置位。当它们相应的PxIE位和GIE位被置位时,所有的PxIFGx中断标志要求一个中断。每个PxIFG标志必须由软件复位。软件也可设定每个PxIFG标志,从而提供了一个生成软件初始中断的方法。
● 位0:无中断等待
● 位1:一个中断等待
只有转换,而非静态电平,导致中断。如果在一个Px中断处理例程期间任何PxIFGx标志被置位,或着在一个Px中断处理例程的RET1指令被执行后被置位的话,被置位的PxIFGx标志生出另外一个中断。这确保每个转换被确认。
*注:当改变PxOUT或PxDIR时的PxIFG标志写入P1OUT,P2OUT,或P2DIR可导致设置相应的P1IFG或者P2IFG标志。
二、中断边沿选择寄存器PxIES
每个PxIES位相应的I/O引脚选择中断标志。
位 = 0:用一个低电平到高电平转换来设定PxIFGx标志
位 = 1:用一个高电平到低电平转换来设定PxIFGx标志
*注:当改变PxOUT或PxDIR时的PxIFG标志写入P1OUT,P2OUT,或P2DIR可导致设置相应的P1IFG或者P2IFG标志。
PxIESx | PxINx | PxIFGx |
0->1 | 0 | 可被置位 |
0->1 | 1 | 未改变 |
1->0 | 0 | 未改变 |
1->0 | 1 | 可被置位 |
三、中断使能PxIE
每个PxIE位启用相关的PxIFG中断标志。
● 位0:中断被禁用。
● 位1:中断被启用。
四、配置未使用的端口引脚
未使用的I/O引脚应该被配置为I/O功能,输出方向,并在板子上保持未连接状态,以防止一个悬空输入并减少流耗。由于引脚未连接,PxREN位来启用以防止悬空输入。未使用引脚的终止。
实验:用中断程序来执行按键操作
实验步骤:
首先配置P4.7I/O 口,让LED2初始状态为灭,再配置按键操作。(本次实验是基于上次实验的基础上进行的,因此与上次实验的相关性很大,因此有重复的地方会相应的简略。)
接下来配置中断相关的函数,配置P1.1I/O口为中断,因此将相应的位置1,把P1IE置1,打开了中断。 并且设定为下降沿触发(因为按键按下是低电平,因此P1.1口会从高电平变为低电平,所以是下降沿触发),要把相应的位置1,因此是把P1IES置1。一定要清除中断标志位,之后要打开全局中断。
最后我们要加入中断函数,#pragma相当于宏定义,此中断函数是一个模板,具体的如下图代码,都有相应的注释。
在if语句中,我们判断P1.1是否产生了中断,如果是要对中断标志位清零。进一次中断后,LED2会产生一次亮灭状态。
代码部分:
实验现象:
按键按下时,LED2会亮,再按下按键LED2会灭。(有时按键按以下会亮灭两次,这是因为按键有抖动,是由于重复进中断产生的)
*注:采用中断的好处是不占用CPU的时间,但是也可以处理这个任务~
总结
(使用中断需要注意的问题):把相应寄存器的中断都配置好,比如I/O口的中断首先使能相应的中断,然后设置以下边沿触发条件,再清除中断标志位,再打开全局中断,最后写中断服务函数,这个中断服务函数是一个模板,当用其他的端口时,我们只需将PORT1_VECTOR 与Port1_ISR修改即可。