1、实验七 外部中断实验一.实验目的1.学习 PIC24F 系列单片机的中断原理及编程方法;2.掌握中断处理程序的编程方法和调试方法。二.实验原理PIC24F 系列单片机有 5 个外部中断输入,对应外部 5 个 I/O 管脚,每个中断都对应一个唯一的中断入口地址,当单片机响应中断时,会自动跳转到对应的中断入口地址处开始执行用户中断服务程序。依次设置如下寄存器:1.INTCON2:中断控制寄存器 2(有五个外部中断源) 。设置触发边沿:0为正边沿,即由低电平到高电平;1为负边沿,由高电平跳到低电平。2.IPCn:中断优先级寄存器。设置中断优先级,默认为4 ,可不设置。3.IFSn:中断标志状态寄存器
2、。初始化时需要置为零,每次运行中断服务函数的时候需要清零,否则会陷入陷阱。4.IECn:中断允许寄存器。 0为不允许中断, 1为允许中断。主程序正常执行时,遇到开放的中断信号,则自动跳转到中断服务函数执行。执行完毕,返回到原来的程序继续执行。三.实验内容1.单片机的一个 8 位端口作输出,连接 8 位发光二极管;单脉冲发生器作外部中断源,街道单片机的外部中断管脚。当外部中断发生时,中断处理程序将发光二极管显示的数字加一。#include unsigned int state=0; /定义全局状态变量void _ISR _INT0Interrupt() /中断服务程序 IFS0bits.INT0
3、IF=0; /清零标志位state+; /状态+1void IOInit() TRISD=0x0000; /初始化 PORTD 为输出INTCON2bits.INT0EP=0; /设置触发边沿为正边沿IFS0bits.INT0IF=0; /清零标志位IEC0bits.INT0IE=1; /允许中断int main(void) IOInit(); while(1) if(state255) /256 个状态结束重新循环state=0;PORTD = state; /逐位取反,发光二极管低电平点亮运行结果:试验:将单脉冲发生器改为使用 PIC24F 转接板上的按键作为外部中断源,会出现什么问题?应
4、如何处理?将单脉冲换为按键之后将出现按键抖动的问题,为此需要加入一个防抖动的程序,可以通过在中断开始时加入一个延时来完成。其他部分不变,加入延时函数,并将中断服务程序改为如下:void Delayms(unsigned int del) unsigned int j; while(del-) for(j = 0;j unsigned int flag = 0; /标志用来判断左移还是右移void Delayms(unsigned int del) /定义延迟函数 unsigned int j; while(del-) for(j = 0;j15)else /flag=0 则左移,即往低位移state=(state1)Delayms(600);运行结果:四.实验结果分析由于中断是在主程序之外打断运行的,所以在编写程序的时候应该尽可能简化中断服务程序,缩短其中的运行时间而将繁琐的运行过程放在主函数中进行。对于按键的抖动问题的解决方案不止一种,也可以通过在主程序中延时后判断按键是否依旧按下来从而消除其抖动的影响。五.心得体会本次实验让我们对外部中断的运行机制和编程有了一个初步的理解,使得单片机可以进行多任务的操作。中断可以通过解放 CPU 来更有效率地处理更多任务。使得单片机的功能更加强大。