实验五 键盘中断实验
- 格式:pdf
- 大小:265.24 KB
- 文档页数:3
实验五4×4键盘控制一、实验目的通过实验掌握键盘控制与设计方法。
熟练编写ARM 核处理器S3C2410X 中断处理程序。
二、实验设备硬件:Embest EduKit-III 实验平台,Embest ARM 标准/增强型仿真器套件,PC 机。
软件:Embest IDE Pro 2004 集成开发环境,Windows 98/2000/NT/XP。
三、实验原理常规键盘电路设计原理用户设计行列键盘接口,一般常采用三种方法读取键值。
一种是中断式,另两种是扫描法和反转法。
中断式在键盘按下时产生一个外部中断通知CPU,并由中断处理程序通过不同的地址读取数据线上的状态,判断哪个按键被按下。
本实验采用中断方式实现用户键盘接口。
扫描法对键盘上的某一行发送低电平,其他为高电平,然后读取列值,若列值中有一位是低,表明该行与低电平对应列的键被按下。
否则扫描下一行。
反转法先将所有行扫描线输出低电平,读列值,若列值有一位是低,表明有键按下;接着所有列扫描线输出低电平,再读行值。
根据读到的值组合就可以查表得到键码。
四、实验内容及步骤使用实验板上5x4 用户键盘,编写程序接收键盘中断。
通过IIC 总线读入键值,并将读到的键值发送到串口。
键盘硬件电路设计键盘连接电路实验步骤:1. 准备实验环境使用Embest 仿真器连接目标板,使用Embest EduKit-III 实验板附带的串口线,连接实验板上的UART0 和PC 机的串口。
2. 串口接收设置在PC 机上运行windows 自带的超级终端串口通信程序(波特率115200、1 位停止位、无校验位、无硬件流控制);或者使用其它串口通信程序。
3. 打开实验例程1) 使用Embest IDE 通过Embest JTAG仿真器连接实验板,打开实验例程目录5.2_keyboard_test子目录下的keyboard_test.ews 例程,编译链接工程;2) 点击IDE 的Debug 菜单,选择Remote Connect 项或F8 键,远程连接目标板;3) 点击IDE 的Debug 菜单,选择Download 下载调试代码到目标系统的RAM 中;4) 在“keyboard_test();”设置断点后,点击Debug 菜单Go 或F5 键运行程序。
按键中断实验实验目的: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. 实验原理2.1 键盘中断键盘中断是一种异步的硬件中断方式,即键盘通过给中断控制设备发送中断请求信号,从而将中断信息传递给CPU。
一旦发生键盘中断,CPU将停止当前执行的任务,跳转到事先设置好的中断处理程序,处理键盘中断事件。
2.2 实验系统本次实验使用Intel 8086微处理器、键盘控制器8042和键盘作为实验系统的主要硬件设备。
系统的基本结构如下图所示:与中断控制器连接。
- 打开中断屏蔽位,以允许中断请求通过。
3.4 运行实验程序完成前述步骤后,我们可以运行实验程序,测试键盘中断的正常工作。
当用户按下键盘时,键盘中断会触发,并将键盘输入的数据传递给中断处理程序进行处理。
4. 实验结果与分析经过测试,我们发现实验系统能够正确地接收和处理键盘输入的数据。
嵌入式KL25 键盘中断实验实验五键盘中断实验一、实验目的1.熟练运用CodeWarrior嵌入式开发系统环境、C语言、调试方式。
2.复习串行通信接口(SCI)的内容。
3.加强键盘中断基本原理及编程原理的理解。
4.理解“行扫描”法的原理并能进行键值识别和键值编码。
5.理解键盘接线原理图(如图5-1)。
二、知识要点本实验采用的是4×4矩阵式键盘(以下简称键盘)。
PTG4、PTD2、PTD3、PTD7分别接四根列线,定义为输入且上拉,PTG0~PTG3分别接四根行线,且定义为输出。
行扫描法是使键盘的某一行输出为低电平,其余行为高电平,然后读取列值,如果列值中有某位为低电平,则表明该行和列交点处的键被按下;若为全高则再扫描下一行,直至扫描完全部的行线为止。
这样就可以确定是哪一行哪一列交点的键被按下。
MCU与键盘接线原理图:键盘的c语言编程:1)初始化,先按IO口方式初始化,即定义列线为输入且上拉,行线为输出,然后依输入口的键盘功能初始化相应的寄存器。
2)定义键值表3)扫描一次,读取键值4)获得键盘定义值行扫描法是使键盘的某一行输出为低电平,其余行为高电平,然后读取列值,如果列值中有某位为低电平,则表明该行和列交点处的键被按下;若为全高则再扫描下一行,直至扫描完全部的行线为止。
这样就可以确定是哪一行哪一列交点的键被按下。
设置键盘中断允许寄存器,当键盘有键被按下时,立即产生中断,中断程序处理按键事件,比如确定哪个键被按下,然后转换为该键的定义值。
键盘的键面标示码(即定义值)与MCU 识别的键值对应关系通过列表对应起来,即键盘定义表对应表示。
当通过“行扫描”法获得某个键的键值时,通过查表法就可以得到它的定义值。
该键盘中断方式程序的主程序主体是一个死循环,且是一个空循环体,所有处理的过程代码放在中断程序中。
三、演示性实验在光盘资料中提供读者键盘实例程序文件夹。
编程采用规范要求编写,将键盘独立成一个构件,如C 语言中,形成key.h 头文件和key.c 源文件。
中断控制实验报告中断控制实验报告一、引言中断控制是计算机系统中至关重要的一部分,它允许外部设备与计算机进行有效的交互。
通过中断控制,外部设备可以向计算机发送信号,请求处理器的注意力。
本实验旨在通过编写一个简单的中断控制程序,深入理解中断控制的原理和实现方式。
二、实验目的1. 掌握中断控制的基本原理和实现方法。
2. 熟悉中断控制程序的编写和调试过程。
3. 理解中断控制在计算机系统中的重要性。
三、实验环境和工具本实验使用的实验环境为Intel 8086微处理器,使用的开发工具为MASM汇编语言。
四、实验过程1. 编写中断处理程序在本实验中,我们选择了键盘中断作为示例。
首先,我们需要编写一个中断处理程序,以响应键盘输入事件。
通过读取键盘缓冲区,我们可以获取用户输入的字符,并进行相应的处理。
在中断处理程序中,我们可以使用8086微处理器提供的指令来读取键盘缓冲区,并将字符存储到内存中。
2. 配置中断向量表为了使中断处理程序能够被正确调用,我们需要将中断向量表中相应的中断向量指向我们编写的中断处理程序的入口地址。
在本实验中,我们将键盘中断的中断向量指向我们编写的中断处理程序的入口地址。
3. 测试中断控制程序在完成中断处理程序和中断向量表的配置后,我们可以进行测试。
通过模拟键盘输入事件,我们可以观察到中断处理程序的执行情况。
在测试过程中,我们可以使用调试工具来单步执行程序,以便观察程序的执行流程和变量的变化。
五、实验结果与分析通过测试,我们可以观察到中断控制程序能够正确响应键盘输入事件,并将用户输入的字符存储到内存中。
这证明我们编写的中断处理程序和中断向量表配置是正确的。
同时,我们还可以观察到中断控制程序的执行时间非常短,几乎没有对计算机系统的性能产生影响。
六、实验总结通过本次实验,我们深入了解了中断控制的原理和实现方式。
中断控制是计算机系统中重要的一部分,它允许外部设备与计算机进行高效的交互。
通过编写一个简单的中断控制程序,我们掌握了中断控制的基本原理和实现方法,并熟悉了中断控制程序的编写和调试过程。
南通大学实验报告院、系计算机科学与技术学院,计算机科学与技术系年级专业大二,计算机科学与技术专业姓名张进学号1213033016 课程名称接口技术成绩指导教师李跃华同组实验者张大生实验日期 5.7 实验名称:键盘中断实验一.实验目的1.熟练运用CodeWarrior嵌入式开发系统环境、C语言、调试方式。
2.复习串行通信接口(SCI)的内容。
3.加强键盘中断基本原理及编程原理的理解。
4.理解“行扫描”法的原理并能进行键值识别和键值编码。
5.理解键盘接线原理图(如图5-1)图5-1二,实验内容理解键盘模块和键盘中断点的原理,使用“行扫描”法编写一个中断方式的的键盘程序,并转化成定义值后,通过串口分别发往PC机的串口调试工具中显示。
三.实验过程1,资源利用键盘的-数据线分别接在MCU G口的0-4 号引脚、D口的2、3、7号引脚。
MCU 的SCI发送引脚E口的0号引脚接MAX232的TTL电平接收引脚(11号),MCU的SCI接收引脚E口的1号引脚接MAX232的TTL电平发送引脚(12号)2.硬件设计先阅读源程序,查看相应的端口的宏定义,再根据端口号来接线。
AW60键盘MAX232 计算机3、软件设计(1)主要的程序流程图图2 键盘中断流程图(中断方式主程序及其中断子程序)(2)编程,源程序如下:PC接收函数private void SCIPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e){String str = String.Empty;bool Flag;//标记串口接收数据是否成功int len;//标记接收的数据的长度//调用串口接收函数,并返回结果Flag = sci.SCIReceiveData(SCIPort,ref PublicVar.g_ReceiveByteArray);if (Flag == true)//串口接收数据成功{len = PublicVar.g_ReceiveByteArray.Length;//对于字符串形式,考虑到可能有汉字,//直接调用系统定义的函数,处理整个字符串str = Encoding.Default.GetString(PublicVar.g_ReceiveByteArray);SCIUpdateRevtxtbox(TbShowString, str);//十进制和十六进制形式按字节进行处理for (int i = 0; i < len; i++){//十进制都是按照三位来显示,字节之间有空格表示区分SCIUpdateRevtxtbox(TbShowDec,PublicVar.g_ReceiveByteArray[i].ToString("D3") + " ");//十六进制都是按照两位来显示,字节之间有空格表示区分SCIUpdateRevtxtbox(TbShowHex,PublicVar.g_ReceiveByteArray[i].ToString("X2") + " ");}this.TSSLState.Text = "过程提示:数据接收成功!";}//接收数据失败elsethis.TSSLState.Text = "过程提示:数据接收失败!";}main函数#include "Includes.h"void main(void){//1 关总中断DisableInterrupt(); //禁止总中断//2 芯片初始化MCUInit();//3 模块初始化//3.1 SCI初始化SCIInit(SCI_NUM_1,SYSTEM_CLOCK,38400);//用SCI1,系统时钟为时钟源,波特率为9600//3.2 键盘初始化KBInit();//4 开中断//4.1 开键盘中断EnableKBint();//4.2 开总中断EnableInterrupt();键盘中断函数#include "isr.h"//-------------------------------------------------------------------------*//函数名: isrKeyBoard * //功能: 扫描键盘,向串口发送键值和定义值* //参数: 无* //返回: 无* //说明: 调用了KBScanN、SCISend1、KBInit函数* //-------------------------------------------------------------------------*interrupt void isrKeyBoard(void){uint8 value;uint16 i;for(i=0; i<1000; i++);DisableInterrupt(); //关总中断DisableKBint(); //屏蔽键盘中断value = KBScanN(10); //扫描键值,存于value中if(value!=0xFF){SCISend1(SCI_NUM_1, value); //发送键值SCISend1(SCI_NUM_1,KBDef(value));//键值转化为定义值并发送}KBInit(); //键盘初始化键盘中断EnableKBint(); //开放键盘中断EnableInterrupt() ; //开总中断}四,实验小结通过该实验,了解单片机的键盘模块,熟悉和掌握了嵌入式开发环境及调试方式,进一步熟悉汇编编程和C语言编程,理解了课本中的程序代码。
实验5中断技术实验报告一、实验目的本实验旨在使学生理解中断技术的概念和工作原理,掌握中断处理流程,学会编写中断服务程序,并通过实际操作加深对中断技术在计算机系统中应用的认识。
二、实验环境1. 实验设备:个人计算机一台,配置有相应的操作系统和开发环境。
2. 软件工具:编程软件,如Visual Studio、GCC等。
3. 开发板或模拟环境:若使用硬件开发板,需具备中断功能;若使用软件模拟,需安装相应的模拟软件。
三、实验原理中断技术是计算机系统中的一种处理机制,允许外部设备或内部事件在程序执行过程中请求CPU的注意,以响应紧急任务或处理特殊事件。
中断处理通常包括以下几个步骤:- 中断请求:外部设备或内部事件发出中断信号。
- 中断识别:CPU识别中断源。
- 中断响应:CPU暂停当前任务,保存当前状态。
- 中断服务:执行中断服务程序,处理中断请求。
- 中断返回:恢复CPU状态,继续执行被中断的任务。
四、实验内容1. 编写一个中断服务程序,该程序在接收到中断信号时执行。
2. 配置中断向量表,将中断服务程序与中断号关联。
3. 模拟中断事件,测试中断服务程序的响应。
4. 分析中断服务程序的执行结果,验证中断处理流程。
五、实验步骤1. 打开编程软件,创建一个新的项目。
2. 编写中断服务程序,定义中断处理函数。
3. 在程序中配置中断向量表,将中断号与中断服务程序关联。
4. 编写主程序,模拟中断事件的发生。
5. 编译程序,生成可执行文件。
6. 运行程序,观察中断服务程序的执行情况。
7. 根据实验结果,分析中断处理流程的正确性。
六、实验结果在实验过程中,成功编写了中断服务程序,并配置了中断向量表。
通过模拟中断事件,程序能够正确响应中断请求,并执行中断服务程序。
实验结果显示,中断处理流程符合预期,中断服务程序能够及时响应并处理中断事件。
七、实验总结通过本次实验,加深了对中断技术的理解,掌握了中断服务程序的编写和中断向量的配置方法。
南通大学实验报告院系:计算机科学与技术姓名:课程名称:接口技术成绩:学号:1213022013指导教师:李跃华同组实验者:实验日期:2014-5-7实验名称:键盘中断实验一.实验目的1.熟练运用CodeWarrior 嵌入式开发系统环境、C 语言、调试方式。
2.复习串行通信接口(SCI)的内容。
3.加强键盘中断基本原理及编程原理的理解。
4.理解“行扫描”法的原理并能进行键值识别和键值编码二.实验内容键盘的c 语言编程:1)初始化,先按IO 口方式初始化,即定义列线为输入且上拉,行线为输出,然后依输入口的键盘功能初始化相应的寄存器。
2)定义键值表3)扫描一次,读取键值4)获得键盘定义值行扫描法是使键盘的某一行输出为低电平,其余行为高电平,然后读取列值,如果列值中有某位为低电平,则表明该行和列交点处的键被按下;若为全高则再扫描下一行,直至扫描完全部的行线为止。
这样就可以确定是哪一行哪一列交点的键被按下。
2. 软件设计三程序流程图四编程1.内核定时器中断void tpm0_isr(void){static uint_32 TPMCounter = 0; //计时器uint_8 value; //键盘变量static uint_8 LEDindex=0; //位选口声明uint_8 LEDDataBuffer[4]; //LED显示缓冲区uint_8 i;//LED缓冲区赋值LEDDataBuffer[0]='0';LEDDataBuffer[1]='2';LEDDataBuffer[2]='3';LEDDataBuffer[3]='5';//LCD显示缓冲区,其中.表示按下的数字uint_8 kbv[32]="The keyboard you just input is .";if((TPM_SC_REG(TPM0_BASE_PTR) & TPM_SC_TOF_MASK) == TPM_SC_TOF_MASK) {TPMCounter++;}BSET(TPM_SC_TOF_SHIFT,TPM_SC_REG(TPM0_BASE_P TR)); //中断置标志位写1清0//处理LED部分LEDindex++;//位选位+1if (LEDindex>=4) LEDindex=0; //大于4位选口置0i=LEDchangeCode(LEDDataBuffer[LEDindex]-'0');//转码LEDshow1(LEDindex,i);//显示LEDif(TPMCounter>100){TPMCounter = 0;//键盘得到扫描值value = KBScanN(2);//扫描键值,存于value中if(KBDef(value) != 0xff) //发送键值{//修改.成为按键值kbv[31] = KBDef(value);//通过LCD显示出来LCDShow(kbv);uart_send_string(UART_2,kbv);//键盘发送信息}}}2.程序的入口int main(void){//1.声明主函数使用的局部变量uint_8 * g_DispalyInit;//2.关总中断enter_critical();//3.初始化底层模块uart_init (UART_1,BUSCLK, 9600); //串口1初始化, 总线时钟24000Khz,波特率9600LEDInit();//LED初始化LCDInit();//LCD初始化KBInit(); //键盘初始化tpm_init(TPM0,TPM_CLKSRC_PLL,1000);//初始化TPM模块,1ms中断一次//4.缓冲区赋值g_DispalyInit = (uint_8 *)"Wait Receiving..Soochow 2013.01.";//5.开中断tpm_enable_int(0);init_critical();//6.lcd显示初始字符LCDShow(g_DispalyInit);//================================= ================================== ========for(;;){}//============================================return 0;}四.实验小结在这次实验中主要让我们熟悉掌握gpio口通信的知识,在熟悉代码的前提下在主函数里初始化波特率何在中断函数里添加一个接收函数就可以。
班级:计算机科学与技术姓名:***学号:***********实验五中断驱动实验一. 实验目的了解STM32微控制器的中断特性,熟悉GPIO的复用功能和中断特点,掌握使用中断驱动方式检测外设状态以及编写中断服务程序的方法。
二. 实验内容编写NVIC初始化和EXTI初始化函数,完成中断驱动方式的按键检测程序、以及中断服务程序,使用软件模拟运行和调试程序。
配合LED驱动程序,使用硬件仿真器下载、运行和调试程序,实现按下KEY1按键,中断服务程序控制对应LED1灯亮起一段时间后灭;按下KEY2键,LED2灯灯亮起一段时间后灭。
KEY1和KEY2设置不同的抢占优先级实现中断嵌套。
三.实验要求1.结合按键和LED等显示效果,体会中断的功能和应用。
2.编写实验报告:写出详细的项目开发过程,上机调试过程(软件仿真和硬件仿真)。
写出实验总结以及实验的心得体会。
四.实验步骤按键中断:1.根据按键状态控制LED灯亮灭按键KEY有按下来,产生中断请求2.KEY在目标板上的连接PA0、PC13、依次连接2个KEY1、KEY2按钮按下时,相应GPIO引脚输入低电平(0),否则输入高电平(1)3.程序的功能是按下按钮KEY1对应LED1亮一段时间,然后熄灭LED1接PB0,KEY1接PA0具体实现:1.时钟配置NVIC在内核里,使用内核时钟,在启动代码里有SystemInit ()函数,使系统时钟为72MHZ,需要用户配置的是GPIO 的时钟2.NVIC初始化配置首先,选择优先级组号(即0~4共5种形式)NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);// 本例中,只有1个中断源,选用1组优先级配置其次,调用misc.c文件的NVIC初始化函数v oid NVIC_Init( NVIC_InitTypeDef * NVIC_InitStruct )参数NVIC_InitStruct是指向NVIC_InitTypeDef结构的指针typedef struct{uint8_t NVIC_IRQChannel;uint8_t NVIC_IRQChannelPreemptionPriority;uint8_t NVIC_IRQChannelSubPriority;FunctionalState NVIC_IRQChannelCmd;} NVIC_InitTypeDef;3.配置GPIO端口工作方式GPIO配置PB0驱动LED1灯,其工作模式配置为推免输出代码:/*定义一个GPIO_InitTypeDef类型的结构体*/ GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB|, ENABLE);/*选择要控制的GPIOB引脚*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;/*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;/*设置引脚速率为50MHz */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/*调用库函数,初始化GPIOB0*/GPIO_Init(GPIOB, &GPIO_InitStructure);KEY1接PA0,PA0引脚配置为上拉输入模式GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIOA, &GPIO_InitStructure);4.EXTI初始化配置调用stm32f10x_exti.c中的EXTI初始化配置void EXTI_Init( EXTI_InitTypeDef * EXTI_InitStruct )参数EXTI_InitStruct是指向EXTI_InitTypeDef结构的指针typedef struct{uint32_t EXTI_Line; /* 指明EXTI线*/EXTIMode_TypeDef EXTI_Mode; /* 指明工作模式*/EXTITrigger_TypeDef EXTI_Trigger; /* 指明有效边沿*/FunctionalState EXTI_LineCmd; /* ENABLE或DISABLE */}EXTI_InitTypeDef;5.配置GPIO和EXTI映射关系首先,对进行中断请求的GPIO引脚进行初始化配置例如设置按键引脚为下拉输入或浮空输入模式也可以在配置NVIC之前进行其次,调用stm32f10x_gpio.c的EXTI线配置函数void GPIO_EXTILineConfig ( uint8_t GPIO_PortSource, uint8_t GPIO_PinSource )GPIO_PortSource选择作为EXTI线的GPIO端口形如GPIO_PortSourceGPIOx(x是A~G)GPIO_PinSource指明配置的EXTI线(GPIO引脚)形如GPIO_PinSourcex(x是0~15)本例代码:GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);6.中断服务程序stm32f10x_it.cMDK 为方便用户编写中断服务程序,特别提供了文件stm3210x_it.c(以及配套的头文件stm3210x_it.h)。
键盘和中断实验课程设计一、教学目标本课程的学习目标主要包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握键盘和中断的基本概念、原理和应用。
技能目标要求学生能够运用所学的知识进行键盘和中断实验,并能够分析实验结果。
情感态度价值观目标要求学生培养对科学实验的兴趣和热情,增强团队合作意识和问题解决能力。
通过本课程的学习,学生将能够理解键盘和中断在计算机系统中的重要作用,掌握相关的实验操作技能,并能够运用所学知识解决实际问题。
同时,学生也将培养对科学实验的兴趣和热情,增强团队合作意识和问题解决能力。
二、教学内容本课程的教学内容主要包括键盘和中断的基本概念、原理和应用。
首先,将介绍键盘的基本结构和原理,包括键盘的组成、工作原理和编码方式。
然后,将介绍中断的概念和作用,包括中断的类型、处理过程和在中断中进行的操作。
最后,将结合实际案例,介绍键盘和中断在计算机系统中的应用,如键盘输入处理、中断服务例程的编写等。
教学内容的安排将根据学生的学习情况和教学进度进行调整,确保学生能够充分理解和掌握所学知识。
教材将选用权威的专业书籍,并结合实际的案例和实验来进行教学。
三、教学方法本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
首先,通过讲授法向学生传授键盘和中断的基本概念和原理。
然后,通过讨论法引导学生进行思考和交流,培养学生的批判性思维和问题解决能力。
接着,通过案例分析法让学生结合实际案例进行分析和讨论,加深对知识的理解和应用。
最后,通过实验法让学生亲自动手进行实验,培养学生的实践能力和创新精神。
教学方法的选择将根据学生的学习情况和教学目标进行调整,以最大程度地激发学生的学习兴趣和主动性。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备等。
教材将选用权威的专业书籍,以保证学生能够获得准确和全面的知识。
参考书将提供更多的相关资料和案例,以丰富学生的学习体验。
多媒体资料将通过图像、视频等形式展示键盘和中断的原理和实验过程,以帮助学生更好地理解和记忆。
实验五中断实验实验目的1、加深理解计算机系统中断工作的原理及处理过程。
2、学习和掌握中断产生、中断响应、中断处理等技术。
实验原理TEC-XP教学机中提供给用的外部中断源有三个,由教学机面板右下角的三个无锁按键作为其硬件中断源,从右到左依次简称为P1、P2、P3中断源。
TEC-XP在响应这三个中断源的中断请求时,采用的是向量地址转移法,即中断源的请求可通过硬件电路产生一个向量地址,在该地址中存放一条转移指令,执行该指令即可转入对应的中断服务程序。
P1、P2、P3的中断向量地址由TEC-XP的内部结构确定,分别为2420H、2430H和2440H,用户中断使用时,应在对应地址中写入转移指令,从而转向用户自定义的中断服务程序。
实验内容编写主程序和三个中断源的中断服务程序,在主程序执行过程中,按下按键产生中断请求,观察中断服务和中断嵌套的现象。
主程序的功能:在屏幕上循环显示数字字符“6”,并可随时接受中断请求;中断服务程序的功能:进入中断服务程序显示字符串“BIn”,其中n是与中断源优先级相对应的数字字符“1/2/3”,等待按键,直到有任一按键按下,显示字符串“EIn”后退出中断。
实验步骤本实验共4学时,其中1~7步2学时,第8步2学时,请在实验前提前预习和准备,以保证实验效果。
1、相关扩展指令的微程序验证本实验中使用到开中断、关中断、中断返回等扩展指令,做具体中断实验之前,先进行这些指令微程序的分析和验证。
该步骤中应将功能开关拨为11010,即设为单步、手动执行指令,使用微程序控制器,联机操作。
表5-1 若干扩展指令的执行周期微程序注意:以上扩展指令若在程序段中使用,在监控状态下必须用E命令写入机器指令代码,而不能使用A命令写入汇编指令。
2、设定工作方式中断实验中的程序执行控制由微程序控制器实现,因此,功能开关状态设定为00010,即联机方式下,采用微程序控制器连续运行程序。
3、编写显示子程序本实验中需要通过中断服务程序中的字符显示来查看中断执行情况,字符显示时仍然采用程序查询方式。
SHANGHAI UNIVERSITY《IBM汇编语言程序设计》实验报告学院计算机工程与科学学院学号姓名指导老师江苏苏日期2016.10实验五、输入输出及中断功能和子程序调用目的: 1. 全面掌握输入和输出的中断功能调用(键盘和显示器)2. 掌握子程序的定义和调用3. 学会编制良好风格的汇编语言程序要求:1) 在实验四的基础上,在屏幕上开设二个窗口(如左右或上下)2) 定义输入缓冲区(最多输入50个字符)3) 在第一个窗口输入(要求有输入提示)4) 后台程序完成实验四的工作5) 结果显示在第二个窗口(要求有输出提示)6) 所有程序必须以子程序方式体现(除了初始化和程序结尾)7) 必须在程序中做好子程序的功能说明以及参数说明8) 注意调试结果,并做好记录代码:DATAS SEGMENTmaxlen db 50count db ? ;计数器res db 51 dup(?)letter db 50 dup(?)digit db 50 dup(?)num_letter db 0num_digit db 0string1 db "The num of letter is $"string2 db "Ths num of digit is $"string3 db ": $"string4 db "Please input a string and end with 'Enter' $"string8 db "After sorted the string is : $"string5 db "Please input a letter to find how many times it shows: $"string6 db " shows $"string7 db " times.$"COPY_res db 51 dup(?)const_1 db 2const_2 db ?find_target db 2 dup(?)find_result db 0H ;查找结果input_cursor_row db ?input_cursor_column db ?output_cursor_row db ?output_cursor_column db ?DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;此处输入代码段代码main:call INITcall INPUTcall CLASSIFYcall COPYSTRINGcall BUBBLESORTcall FINDmov ah,1int 21hjmp mainmov ah,4chint 21hINPUT proc near ;input a string and save it in res,the num of letter in countlea dx,string4mov ah,9Hint 21Hcall IN_ENDLlea dx,maxlenmov ah,0AHint 21Hcall IN_ENDLretINPUT endpCLASSIFY proc near ;将储存在res中的字符串分类统计(res首地址为0002H)init:lea bx,ressub bx,2Hlea si,letterlea di,digitcompare1:cmp res[bx],'a'jb compare2cmp res[bx],'z'ja compare3inc num_lettermov dl,res[bx] mov [si],dlinc sijmp move_to_next compare2:cmp res[bx],'Z' ja move_to_next cmp res[bx],'A' jb compare3mov al,num_letter inc almov num_letter,al mov dl,res[bx] mov [si],dlinc sijmp move_to_next compare3:cmp res[bx],'9' ja move_to_next cmp res[bx],'0' jb move_to_next inc num_digit mov dl,res[bx] mov [di],dlinc dijmp move_to_next move_to_next: inc bxcmp bl,countjb compare1jmp exitexit:call OUT_ENDL lea dx,string1mov ah,9int 21Hmov ax,0Hmov al,num_letter call HEXTO10lea dx,string3 mov ah,9int 21Hmov dl,'$'mov [si],dllea dx,letter MOV AH,9INT 21Hcall OUT_ENDLlea dx,string2 mov ah,9int 21Hmov ax,0Hmov al,num_digit call HEXTO10lea dx,string3 mov ah,9int 21Hmov dl,'$'mov [di],dllea dx,digit MOV AH,9INT 21Hcall OUT_ENDLretCLASSIFY endpHEXTO10 proc near ;将AX中的16进制转换为10进制(会修改bx,cx,dx的值)mov cx,0mov bx,10disp1:mov dx,0div bxpush dxinc cxor ax,axjne disp1disp2:mov ah,2pop dxadd dl,30Hint 21hloop disp2retHEXTO10 endpCOPYSTRING proc near ;将res字符串拷贝到COPY_res中,count为字符数目mov si,0mov cl,countlop:mov dl,res[si]mov COPY_res[si],dlinc siloop lopretCOPYSTRING endpBUBBLESORT proc near ;将copy_res冒泡排序,count为字符数目mov bx,0000Hmov si,0000Hmov bl,countmov cx,bxinit:dec cxcmp cx,0Hje exitmov di,0Hcompare:mov dl,copy_res[di][0001H] cmp copy_res[di],dlja exchangejmp nextexchange:mov dl,copy_res[di]mov dh,copy_res[di][0001H]mov copy_res[di][0001H],dlmov copy_res[di],dhjmp nextnext:inc dicmp di,cxjb comparejmp initexit:lea dx,string8mov ah,9int 21Hmov bl,count ;输出排序后的字符串mov dl,'$'mov copy_res[bx],dllea dx,copy_resmov ah,9int 21HretBUBBLESORT endpFIND proc near ;在copy_res中查找特定字符,将查找结果输出到find_result中call IN_ENDLlea dx,string5mov ah,9int 21Hcall IN_ENDLlea dx,const_1 ;输入字符mov ah,0AHint 21Hmov cx,0000Hmov cl,countmov bx,0000Hmov bl,countmov al,find_target[0000H] sta:cmp bx,[0000H]je exitdec bxmov dl,COPY_res[bx]cmp al,dlje equaljmp staequal:mov dl,find_resultinc dlmov find_result,dljmp staexit:call OUT_ENDLmov dl,find_target[0000H]mov ah,2int 21Hlea dx,string6mov ah,9int 21Hmov ax,0Hmov al,find_resultcall HEXTO10lea dx,string7mov ah,9int 21HretFIND endpIN_ENDL proc near ;输入换行mov dh,input_cursor_rowmov dl,input_cursor_columninc dhmov input_cursor_row,dhcall PLACEINPUTretIN_ENDL endpOUT_ENDL proc near ;输入换行mov dh,output_cursor_rowmov dl,output_cursor_columninc dhmov output_cursor_row,dhcall PLACEOUTPUTretOUT_ENDL endpPAINT proc nearmov AL,0mov BH,30H ;back 3 front 0 mov CH,2 ;start_upmov CL,8mov DH,10mov DL,70mov AH,6int 10Hmov AL,0mov BH,30H ;back 3 front 0 mov CH,14 ;start_upmov CL,8 ;start_leftmov DH,22 ;end_downmov DL,70 ;end_rightmov AH,6int 10HretPAINT endpPLACEinput proc near ;place input cursor mov dh,input_cursor_row ;rowmov dl,input_cursor_column ;columnmov bh,0mov ah,2int 10hretPLACEINPUT endpPLACEoutput proc near ;place output cursor mov dh,output_cursor_row ;rowmov dl,output_cursor_column ;columnmov bh,0mov ah,2int 10hretPLACEOUTPUT endpINIT proc near ;to init this program call PAINTmov input_cursor_row,2mov input_cursor_column,10mov output_cursor_row,14mov output_cursor_column,10call PLACEINPUTmov count,00Hmov num_letter,00Hmov num_digit,00HINIT endpCODES ENDSEND START体会:通过本次实验,我基本掌握了输入和输出的中断功能调用(键盘和显示器)以及子程序的定义和调用,还学会了编制良好风格的汇编语言程序,这门课感觉收获很大,我很喜欢。
实验五键盘中断实验
一、实验目的
1.熟练运用CodeWarrior嵌入式开发系统环境、C语言、调试方式。
2.复习串行通信接口(SCI)的内容。
3.加强键盘中断基本原理及编程原理的理解。
4.理解“行扫描”法的原理并能进行键值识别和键值编码。
5.理解键盘接线原理图(如图5-1)。
二、知识要点
本实验采用的是4×4矩阵式键盘(以下简称键盘)。
PTG4、PTD2、PTD3、PTD7分别接四根列线,定义为输入且上拉,PTG0~PTG3分别接四根行线,且定义为输出。
行扫描法是使键盘的某一行输出为低电平,其余行为高电平,然后读取列值,如果列值中有某位为低电平,则表明该行和列交点处的键被按下;若为全高则再扫描下一行,直至扫描完全部的行线为止。
这样就可以确定是哪一行哪一列交点的键被按下。
MCU与键盘接线原理图:
图5-1 4×4键盘与MCU接法示例
键盘的c语言编程:
1)初始化,先按IO口方式初始化,即定义列线为输入且上拉,行线为输出,然后依输入口的键盘功能初始化相应的寄存器。
2)定义键值表
3)扫描一次,读取键值
4)获得键盘定义值
行扫描法是使键盘的某一行输出为低电平,其余行为高电平,然后读取列值,如果列值中有某位为低电平,则表明该行和列交点处的键被按下;若为全高则再扫描下一行,直至扫描完全部的行线为止。
这样就可以确定是哪一行哪一列交点的键被按下。
设置键盘中断允许寄存器,当键盘有键被按下时,立即产生中断,中断程序处理按键事件,比如确定哪个键被按下,然后转换为该键的定义值。
键盘的键面标示码(即定义值)与MCU识别的键值对应关系通过列表对应起来,即键盘定义表对应表示。
当通过“行扫描”法获得某个键的键值时,通过查表法就可以得到它的定义值。
该键盘中断方式程序的主程序主体是一个死循环,且是一个空循环体,所有处理的过程代码放在中断程序中。
三、演示性实验
在光盘资料中提供读者键盘实例程序文件夹。
编程采用规范要求编写,将键盘独立成一个构件,如C语言中,形成key.h头文件和key.c源文件。
头文件对键盘的所用端口寄存器或引脚进行宏定义以及初始化函数和驱动函数声明。
源文件对初始化函数和驱动函数进行定义。
具体实现代码见光盘。
四、设计性实验
要求按下的一个键的键值和键面定义值(键的ASCII码值)通过串口在PC方软件界面显示。
当键值被按下时,高端虚拟键盘被按下,或者在高端PC机中显示对应按键值。
1、资源使用
键盘的数据线分别接在MCU 口的号引脚、口的号引脚。
2、硬件设计(标识引脚名)
图5-2 4×4键盘按键的信息显示在PC机界面的连线图
3、软件设计
1)MCU端程序流程图
2)编程
(1)下面填写主程序main。
(填写主程序main.c)
键盘中断程序
(填写C语言编写的键盘中断程序)
(2)PC端软件的SCI接收函数
(填写PC机的SCI接收函数)
五、注意事项
实验前应该首先确认所使用硬件设备的正常与否。
MCU测试、键盘测试方法如第二章所述,否则,若出现问题,将难以确认问题所在。
不过,第二章所述键盘测试的方法是软件的方法,也可以采用硬件方法,方法如下:将扩展板供电,取一根导线,一端接小灯,一端接键盘某个行线引脚;用手按住该行某个按键不放,另取一根导线,一端接扩展板GND,另一端接键盘列线。
若小灯亮,该按键正常,否则不正常。
另外,请注意:
1、如果实验箱没有所需的实验模块,可利用实验箱中的扩展区按照所设计的电路图连线,进行实验。
2、送电实验前,先将所编写的程序编译后,下载至MCU中,接着将所需部件和导线连接至实验箱中,然后送电。
注意:不要带电操作。
3、键盘接上排插孔无需连线(自动),接下排插孔需手动连线(手工)。
六、实验练习
1、本实验中用的是键盘中断编程方式,也可以使用查询编程方式,请尽量少修改代码改用查询编程方式重新编写相应的子程序和主程序。
提示:注意重键问题。
2、请修改程序,改用不同的端口和不同引脚连接键盘,其他程序不改变,观察效果。