嵌入式实验3按键实验(中断方式)

合集下载

嵌入式中断实验报告心得

嵌入式中断实验报告心得

一、实验背景随着物联网、智能制造等领域的快速发展,嵌入式系统在各个行业中扮演着越来越重要的角色。

中断技术作为嵌入式系统的重要组成部分,对于提高系统的实时性、可靠性和响应速度具有重要意义。

为了更好地掌握中断技术,我进行了嵌入式中断实验,以下是我对实验的心得体会。

二、实验目的1. 理解中断的概念、作用及中断处理流程;2. 掌握嵌入式系统中断的配置方法;3. 学会编写中断服务程序;4. 通过实验验证中断技术的应用效果。

三、实验内容1. 硬件环境:嵌入式开发板、仿真器、连接线等;2. 软件环境:嵌入式操作系统、集成开发环境、仿真器驱动程序等;3. 实验步骤:(1)搭建实验环境,包括硬件连接和软件配置;(2)配置中断源,如GPIO、定时器等;(3)编写中断服务程序,实现中断响应和处理;(4)通过仿真器观察实验效果,验证中断技术。

四、实验心得1. 理解中断原理在实验过程中,我首先学习了中断的基本概念和作用。

中断是指当外部事件发生时,系统暂停当前执行的任务,转而执行中断服务程序,处理外部事件。

通过实验,我明白了中断处理流程,包括中断请求、中断响应、中断处理和中断返回等环节。

2. 中断配置方法在实验中,我学习了如何配置中断源。

以GPIO为例,首先需要设置GPIO引脚为中断模式,然后配置中断触发方式(上升沿、下降沿或双边沿触发),最后设置中断优先级。

通过实验,我掌握了中断配置方法,为后续应用中断技术打下了基础。

3. 编写中断服务程序中断服务程序是中断处理的核心,我通过实验学会了编写中断服务程序。

在编写过程中,需要注意以下几点:(1)保护现场:在中断服务程序开始执行前,需要保存当前CPU状态,如寄存器值等;(2)处理中断:根据中断类型,执行相应的处理逻辑;(3)恢复现场:在中断服务程序执行完毕后,需要恢复CPU状态,以便继续执行被中断的任务。

4. 实验效果验证通过仿真器观察实验效果,我发现中断技术能够有效地提高系统的响应速度和实时性。

《嵌入式技术应用开发项目教程》项目4 嵌入式键盘与中断控制

《嵌入式技术应用开发项目教程》项目4 嵌入式键盘与中断控制

嵌入式键盘与中断控制
教学目标
知识目标
技能目标
素质目标
1.了解独立式和矩阵式键盘结构;2.掌握键盘的接口电路和程序设计的方法;3.掌握LK32T102单片机外部中断的设置;4.掌握外部中断的编程方法和中断服务程序编写。
能完成独立式和矩阵式键盘电路设计,能应用C语言程序完成对键盘的按键识别程序设计,实现中断方式的按键控制设计、运行及调试。
任务11 矩阵键盘设计
任务11 矩阵键盘设计
4×4矩阵键盘行线依次连接到LK32T102单片机PB口的PB8~PB11引脚上,列线依次连接到PB12~PB15引脚上。
4×4矩阵键盘的程序设计,本任务采用常见的行列反转扫描方法。(1)判断有无键按下方法是:PB口输出0x0f00,既PB12~PB15输出低电平、PB8~PB11输出高电平;然后读PB口,若高8位的低4位PB8~PB11全为1,则键盘上没有键按下,若PB8~PB11不全为1,则有键按下。(2)消除按键的抖动方法是:当判断到键盘上有键按下后,先延时一段时间,再判断键盘的状态,若仍为有键按下状态,则认为有一个键按下,否则当作按键抖动来处理。(3)保存按键的行号方法是:消除按键的抖动后,仍有行线为低电平“0”,该行线既为按键按下的所在行,保存该按键所在的行号。
任务11 矩阵键盘设计
编写矩阵键盘设备文件
02
任务11 矩阵键盘设计
(1)矩阵键盘设备头文件keyboard4x4.h
编写矩阵键盘设备文件
02
任务11 矩阵键盘设计
(2)矩阵键盘设备驱动文件keyboard4x4.c
修改oledfont.h头文件
02
任务11 矩阵键盘设计
根据任务描述要求,需要在OLED显示屏在显示“矩阵键盘测试、按键被按下、朗迅科技公司”等汉字、显示“0~9、A~D、*、#”等字符。ASCII常用字符集的点阵数据不需要提取,只要更换“按键被按下”等汉字的点阵数据即可,修改的oledfont.h头文件。

嵌入式- 按键中断实验

