实验二 按键中断实验
- 格式:docx
- 大小:118.57 KB
- 文档页数:4
实验二按键中断实验一、实验目的了解中断的含义二、实验内容板子加电后,按动板子上K1-K3按键,可控制对应的LED1-LED3的亮灭,该实验学习了外部中断(EXTI)程序的编制及控制流程。
三、实验仪器、设备计算机、开发板、keil软件四、硬件设计在开发板上V6、V7、V8分别与MCU的PB5、PD6、PD3相连,如下图所示键盘部分如下图所示:例程所用到的列扫描线:PC5,PC2,PC3。
例程所用到的行扫描线(EXTI中断线):PE2。
五、实验要求和步骤开发板上有3个蓝色状态指示灯V6(LED1),V7(LED2),V8(LED3),通过对应的按键K1-K3,控制LED的亮灭,将PE2引脚配置为外部中断,当其上出现下降沿时产生一个中断,根据扫描PC5,PC2,PC3来判别是哪个按键按下。
首先我们了解一下什么是外部中断/事件控制器(EXTI)。
外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。
每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。
每个输入线都可以被独立的屏蔽。
挂起寄存器保持着状态线的中断要求。
EXTI控制器的主要特性如下:每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达19 个中断/事件请求检测脉冲宽度低于APB2 时种宽度的外部信号如要产生中断,中断线必须事先配置好并被激活。
这是根据需要的边沿检测通过设置2个触发寄存器,和在中断屏蔽寄存器的相应位写“1”到来允许中断请求。
当需要的边沿在外部中断线上发生时,将产生一个中断请求,对应的挂起位也随之被置1。
通过写“1”到挂起寄存器,可以清除该中断请求。
为产生事件触发,事件连接线必须事先配置好并被激活。
这是根据需要的边沿检测通过设置2个触发寄存器,和在事件屏蔽寄存器的相应位写“1”到来允许事件请求。
当需要的边沿在事件连线上发生时,将产生一个事件请求脉冲,对应的挂起位不被置1。
实验二、中断实验――中断优先级控制及中断保护一、实验目的1、掌握单片机中断机制。
2、熟悉中断的应用和编程。
二、实验设备1、 仿真器;2、 单片机最小系统;3、 发光二极管阵列显示模块;4、 独立式键盘模块。
三、实验要求连接单片机最小系统和发光二极管阵列的电路并编写程序,学习单片机中断机制,及中断优先级和中断保护的方法:使用独立式按键1连接0INT (P3.2),按键2连接1INT (P3.3),在平时状态下,发光二极管行以200ms 的时间间隔,依次点亮。
1键按下时0INT 中断处理程序点亮P0.0对应的发光管2秒钟,其他发光管熄灭;2键按下时P0.1对应发光管点亮2秒,其他发光管熄灭。
四、实验原理通常一个微处理器读取外围设备(如键盘等)的输入信息的方法有轮询(Polling)及中断(Interrupt)两种。
轮询的方法是CPU 依照某种既定法则,依序询问每一外围设备I /O 是否需要服务,此种方法CPU 需花费一些时间来做询问服务,当I /O 设备增加时,询问服务时间也相对增加,势必浪费许多CPU 时间,降低整体运行的效率。
使用中断是一个较好的解决方法。
使用中断使系统对外部设备的请求响应更加灵敏,并且不需要占用CPU 的时间进行轮询。
但是,当使用中断,特别是有多个中断嵌套时要特别注意内存单元的保护。
1 80C51中断结构当中断发生后,程序将跳至对应中断入口地址去执行中断子程序,或称中断服务程序(Interrupt Service Routine),这些特殊的地址称为中断向量,例如当80C51外部中断INTl 发生时,会暂停主程序的执行,跳至地址0013H 去执行中断服务程序,直到RETI 指令后,才返回主程序继续执行。
MCS-51系列的程序内存中有7个矢量地址,叙述如下:(1)00H 复位当第9脚RESET 为高电平,CPU 会跳至地址00H 处开始执行程序,亦即程序一定要从地址00H开始写起。
实验二中断实验一、实验目的1、掌握数码管的静态和动态扫描显示法。
2、掌握单片机系统中断的原理及使用方法。
3、理解键盘去抖动的原理。
二、实验原理1. 发光二极管的工作原理发光二极管简称为LED(Light Emiting Diode)。
通常所说的LED显示器由7个发光二极管组成,因此也称之为七段LED显示器,其排列形状如图8.15(a)所示。
此外,显示器中还有一个小圆点型发光二极管(在图中以dp表示),用于显示小数点。
通过七段发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符合。
LED显示器中的发光二极管共有两种连接方法,一种是共阴极连接,另一种共阳极连接。
其连接图如图8.15(b)所示。
图七段LED显示器使用LED显示器时,要注意区分这两种不同的接法。
为了显示数字或字符,必须对数字或字符进行编码。
七段数码管加上一个小数点,共计8段。
因此为LED显示器提供的编码正好是一个字节。
用LED显示器显示16进制数的编码已列在表7-4所示。
表LED显示器16进制数编码通常使用的LED显示器都是多位的。
对多位LED显示器,通常采用动态扫描的方法进行显示,即逐个循环点亮各位显示器。
为了实现LED显示器的动态扫描除了要给显示器提供段码(字形编码)的输入之外,还要对显示器加位的控制(控制LED显示器亮灭),这就是通常所说的位控和段控。
2 、中断知识在计算机系统中,中断可以由各种硬件设备产生,以便请求服务或报告故障等。
此外,中断也可由处理器自身产生,例如,程序错误或对操作系统的请求做出响应等。
89C51 的中断系统具有5 个中断源,即2 个外部中断、2 个定时器中断和1 个串行中断。
(三)、按键抖动抖动的原因:目前大部分按键或键盘都是利用机械触电的合、断作用。
机械触点在闭合及断开瞬间由于弹性作用的影响,在闭合及断开瞬间均有抖动过程,从而使电压信号也出现抖动,抖动时间的长短与开关的机械特性有关,一般为5~10ms。
键盘中断微机实验报告1. 引言键盘中断是计算机硬件系统中常见的一种输入设备中断方式,其功能是在用户通过键盘输入时,中断处理器正常运行的流程,将键盘输入的数据传递给操作系统供其处理。
本次实验旨在通过搭建一个简单的键盘中断实验系统,加深对键盘中断原理及操作的理解。
2. 实验原理2.1 键盘中断键盘中断是一种异步的硬件中断方式,即键盘通过给中断控制设备发送中断请求信号,从而将中断信息传递给CPU。
一旦发生键盘中断,CPU将停止当前执行的任务,跳转到事先设置好的中断处理程序,处理键盘中断事件。
2.2 实验系统本次实验使用Intel 8086微处理器、键盘控制器8042和键盘作为实验系统的主要硬件设备。
系统的基本结构如下图所示:与中断控制器连接。
- 打开中断屏蔽位,以允许中断请求通过。
3.4 运行实验程序完成前述步骤后,我们可以运行实验程序,测试键盘中断的正常工作。
当用户按下键盘时,键盘中断会触发,并将键盘输入的数据传递给中断处理程序进行处理。
4. 实验结果与分析经过测试,我们发现实验系统能够正确地接收和处理键盘输入的数据。
二、中断实验1.实验目的(1)熟悉单片机中断的概念;(2)学习外部中断的设置和使用;(3)编写程序,使用按键中断的方法来控制LED灯的亮、灭状态;(4)通过模块化编程,养成良好的编程习惯。
2.实验设备(1) CC2530核心板一块;(2)传感器底板一个;(3)仿真器一个;(4)方口USB线一根;3.实验原理3.1硬件设计原理本实验硬件设计原理图如图2-1。
按键S101接在了CC2530的P1.5管脚上,当按下按键S101时,P1.5管脚变为低电平;松开按键,P1.5管脚变为高电平。
我们可以设置单片机检测P1.5管脚上升沿或者是下降沿来触发中断。
图2-1按键原理图中断是单片机实时地处理内部或外部事件的一种内部机制。
当某种内部或外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。
单片机的中断过程如图2-2所示。
图2-2单片机中断过程CC2530的中断系统是为了让CPU对内部或外部的突发事件及时地作出响应,并执行相应的中断程序。
中断由中断源引起,中断源由相应的寄存器来控制。
当需要使用中断时,需配置相应的寄存器来开启中断,当中断发生时,将跳入中断服务函数中执行此中断所需要处理的事件。
本实验将介绍CC2530中断的使用,包括中断源、中断向量、中断优先级以及中断编程。
3.2中断源与中断向量CC2530有18个中断源,每个中断源都可以产生中断请求,中断请求可以通过设置中断使能SFR寄存器的中断使能位IEN0、IEN1或IEN2使能或禁止中断。
CC2530的中断源如表2-1所示。
当相应的中断源使能并发生时,中断标志为将自动置1,然后程序跳往中断服务程序的入口地址执行中断服务程序。
待中断服务程序处理完毕后,清除中断标志位。
中断服务程序的入口地址即中断向量,CC2530的18个中断源对应了18个中断向量,中断向量定义在头文件“ioCC2530.h”中,其定义如下。
一、实验目的1. 熟悉单片机中断系统的工作原理和中断响应过程。
2. 掌握使用外部中断实现单个按键控制的实验方法。
3. 学习通过编程设置中断源、中断优先级和中断服务程序。
二、实验原理单片机的中断系统允许CPU在执行程序的过程中,暂停当前程序的执行,转而处理由外部事件引起的中断请求。
在本实验中,我们使用外部中断0(INT0)来实现单个按键的控制。
当按键按下时,通过外部中断0引脚(P3.2)向CPU发送中断请求。
CPU响应中断后,暂停当前程序的执行,转而执行外部中断0的中断服务程序(ISR)。
在中断服务程序中,我们可以根据按键的状态来执行相应的操作,例如点亮或熄灭LED灯。
三、实验设备1. 单片机开发板(如STC89C52)2. 按键3. LED灯4. 连接线5. 仿真软件(如Keil uVision)四、实验步骤1. 硬件连接:- 将按键的一个引脚连接到单片机的P3.2引脚(外部中断0)。
- 将按键的另一个引脚连接到地(GND)。
- 将LED灯的正极连接到单片机的P1.0引脚,负极连接到地(GND)。
2. 编写程序:- 使用Keil uVision软件编写程序。
- 初始化外部中断0,设置中断优先级和中断服务程序。
- 编写中断服务程序,根据按键状态控制LED灯的亮灭。
3. 编译程序:- 使用Keil uVision软件编译程序,生成可执行文件。
4. 下载程序:- 将编译好的程序下载到单片机开发板上。
5. 运行程序:- 观察按键按下时LED灯的亮灭状态,验证中断功能是否正常。
五、实验代码```c#include <reg52.h>#define LED P1_0#define BUTTON P3_2void main(void) {EA = 1; // 开启总中断EX0 = 1; // 开启外部中断0IT0 = 1; // 设置外部中断0为下降沿触发while (1) {// 主循环,等待中断}}void ext0_isr(void) interrupt 0 {LED = !LED; // 切换LED灯状态}```六、实验结果与分析1. 实验结果:- 按键按下时,LED灯亮;按键释放时,LED灯灭。
一、实验目的1、学习外部中断指令的基本使用方法;2、学习外部中断处理程序的编程方法。
二、实验内容1、在试验一的内容的基础上增加允许急救车优先通过的要求;2、急救车到达时(产生外部中断),交通信号为全红,以便让急救车通过;3、急救车通过路口的时间为10秒(四个红灯亮10秒)。
急救车通过后,交通灯恢复原状态(中断前的状态)实验说明:交通灯的亮灭规律同实验一;执行中断程序时,应注意保护现场(保护中断前的状态),使中断程序执行完毕后交通灯能返回中断前的状态。
所谓保护现场,即保护有关的寄存器;主程序的延时程序和中断处理程序所使用的寄存器不应该混用;主程序中,每次经74LS273端口输出数据时,要先将输出数据保存、再输出,否则显示容易出错,而无法返回中断前状态。
例如:MOV A, #0F0H (0)MOVX R1,A (1)MOV SR1,A (2)假设程序执行(1)时发生中断,而中断结束返回主程序前执行了一条MOV A, SR1 的指令,则由于主程序没有执行(2),故SR1的内容应该是上次操作存入的数据,而不是(0)指令中的0F0H,容易出错。
(1)、(2)条指令的顺序可以颠倒。
三、实验参考电路图(如下)图1:实验接线图实验程序框图开始初始化定时器、送计时初值东西南北红灯亮、绿灯黄灯灭、延时南北红灯亮、绿灯黄灯灭,东西绿灯亮、红灯黄灯灭、开定时器中断,开定时器计时NY南北红灯亮、黄灯灭,东西绿灯红灯灭、黄灯闪烁计时NY东西红灯亮、黄灯绿灯灭,南北绿灯亮、绿灯黄灯灭 N计时Y东西红灯亮、黄灯绿灯灭,南北绿灯灭、黄灯闪烁计时NY图2:主函数流程图关中断保护现场开中断中断处理关中断现场恢复开中断中断返回图3:中断服务程序流程图实验步骤1、根据实验要求进行硬件电路的设计和搭建;2、在Keil软件下进行程序设计,并调试;3、检查硬件电路是否安全正确,硬件无误时接通电源和下载线;4、利用MEFlash烧写软件把程序烧写进单片机中;5、进行软硬件整体调试,直到符合实验要求为止;6、断开电源,收拾实验仪器,关掉电脑,书写实验报告;六、程序清单ORG 0000HLJMP MAINORG 0013HLJMP INT_EX0ORG 0050HMAIN: MOV SP,#60HSETB EASETB IT1SETB EX1MOV A,#7BHMOV P0,AMOV P2,ALCALL DELAY2A1: MOV A,#0DEHMOV P0,AMOV A,#7BHMOV P2,ALCALL DELAY2LCALL SHAN1MOV A,#7BHMOV P0,AMOV A,#0DEHMOV P2,ALCALL DELAY2LCALL SHAN2LJMP A1DELAY1: MOV R7,#250 L11: MOV R6,#250L12: DJNZ R6,L12DJNZ R7,L11RETDELAY2: MOV R1,#10 L21: MOV R2,#250L22: MOV R3,#250L23: DJNZ R3,L23DJNZ R2,L22DJNZ R1,L21RETSHAN1: MOV R4,#5S1: MOV A,#0BDH MOV P0,ALCALL DELAY1MOV A,#0FFHMOV P0,ALCALL DELAY1DJNZ R4,S1RETSHAN2: MOV R5,#5S2: MOV A,#0FFHMOV P2,ALCALL DELAY1MOV A,#0BDHMOV P2,ALCALL DELAY1DJNZ R5,S2RETINT_EX0:PUSH ACCPUSH PSWMOV A,#7BHMOV P0,AMOV P2,AMOV 20H,#10EX001: LCALL DELAY2DJNZ 20H,EX001POP PSWPOP ACCRETIEND实验分析1、电路接通电源时,一定要再次检查电路,特别是确定单片机是否放置正确,位置是否放反,以免烧毁单片机或者调试不出结果。
实验二按键中断实验一、实验目的了解中断的含义二、实验内容板子加电后,按动板子上K1-K3按键,可控制对应的LED1-LED3的亮灭,该实验学习了外部中断(EXTI)程序的编制及控制流程。
三、实验仪器、设备计算机、开发板、keil软件四、硬件设计在开发板上V6、V7、V8分别与MCU的PB5、PD6、PD3相连,如下图所示键盘部分如下图所示:例程所用到的列扫描线:PC5,PC2,PC3。
例程所用到的行扫描线(EXTI中断线):PE2。
五、实验要求和步骤开发板上有3个蓝色状态指示灯V6(LED1),V7(LED2),V8(LED3),通过对应的按键K1-K3,控制LED的亮灭,将PE2引脚配置为外部中断,当其上出现下降沿时产生一个中断,根据扫描PC5,PC2,PC3来判别是哪个按键按下。
首先我们了解一下什么是外部中断/事件控制器(EXTI)。
外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。
每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。
每个输入线都可以被独立的屏蔽。
挂起寄存器保持着状态线的中断要求。
EXTI控制器的主要特性如下:每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达19 个中断/事件请求检测脉冲宽度低于APB2 时种宽度的外部信号如要产生中断,中断线必须事先配置好并被激活。
这是根据需要的边沿检测通过设置2个触发寄存器,和在中断屏蔽寄存器的相应位写“1”到来允许中断请求。
当需要的边沿在外部中断线上发生时,将产生一个中断请求,对应的挂起位也随之被置1。
通过写“1”到挂起寄存器,可以清除该中断请求。
为产生事件触发,事件连接线必须事先配置好并被激活。
这是根据需要的边沿检测通过设置2个触发寄存器,和在事件屏蔽寄存器的相应位写“1”到来允许事件请求。
当需要的边沿在事件连线上发生时,将产生一个事件请求脉冲,对应的挂起位不被置1。
通过在软件中断/事件寄存器写“1”,一个中断/事件请求也可以通过软件来产生。
本次实验需要组件的工程文件文档如下:USER--stm32f10x_it.c 为中断服务程序主程序,我们对主程序进行一次详细的注释。
//______________________主程序____________________________________________________________________int main(void){unsigned char a=0,b=0,c=0;/*完成对系统时钟的设置,例程中通过系统时钟设置函数,外接晶振采用8Mhz,经过片内频率合成,9倍频,设置为72MHz的时钟。
*/RCC_Configuration();/*嵌套向量中断控制器说明了EXTI2 抢占优先级级别0(最多1位),和子优先级级别0(最多7位) */NVIC_Configuration();/*对控制3个LED指示灯的IO口进行了初始化,将3个端口配置为推挽上拉输出,口线速度为50Mhz。
将中断线PE2配置为输入模式。
将键盘扫描列线PC5,PC2,PC3设置为推挽上拉输出。
在配置某个口线时,首先应对它所在的端口的时钟进行使能。
否则无法配置成功,由于用到了端口B和端口D,C,D,因此要对这4个端口的时钟进行使能,同时由于用到复用IO口功能用于配置外部中断。
因此还要使能AFIO(复用功能IO)时钟。
*/GPIO_Configuration();//用于配置AFIO外部中断配置寄存器AFIO_EXTICR1,用于选择EXTI2外部中断的输入源是PE2。
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2);EXTI_InitStructure.EXTI_Line = EXTI_Line2; //PE2 作为键盘的行线。
检测状态EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);/* 置3根键盘列扫描线为0,以便在按键按下时产生中断GPIO_ResetBits(GPIOC, GPIO_Pin_2);GPIO_ResetBits(GPIOC, GPIO_Pin_3);GPIO_ResetBits(GPIOC, GPIO_Pin_5);while (1){GPIO_ResetBits(GPIOC, GPIO_Pin_2);GPIO_ResetBits(GPIOC, GPIO_Pin_3);GPIO_ResetBits(GPIOC, GPIO_Pin_5);numm(); //键盘扫描程序判断是哪个键按下if(num==1&&a==0){GPIO_ResetBits(GPIOB, GPIO_Pin_5);a=1;} //K1 按下作处理else if(num==1&&a==1){GPIO_SetBits(GPIOB, GPIO_Pin_5);a=0;}if(num==2&&b==0){GPIO_ResetBits(GPIOD, GPIO_Pin_6);b=1;} //K2 按下作处理else if(num==2&&b==1){GPIO_SetBits(GPIOD, GPIO_Pin_6);b=0;}if(num==3&&c==0){GPIO_ResetBits(GPIOD, GPIO_Pin_3);c=1;} //K3 按下作处理else if(num==3&&c==1){GPIO_SetBits(GPIOD, GPIO_Pin_3);c=0;}}//_____________________键盘扫描程序_____________________________________________________________________void numm(void){num=0;if(_it0==1){ //按键按下标志GPIO_ResetBits(GPIOC, GPIO_Pin_5); //置PC5为0。
GPIO_SetBits(GPIOC, GPIO_Pin_2);GPIO_SetBits(GPIOC, GPIO_Pin_3);if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0){ //K1Delay(0xff);if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0){ //按键消抖动while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0); //是否松开按键num=1; //键值1 为K1按下goto n_exit;}}GPIO_SetBits(GPIOC, GPIO_Pin_5);GPIO_ResetBits(GPIOC, GPIO_Pin_2); //置PC2为0GPIO_SetBits(GPIOC, GPIO_Pin_3);Delay(0xff);if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0){ //K2Delay(0xff);if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0){ //按键消抖动while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0); //是否松开按键num=2; //键值2 为K2按下goto n_exit;}}GPIO_SetBits(GPIOC, GPIO_Pin_5);GPIO_SetBits(GPIOC, GPIO_Pin_2);GPIO_ResetBits(GPIOC, GPIO_Pin_3); //置PC3为0Delay(0xff);if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0){ //K3Delay(0xff);if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0){ //按键消抖动while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0); //是否松开按键num=3; //键值3 为K3按下goto n_exit;}}n_exit:;_it0=0;}}//_______________________键盘中断服务程序___________________________________________________________________/*键盘中断(EXTI2)服务程序*/void EXTI2_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line2) != RESET) //判别是否有键按下{_it0=1; //按键中断标志EXTI_ClearITPendingBit(EXTI_Line2); //清除中断请求标志}}将工程文件建立和调试后下载到开发板,板子上电复位后,按动K1-K3可分别控制相应的LED1-LED3亮灭。