实验七 外部中断实验

实验七 外部中断实验

ID:12004666

大小:12.10 MB

页数:4页

时间:2018-07-15

实验七 外部中断实验_第1页
实验七 外部中断实验_第2页
实验七 外部中断实验_第3页
实验七 外部中断实验_第4页
资源描述:

《实验七 外部中断实验》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验七外部中断实验一.实验目的1.学习PIC24F系列单片机的中断原理及编程方法;2.掌握中断处理程序的编程方法和调试方法。二.实验原理PIC24F系列单片机有5个外部中断输入,对应外部5个I/O管脚,每个中断都对应一个唯一的中断入口地址,当单片机响应中断时,会自动跳转到对应的中断入口地址处开始执行用户中断服务程序。依次设置如下寄存器:1.INTCON2:中断控制寄存器2(有五个外部中断源)。设置触发边沿:‘0’为正边沿,即由低电平到高电平;‘1’为负边沿,由高电平跳到低电平。2.IPCn:中断优先级寄存器。

2、设置中断优先级,默认为‘4’,可不设置。3.IFSn:中断标志状态寄存器。初始化时需要置为零,每次运行中断服务函数的时候需要清零,否则会陷入陷阱。4.IECn:中断允许寄存器。‘0’为不允许中断,‘1’为允许中断。主程序正常执行时,遇到开放的中断信号,则自动跳转到中断服务函数执行。执行完毕,返回到原来的程序继续执行。三.实验内容1.单片机的一个8位端口作输出,连接8位发光二极管;单脉冲发生器作外部中断源,街道单片机的外部中断管脚。当外部中断发生时,中断处理程序将发光二极管显示的数字加一。#include

3、4FJ64GA006.h>unsignedintstate=0;//定义全局状态变量void_ISR_INT0Interrupt()//中断服务程序{IFS0bits.INT0IF=0;//清零标志位state++;//状态+1}voidIOInit(){TRISD=0x0000;//初始化PORTD为输出INTCON2bits.INT0EP=0;//设置触发边沿为正边沿IFS0bits.INT0IF=0;//清零标志位IEC0bits.INT0IE=1;//允许中断}intmain(void){IOInit

4、();while(1){if(state>255)//256个状态结束重新循环state=0;PORTD=~state;//逐位取反,发光二极管低电平点亮}}运行结果:试验:将单脉冲发生器改为使用PIC24F转接板上的按键作为外部中断源,会出现什么问题?应如何处理?将单脉冲换为按键之后将出现按键抖动的问题,为此需要加入一个防抖动的程序,可以通过在中断开始时加入一个延时来完成。其他部分不变,加入延时函数,并将中断服务程序改为如下:voidDelayms(unsignedintdel){unsignedintj;

5、while(del--)for(j=0;j<1000;j++);}void_ISR_INT0Interrupt()//中断服务程序{Delayms(400);IFS0bits.INT0IF=0;//清零标志位state++;//状态+1}2.单片机的一个8位端口做输出口,连接8位发光二极管。按键1与按键2街单片机的两个外部中断管脚。按一次按键1,发光二极管循环左移显示;按一次按键2,发光二极管循环右移显示。移位的状态间隔0.5秒,要求用外部中断处理按键事件。#includeun

6、signedintflag=0;//标志用来判断左移还是右移voidDelayms(unsignedintdel)//定义延迟函数{unsignedintj;while(del--)for(j=0;j<1000;j++);}void_ISR_INT0Interrupt()//按键1中断服务程序{flag=0;//赋flag为0IFS0bits.INT0IF=0;//中断0标志清零}void_ISR_INT1Interrupt()//按键2中单服务程序{flag=1;//赋flag为1IFS1bits.INT1

7、IF=0;//中断1标志清零}voidIOInit(){TRISE=0x0000;//PORTE设为输出INTCON2bits.INT0EP=0;INTCON2bits.INT1EP=0;//将INT0和INT1设为正边沿触发IEC0bits.INT0IE=1;IEC1bits.INT1IE=1;//允许INT0和INT1中断IFS0bits.INT0IF=0;IFS1bits.INT1IF=0;//将INT0和INT1标志清零}intmain(void){unsignedintstate=0xFEFE,te

8、mp;IOInit();while(1){PORTE=state;//发光二极管当前状态temp=state;if(flag==1)//flag=1则右移,即往高位移state=((state<<=1)&0xFFFE)

9、((temp>>15)&0x0001);else//flag=0则左移,即往低位移state=((state>>1)&0x7FFF)

10、((temp<<15)&0x8000);Dela

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。