嵌入式- 按键中断实验

按键中断实验实验目的:1掌握IO口的使用2掌握中断处理程序编写3掌握按键中断的使用实验器材:Sinosys-EA2440实验箱PC机实验原理:在SinoSys-EA2440a中,已经将EINT0、EINT2、EINT19、EINT11作为外部中断源和开发板上位号为SW1、SW2、SW3、SW4的这四个小按键相连,中断按钮的连接图如图1.1:1.1中断按钮结构电路在SinoSys-EA2440a 中,已将EINT0、EINT2、EINT19、EINT11 作为外部中断源和开发板上位号为SW1、SW2、SW3、SW4 的这四个小按键相连,其中,EINT0、EINT2、EINT11、EINT19 分别和GPF0、GPF2、GPG3、GPG11 复用,当GPFCON[5:4]=10、GPFCON[1:0]=10、GPGCON[7:6]=10、GPGCON[23:22]=10 时,I/O 为中断方式。

通过寄存器的控制,可以达到开启中断和控制中断的目的。

实验总结:将4个按键端口设置成EINT0、EINT2、EINT11、EINT19模式。

rGPGCON = rGPGCON & (~((3<<22)|(3<<6))) | ((2<<22)|(2<<6)) ;rGPFCON = rGPFCON & (~((3<<4)|(3<<0))) | ((2<<4)|(2<<0)) ;通过EXTINT寄存器对外部中断触发方式进行设置,这里设置下降沿触发。

rEXTINT0 &= ~(6|(6<<8));rEXTINT0 |= (0|(0<<8));// EINT0、EINT2rEXTINT1 &= ~(7<<12);rEXTINT1 |= (0<<12); // EINT11rEXTINT2 &= ~(0xf<<12);rEXTINT2 |= (0<<12); // EINT19对外部中断挂起寄存器清零,对外部中断屏蔽寄存器时能,同时设置中断服务程序的地址,将中断挂起寄存器清零,开启中断。

嵌入式中断按键实验报告

嵌入式中断按键实验报告

嵌入式中断按键实验报告本实验的目的是学习如何在嵌入式系统中使用中断来处理按键输入。

通过该实验,我们可以掌握如何配置和使用中断,以及如何编写中断服务程序来处理按键输入。

实验材料:1. 嵌入式开发板2. 按键模块3. 电源适配器实验步骤:1. 将按键模块连接到嵌入式开发板的GPIO引脚上,确保连接正确。

2. 打开开发板的开关,给开发板供电。

3. 在开发板上配置GPIO引脚作为中断输入,并使能中断。

4. 编写中断服务程序来处理按键输入。

当按键被按下时,中断服务程序将被调用,并执行相应的操作。

5. 在主程序中初始化中断服务程序,并进入一个无限循环。

在该循环中,可以进行其他的操作,并等待按键中断的发生。

实验结果:在实验中,我们成功地配置并使用了中断来处理按键输入。

当按键被按下时,中断服务程序被调用,并执行了相应的操作。

讨论与分析:通过该实验,我们学习到了中断的基本原理和使用方法。

中断是一种非常重要的机制,可以使嵌入式系统更高效地响应外部事件。

在实际的嵌入式应用中,按键输入是非常常见的操作,使用中断可以很好地处理按键输入,提高系统的响应速度和可靠性。

然而,中断也存在一些问题。

首先,中断处理需要一定的时间,在高速的系统中,中断的处理时间可能会影响到系统的性能。

另外,当系统存在多个中断源时,中断处理的优先级和调度也需要仔细设计,以确保系统的正常运行。

总结:通过本实验,我们成功地学习了嵌入式系统中使用中断处理按键输入的方法。

中断是一种重要的机制,可以使系统更高效地响应外部事件。

通过合理地设计和使用中断,可以提高系统的性能和可靠性。

在实际的嵌入式应用中,我们应该根据具体的需求和系统条件来选择最合适的中断处理方法,并进行适当的优化和调试。

单片机中断实现按键

单片机中断实现按键

单片机中断实现按键一、引言在嵌入式系统中,往往需要通过外部输入设备如按键来与系统进行交互。

为了能够及时响应按键操作,避免忙等的情况发生,通常会使用中断技术来实现按键的检测和处理。

本文将介绍如何使用中断来实现按键检测,并具体以8051单片机作为示例进行说明。

二、中断基础知识在单片机中,中断是一种由硬件触发的特殊事件,当一些中断条件满足时,单片机会暂停当前任务,跳转到中断服务程序中执行对应的处理代码,待中断处理结束后再返回到原来的任务中。

中断的触发方式一般有两种:外部触发中断和内部触发中断。

对于按键这种外部输入设备,一般通过外部触发中断来实现。

三、实现原理1、按键电路:按键通常由一个导电片和两个触点组成,平时靠两个触点之间的弹簧将导电片与触点隔开,当按下按键时,弹簧压缩,导电片与触点接触形成通路。

为了能够检测按键操作,需要将按键引脚连接到单片机的外部中断引脚上。

2、中断设置:在单片机的程序中,需要设置好相应的中断向量表和中断服务程序。

中断向量表是一个存放中断服务程序地址的表格,当中断触发时,单片机会根据中断号从中断向量表中找到相应的中断服务程序地址并跳转到该地址执行对应代码。

3、中断触发条件:在按键电路中,按键的两个触点状态变化(从断开到接通或从接通到断开)时会产生干扰信号,为了避免干扰,通常会使用软件消抖技术。

当按键被按下,并经过一段时间的消抖后,会产生一个稳定的按键信号,此时可以检测到按键变化,并触发相应的中断。

四、实现步骤1、硬件连接:将按键引脚连接到单片机的外部中断引脚上。

2、中断设置:在单片机的程序中,需要设置中断的相关寄存器,包括中断向量表和中断控制寄存器。

中断向量表保存中断服务程序的入口地址,中断控制寄存器用于设置中断触发条件和中断优先级等参数。

3、中断服务程序:编写中断服务程序,在按键中断触发时执行对应的处理代码。

中断服务程序一般需要包括中断触发条件的判断和处理代码的执行。

4、主程序:在主程序中调用中断服务程序,并添加相应的处理代码,实现按键操作的具体功能。

嵌入式实验三 键盘检测控制实验

嵌入式实验三  键盘检测控制实验

2
ቤተ መጻሕፍቲ ባይዱ
嵌入式技术及应用 实验三
实验三 键盘实验
一、 实验目的 掌握单片机系统中矩阵键盘的编程控制方法,学会实时程序的调试技巧。
二、 实验原理 键盘是单片机应用中常用的输入设备,在应用系统中,操作人员可通过键盘
向系统输入指令、地址和数据,实现简单的人机通信。 键盘实际上是一组按键开关的集合,平时总是处于断开状态,当按下键时它
才闭合。按键在闭合和断开时,触点会存在抖动现象,抖动时间一般为 5-10ms, 如下图示:
键盘的处理主要涉及以下 3 个方面的内容: 按键的识别
所接 I/O 口线是高还是低电平(根据连接情况) 抖动的消除
硬件消抖 软件消抖(延时) 判断键值 独立式键盘 矩阵式键盘 实验板电路原理图如下:
1
嵌入式技术及应用 实验三
三、 实验内容 按下 16 个矩阵键盘依次在数码管上显示 1-16 的平方。如按下第一个显示 1,
第二个显示 4...
四、
实验步骤 1、 按实验内容要求在 µ Vision 中创建项目,编辑、调试、编译程序。 2、 将编译生成的目标码文件(后缀为.Hex)下载到实验板上。 3、 观察实验运行结果并记录。

嵌入式技术及应用实验中断实验报告

嵌入式技术及应用实验中断实验报告

实验步骤与结果分析1、建立工程1)、在工程文件中包含如下文件(int、doc、user、lib、start)2)、选择STM32F103VB芯片3)、分别添加如下文件2、运行过程(1) 使用Keil uVision3 通过ULINK仿真器连接EduKit-M3实验平台,打开实验例程NVIC_test子目录下的NVIC.Uv2例程,编译链接工程;(2) 点击MDK 的Debug菜单,选择Start/Stop Debug Session项或Ctrl+F5键,远程连接EduKit-M3实验平台并下载调试代码到目标系统的RAM中;(3) 程序正常启动运行后,会有以下结果:当第一次发生EXTI9 中断后(按下EduKit-M3实验平台上Key按钮),SysTick 中断的优先级比EXTI0中断优先级高。

因此当EXTI0中断发生时(按下Wakeup按钮),将先执行主要程序代码分析/* Configure one bit for preemption priority */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);主从优先级的选择Group_1,有先占优先级1位,从优先级3位//配置一个比特为抢占优先级/* Enable the EXTI0 Interrupt */ //使能EXTI0中断NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = PreemptionPriorityValue;主优先级的选择PreemptionPriorityValueNVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//从优先级等于0.NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/* Enable the EXTI9_5 Interrupt */ //使能EXTI9_5中断NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//EXTI9_5主优先级的选择等于0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//EXTI9_5主优先级的选择等于0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/* Configure the SysTick Handler Priority: Preemption priority and sub priority */ //配置SysTick处理程序优先级:抢占优先级和子优先级NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, !PreemptionPriorityValue, 0);while (1){if(PreemptionOccured != FALSE)//当PreemptionOccured != FALSE)抢占发生{GPIO_WriteBit(GPIOC, GPIO_Pin_6, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_6)));Delay(0x5FFFF);GPIO_WriteBit(GPIOC, GPIO_Pin_7, (BitAction)(1 -GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_7)));Delay(0x5FFFF);GPIO_WriteBit(GPIOC, GPIO_Pin_8, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_8)));Delay(0x5FFFF);GPIO_WriteBit(GPIOC, GPIO_Pin_9, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_9)));Delay(0x5FFFF);}}void GPIO_Configuration(void){/* Configure PC6, PC7, PC8 and PC9 as output push-pull */ 使能为推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //使能其速度为50MHz GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //使能为推挽输出GPIO_Init(GPIOC, &GPIO_InitStructure);/* Configure GPIOA Pin0 as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 使能为浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);/* Configure GPIOB Pin9 as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 使能为推挽输出入GPIO_Init(GPIOB, &GPIO_InitStructure);}GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);/* Configure EXTI Line0 to generate an interrupt on falling edge */ 配置EXTI Line0产生一个中断在下降沿EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);(写不完时,可调整表结构。

嵌入式-中断实验

嵌入式-中断实验

嵌入式-中断实验
嵌入式中断实验是一种用来测试和学习嵌入式系统中断功能的实验。

中断是嵌入式系统中常用的一种机制,用于处理紧急事件或高优先级任务。

通过中断,系统可以立即响应外部事件,中断当前正在执行的任务,执行与中断事件相关的代码,然后返回到原来的任务中继续执行。

在进行中断实验时,通常需要以下步骤:
1. 确定中断源:确定要模拟的中断事件,比如外部输入的触发事件、定时器到达时间等。

2. 配置中断控制器:根据硬件平台和实验要求,配置中断控制器的相应寄存器,使其能够正确地处理中断信号。

3. 编写中断服务程序(ISR):定义一个中断服务程序,用于
处理中断事件。

ISR应当对事件进行必要的处理,然后返回到
原来的任务中。

4. 测试和调试:连接硬件平台,运行实验程序,并进行测试和调试,确保中断功能正常工作。

5. 扩展和优化:根据需要,可以进一步扩展和优化中断功能,比如增加多个中断源,实现优先级控制,提高系统响应速度等。

通过嵌入式中断实验,可以深入了解中断机制的工作原理和应用方法,提高对嵌入式系统的理解和能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

河南机电高等专科学校《嵌入式系统开发》课程实验报告
系部:电子通信工程系
班级:电信1##
姓名: ######
学号: 120######
实验三按键实验(中断方式)
一.实验简介
在实验一的基础上,使用按键控制流水灯。

二.实验目的
熟练使用库函数操作GPIO,掌握中断配置和中断服务程序编写方法,掌握通过全局变量在中断服务程序和主程序间通信的方法。

三.实验内容
实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。

下载代码到目标板,查看运行结果。

四.实验设备
硬件部分:PC计算机(宿主机)、STM32实验板。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。

五.实验步骤
1在实验一代码的基础上,编写中断初始化代码
2在主程序中声明全局变量,用于和中断服务程序通信,编写完成主程序
3编写中断服务程序
4编译代码,下载到实验板
5.单步调试
6记录实验过程,撰写实验报告
六.实验结果及测试
中断方式的按键式实验,是通过配置外部中断寄存器和中断嵌套(NVIC)控制器来实现按键按下控制LED灯亮灭。

通过按键中断打断主函数,执行LED1取反一次。

主函数初始化中断配置和LED配置,点亮LED1后一直等待中断,每中断一次,LED1取反一次。

int main(void)
{
LED_GPIO_Config();
LED1_ON;
CLI();
SEI();
EXTI_PA0_Config();
while(1)
{
}
}
中断嵌套控制寄存器的配置为中断嵌套分组1;抢占优先级0;响应优先级0 代码如下:
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
外部中断按键的配置源码如下:配置PA0位中断线,并使能AFIO时钟void EXTI_PA0_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);
NVIC_Configuration();
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
产生中断后程序进入中断服务子程序,将LED1取反,并软件清除标志位,中断服务子程序如下:
void EXTI0_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
LED1_TOGGLE;
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
七.实验总结
通过这次实验,课程知识的实用性很强,因此实验就显得非常重要,刚开始做实验的时候,由于自己的理论知识基础不好,在实验过程遇到了许多的难题,也使我感到理论知识的重要性。

但是我独立思考,进一步了解了stm32内部功能,最终解决问题,从而也就加深我对课本理论知识的理解。

相关文档
最新文档