东南大学 微机实验 定时中断+键盘中断

合集下载

键盘中断微机实验报告

键盘中断微机实验报告

键盘中断微机实验报告1. 引言键盘中断是计算机硬件系统中常见的一种输入设备中断方式,其功能是在用户通过键盘输入时,中断处理器正常运行的流程,将键盘输入的数据传递给操作系统供其处理。

本次实验旨在通过搭建一个简单的键盘中断实验系统,加深对键盘中断原理及操作的理解。

2. 实验原理2.1 键盘中断键盘中断是一种异步的硬件中断方式,即键盘通过给中断控制设备发送中断请求信号,从而将中断信息传递给CPU。

一旦发生键盘中断,CPU将停止当前执行的任务,跳转到事先设置好的中断处理程序,处理键盘中断事件。

2.2 实验系统本次实验使用Intel 8086微处理器、键盘控制器8042和键盘作为实验系统的主要硬件设备。

系统的基本结构如下图所示:![实验系统结构图](- 键盘:作为输入设备,接收用户的键盘输入。

- 键盘控制器8042:负责控制键盘与计算机之间的数据传输。

- CPU:处理器负责执行键盘中断的相关指令。

3. 实验步骤3.1 搭建实验系统首先,需要将键盘控制器8042插入到计算机的适当位置,并将键盘连接到控制器上。

确保硬件的连接正确无误。

3.2 编写中断处理程序在编程方面,我们使用汇编语言编写键盘中断的处理程序。

具体而言,我们需要完成以下任务:- 将中断向量表中对应键盘中断的入口地址设置为我们编写的处理程序的入口地址。

- 编写处理键盘中断的程序代码,实现对键盘输入数据的接收和处理。

3.3 设置中断控制器在实验中,要进行正确的中断处理,还需要设置中断控制器8042。

具体而言,我们需要完成以下任务:- 将中断请求线IRQ1(对应键盘中断)与中断控制器连接。

- 打开中断屏蔽位,以允许中断请求通过。

3.4 运行实验程序完成前述步骤后,我们可以运行实验程序,测试键盘中断的正常工作。

当用户按下键盘时,键盘中断会触发,并将键盘输入的数据传递给中断处理程序进行处理。

4. 实验结果与分析经过测试,我们发现实验系统能够正确地接收和处理键盘输入的数据。

东南大学微机实验报告3、4定时中断流水灯

东南大学微机实验报告3、4定时中断流水灯

东南大学《微机实验及课程设计》实验报告实验三定时-中断实验:模拟流水灯姓名:学号:专业:自动化类实验室:金智楼416实验时间:2020年4月29日报告时间:2020年5月1日评定成绩:审阅教师:实验三定时-中断实验:模拟流水灯一. 实验目的与内容1.实验目的:1)掌握 PC 机中断处理系统的基本原理;2)学会编写中断服务程序。

3)掌握计数器/定时器 8253/8254 的基本工作原理和编程应用方法;4)了解掌握 8253(8254)的计数器/定时器典型应用方法。

2.实验内容:1. 查阅实验指导书 P60,了解微机主板上的 8259 IRQ0 是留给时钟的中断,类型号是 08H;2. 在提供的例程 int.asm 基础上编写利用 IRQ0 的定时中断程序(即修改对应的中断服务程序),每次中断在屏幕上输出一行字;3. 查阅课本 P273 例程,了解主机板上 8253 端口号和通道 0 对应的时钟,修改 8253 初始化程序,使得通道 0 输出时钟为55ms;4. 修改之前的程序,使其功能为:每 18 次中断(对应约1s)在屏幕上输出一行字;5. 根据提供的画图程序,模拟单色流水灯,按每秒一个灯向着单方向流动;6. 双向流水灯、键控(方向/加减速)流水灯。

二. 基本实验原理中断:PC 机用户可使用的硬件中断只有可屏蔽中断,由 8259 中断控制器管理。

中断控制器用于接收外部中断请求信号,经过优先级判别等处理后向 CPU 发出可屏蔽中断请求。

IBMPC、PC/XT 机内有一片 8259 中断控制器对外可以提供 8 个中断源:中断源中断类型号中断功能IRQ0 08H 时钟IRQ1 09H 键盘IRQ2 0AH 保留IRQ3 OBH 串行口2IRQ4 0CH 串行口1IRQ5 0DH 硬盘IRQ6 0EH 软盘IRQ7 0FH 并行打印机8 个中断源的中断请求信号线 IRQ0~IRQ7 在主机的 62 线 ISA 总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。

键盘、中断与定时器

键盘、中断与定时器

一、按键输入一、按键的分类键盘分编码键盘和非编码键盘。

键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘.而靠软件编程来识别的称为非编码键盘;在单片机组成的各种系统中,用的最多的是非编码键盘。

也有用到编码键盘的。

非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。

二、独立按键的检测当按键没按下时,CPU对应的I/O接口由于内部有上拉电阻,其输入为高电平;当某键被按下后,对应的I/O接口变为低电平。

只要在程序中判断I/O接口的状态,即可知道哪个键处于闭合状态。

(如下图所示)变化与否,得出按键是否被按下,从而做出相吗?◎现实并非理想在我们通过上面的按键检测原理得出上述的结论的时候,其实忽略了一个重要的问题:那就是现实中按键按下时候的电平变化状态。

我们的结论是基于理想的情况得出来的,就如同这幅按键按下时候对应电平变化的波形图一样。

而实际中,由于按键的弹片接触的时候,并不是一接触就紧紧的闭合,它还存在一定的抖动。

尽管这个时间非常的短暂,但是对于我们执行时间以us为计算单位的微控制器来说 ,它太漫长了。

于是就会造成上图所示的差别。

这样便存在这样一个问题。

假设我们的系统有这样功能需求:在检测到按键按下的时候,将某个I/O的状态取反。

由于这种抖动的存在,使得我们的微控制器误以为是多次按键的按下,从而将某个I/O的状态不断取反,这并不是我们想要的效果。

假如该I/O控制着系统中某个重要的执行的部件,那结果更不是我们所期待的。

于是乎有人便提出了软件消除抖动的思想,道理很简单,抖动的时间长度是一定的,只要我们避开这段抖动时期,检测稳定的时候的电平不就可以了吗。

于是这就产生了一种方法,就是通过延时来跳过这段抖动的时间,而实际上这样的效果还不错。

当然,还有其他的消抖方法,同学们请自己思考思考。

由于独立键盘的程序太简单,同学们请自行编写。

三、矩阵键盘1、为什么使用矩阵键盘当使用按键过多时,使用独立按键虽然编写程序简单,但是会大量占用IO口资源,为了节省IO资源,通常将键盘按照矩阵方式排列(如下图所示)。

按键的中断的实验

按键的中断的实验

按键的中断编程实验
一.实验目的
1.掌握用C51对外不中断设置的方法
2.掌握按键用C51进行识别的方法
二.实验要求
1.基本要求
(1)能够对有关中断的各个寄存器进行设置
(2)能够用C51编写中断服务程序,当每按一下按键,在中断服务程序中实现数码管上显示数据从0以步进为1的步调增加。

2.扩展要求
(1)用实验板上的上下左右按键做一个秒表,其中做按键作为启动按键,上按键作为清零按键,右按键作为停止按键。

三.实验电路原理图
电路图如下图(1)
四.实验原理简介
(1)每进入中断一次实现数码管上显示数据加1,且按按键时蜂鸣器发声。

(2) 配合上下左右按键做一秒表,要求按左键的话秒表启动,按右键的
话秒表停止,按上键的话秒表清零。

C8
C9
(移)(加)(移)(减)
IN4148X4
图(1)。

键盘中断实验ppt课件

键盘中断实验ppt课件
②如果某行有键被按下,识别键盘哪一列的键被按下 (亦称之为扫描法)。逐列置低电平,并置其余各列为 高电平.检查各行线电平的变化。如果行电平变为低 电平,则可确定此行此列交叉点处按键被按下。
SPI接口
SPI(Serial Peripheral Interface串行外设接口) 总线系统,是一种同步串行外设接口,它可以使MCU与 各种外围设备以串行方式进行通信以交换信息。
线电平状态将由通过此按键的列线电平决定:列线电 平如果为低,行线电平为低;列线电平如果为高,则 行线电平亦为高。这一点是识别矩阵式键盘是否被按 下的关键所在。
矩阵键盘按键的识别方法
①识别键盘哪一行的键被按下。让所有列线均为低电平, 检查各行线电平是否为低。如果有行线为低,则说明 该行有键被按下,否则说明无键被按下。
8 DATA 串行数据输入/输出端当芯片接收指令时此 引脚为输入入端当读取键盘数据时此引脚在 读指令最后一个时钟的下降沿变为输出端
9 /KEY 按键有效输出端平时为高电平当检测到有效 按键时此引脚变为低电平
端口控制寄存器GPFCON
端口F 引脚功能 端口F 引脚功能 端口F 引脚功能
GPF0 EINT0
EINT14(SPIM GPG12 EINT20(XMON) OSI1)
EINT15(SPICL GPG13 EINT21(nXPON)
K1)
EINT16
GPG14 EINT22(YMON)
GPG3 EINT11(nSS1) GPG9 EINT17
GPG15 EINT23(nYPON)
GPG4 GPG5
实验用键盘模块
1.矩阵式键盘一般适用于按键数量较多的场合,它由行 线和列线组成,按键位于行、列的交叉点上。

定时与中断实验

定时与中断实验

第二十课定时与中断实验二前面我们用定时器和中断做了延时的实验现在再来看一看外部计数和外部中断的实验在实际的工程应用中计数器通常会有两种要求第一种将计数的值显示出来象录音机上的计数器汽车上的里程表等等第二种计数值到一定值后即中断报警如前面提到的生产线上的计数定长定量仪等等接下来我们先来做一个外部计数器的实验要将外部计数的值显示出来最好是用数码管可我们还没有讲到这一部份为了避免把问题复杂化我们用 P1 口的 8 个 LED 来显示计到的数据为了完成这个实验我们需要用到一套附件它的作用就是输出一个宽度为 500mS 的方波这套附件不在我们的实验板上为了节约大家的学习费用我特地做了几套供大家借用各位可以到我这儿来借免费使用不过请各位爱惜哦不要搞坏了有了这套附件就可以完成我们的实验了我们把附件的两根线分别连接到实验板的电源接口和单片机的 15 脚也就是 T1 的输入端实验的程序如下一计数器实验一程序如下ORG 0000H ; AJMP START ; ORG 0030H ;START:MOV SP,#5FH ;MOVTMOD,#40H;定时/计数器 1 作计数用T0 不用全置SETBTR1;启动 T1 开始运行LOOP:MOV A,TL0 ; MOV P1,A ; AJMP LOOP ; END运行这个程序看到了什么随着 LED 的闪烁实验板上的 8 个 LED 也在不断地变化注意观察是不是按二进制 00000000 00000001 00000010 00000011 这样的顺序在变呢对了这就是 TL0 中的数据不过这个实验还看不出什么名堂接着做第二个实验二计数器实验二程序如下ORG 0000H ; AJMP START ; ORG 001BH ;AJMP TIMER1 ;定时器 1 的中断处理ORG 0030H ; START:MOV SP,#5FH ;MOV TMOD,#40H ;定时/计数器 1 作计数用工作方式 1 T0 不用置 0MOVTH1,#0FFH;MOVTL1,#0FAH;预置值每计到 6 个脉冲即为一个事件SETBEA;SETBET1;开总中断和定时器 1 中断允许SETBTR1;启动定时/计数器 1 开始运行AJMP$;TIMER1:PUSH ACC ;78----------------PUSH PSW ;CPL P1.0 ;计数值到即取反 P1.0MOVTH1,#0FFH;MOVTL1,#0FAH;重置计数初值POP PSW ;POP ACC ; RETI ; END这段程序完成的工作其实很简单就是每 6 个计数脉冲到来后取反一次 P1.0 因此实验的结果应当是 15 脚接的 LED 亮灭 6 次则 P1.0 口所接的 LED 就亮或灭一次这就是我们对输入脉冲的计数也就是每 6 个计数产生一次中断这段程序中有一个符号以前没见过需要给大家解释一下 AJMP$$ 我们称为标识符它的作用是指这条指令的开始处在这里其实就是循环执行 AJMP $这条指令执行这么多次干什么实际上它是在等待中断的产生这两个实验需要附件如果您觉得做起来不大方便没关系我们接着来做第三个实验采用两个定时/计数器合用一个作为定时器用一个作为计数器用来实现 P1.1 的延时这可以直接在我们的实验板上完成三两个定时/计数器合用的延时实验采用两个定时/计数器其中 T0 作为定时器用工作方式为方式 1 T1 作为计数器用计数次数为 1000 次 T0 溢出时产生一个间隔为 60mS 的方波也就是让 LED3 各亮灭60mS然后把 P1.2的输出作为 T1 的计数脉冲 T1 计数溢出时满 1000 次取反一次 P1.1 产生一个周期为 2 秒的方波即 LED2 每 2 秒闪烁一次程序如下ORG 0000H ; AJMP MAIN ;ORG 000BH ;定时器 T0 的中断入口AJMP T_0 ;转 T0 中断服务程序 ORG 001BH ;定时器 T1 的中断入口 AJMPT_1 ;转 T1 中断服务程序 ORG 0030H ;MAIN:MOV TMOD,#51H ;T1 为计数器方式 1 T0 为定时器方式 1MOVTH0,#15H;设置 T0 初值MOVTL0,#0A0H;MOV TH1,#0FCH ;设置 T1 初值MOVTL1,#18H;MOVIE,#8AH;允许T0T1 中断SETBTR0;启动定时器 T0SETBTR1;启动定时器 T1LL:SJMP LL ;循环T_0:MOV TH0,#15H ;给 T0 重新赋值MOV TL0,#0A0H ;T_1:MOV TH1,#0FCH ;给 T1 重新赋值MOV TL1,#18H ;CPL P1.1 ;计数到取反 P1.179----------------RETI ; END把程序下载到单片机看到什么 LED3 在不断的闪烁这就是 T0 的作用闪烁的周期是多少请大家计算一下接下来把 P1.2也就是 3 脚和 P3.5也就是 T1的输入端相连接是不是接在P1.1 上的 LED2 每 2 秒闪烁一次对了这就是 T1 作计数器的结果在这段程序里有一点请大家注意第四条—AJMP T_0,为什么要在 T 和 0 之间加上一条横线而不直接用 T0 呢原来在 MCS—51 系列单片机中是不能用 T0 T1 INT RET IP PSW 等等内部名称作为标号的如果这样做的话编译软件会出错这点我们好象很早以前曾经提到过接下来我们再来做一个外部中断的实验四外部中断实验程序如下ORG 0000H ; AJMP START ;ORG 0003H ;外部中断 0 地址入口AJMP INTO ; ORG 30H ;START: MOV SP,#5FH ;MOVP1,#0FFH;灯全灭MOVP3,#0FFH;P3 口置高电平SETBEA;SETBEX0;AJMP $ ;INTO:PUSH ACC ; PUSH PSW ; CPL P1.0 ;POPPSW;POPACC;RETI ;END本程序的功能就是按一次按键 S1接在 P3.2 引脚上的就引发一次外部中断INT0=0取反一次 P1.0 因此理论上按一下灯亮再按一下灯灭有点象我们工程应用中的自锁开关不过这段程序在实际的实验中可能会发觉有时不很灵按了它没反应但在大部份时候还是对的这是怎么回事呢其实这是因为按键没有作去抖动处理也就是说理论上我们是按了一次键但由于计算机的处理速度很快计算机实际上却认为已经按了好多次了如何来解决这个问题呢这就需要我们对按键作去抖动处理什么是按键的去抖动处理我们下一课讨论键盘接口时再作详细解释五本课总结通过这两节课的实验我们对定时/计数器和中断的使用方法已经有了一个基本的了解希望大家继续多做实验本来嘛学会单片机靠的就是不断的实践和总结80----------------第二十一课键盘接口与编程一键盘接口和数码管接口是构成单片机人机界面的主要方法对于一个初学者来说这部分的内容也是较难的我们将用四节课的时间来学习这方面的知识这一课先来讨论键盘的接口原理与编程方法键盘是单片机应用系统不可缺少的重要输入设备主要负责向计算机传递信息我们可以通过键盘向计算机输入各种指令地址和数据它一般由若干个按键组合成开关矩阵按照其接线方式的不同可分为两种一种是独立式接法一种是矩阵式接法如下面的图这一课先来讲解独立式键盘的工作原理和编程方法一独立式键盘的工作原理和编程方法独立式键盘具有结构简单使用灵活等特点因此被广泛应用于单片机系统中那么它是如何来工作的呢我们慢慢往下看1 独立式键盘的接线原理独立式键盘是由若干个机械触点开关构成的把它与单片机的 I/O 口线连起来通过读 I/O 口的电平状态即可识别出相应的按键是否被按下下面的左图就是我们实验板的按键连接图如果按键不被按下其端口就为高电平如果相应的按键被按下则端口就变为低电平在这种键盘的连接方法中我们通常采用下拉电平接法即各按键开关一端接低电平另一端接单片机 I/O口线如上左图所示这是为了保证在按键断开时各 I/O 口线有确定的高电平通常我们用来做键盘的按键有触点式和非触点式两种单片机中应用的一般是由机械触点构成的触点式微动开关这种开关具有结构简单使用可靠的优点但当我们按下按键或释放按键的时候它有一个特点就是会产生抖动看上图的按键脉冲波形这种抖动对于人来说是感觉不到的但对单片机来说则是完全可以感应到的因为单片机处理的速度是在微秒级的而机械抖动的时间至少是毫秒级对计算机而言这已是一个很漫长的过程了下面我们通过一个实验来验证一下实验程序如下ORG 0000H ; AJMP START ; ORG 0030H ; START:MOV SP,5FH ;81----------------MOVP1,#0FFH;MOVP3,#0FFH;L1:JNB P3.4,L2 ;按下按键开关取反一次 P1.0灯亮再按一下灯灭JNB P3.5,L3 ;按下按键开关取反一次 P1.1灯亮再按一下灯灭LJMPL1;L2:CPLP1.0;LJMPL1;L3:CPLP1.1;LJMPL1;END把这个程序下载到单片机我们会发现当按下相应的按键时灯并不是想象中的按一下亮再按一下就灭而是有时灵有时不灵为什么会这样呢原来当你按了一次按键可是单片机却早已执行了好多次如果执行的次数正好是奇数次那么结果正如你所料如果执行的次数是偶数次那结果就不对了为了使 CPU 能正确地读出端口的状态对每一次按键只作一次响应就必须考虑如何去除按键的抖动2 按键的去抖动原则和方法常用的去抖动的方法有两种硬件方法和软件方法硬件去抖动的方法很多好多书都有介绍这不在我们的讨论范围单片机中常用软件去抖动法软件法其实也很简单就是在单片机获得端口为低电平的信息后不是立即认定按键已被按下而是延时10 毫秒或更长一些时间后再次检测该端口如果仍为低说明此键的确被按下了这实际上是避开了按键按下时的抖动时间而在检测到按键释放后端口为高电平时再延时 5-10 毫秒消除后沿的抖动然后再对按键进行处理不过一般情况下我们通常不对按键释放的后沿进行处理实践证明也能满足通常的要求下面我们把前面的程序改一下看看按键的去抖动是如何实现的看下面的程序ORG 0000H ; AJMP START ; ORG 0030H ; START:MOV SP,#5FH ; MOVP1,#0FFH ; MOV P3,#0FFH ;L1:JB P3.4,L2 ;P3.4 为 1不做处理转 P3.5 否则说明有键按下LCALL D10mS ; 调用延时程序去除抖动JB P3.4,L1 ; P3.4 为 0说明此键确实被按下了CPL P1.0 ;取反 P1.0L3:JNB P3.4,L3 ;直到 P3.4 释放后转去判断第二个键L2:JB P3.5,L1 ;P3.5 为 1返回去继续处理 P3.4 否则说明有键按下LCALL D10mS ; 调用延时程序去除抖动JB P3.5,L2 ; P3.5 为 0说明此键确实被按下了CPL P1.1 ; 取反 P1.1L4:JNBP3.5,L4;直到 P3.5 释放为止LJMPL1;返回D10mS:MOV R7,#50 ;延时的时间一般为 5-20mSD1:MOV R6,#100 ; D2:DJNZ R6,D2 ; DJNZ R7,D1 ;82----------------RET ; END把这段程序写入单片机试试看是不是行了这就是独立式按键去抖动的基本方法不过这个程序在实际应用中并没有多大的意义因为如果按键数量比较多的话程序就会变得很长为什么会这样呢因为这里我们采用了直接寻址的方式如果我们把键值放入一个表格中再通过查表程序来判断到底是哪个按键被按下了再去处理相应的程序就会很简单想想看该怎么做二独立式键盘的编程方法我们刚才的程序演示了按键的去抖动原理和基本方法接下来让我们做一个按键使用的实验来验证一下大家看附图的电路图我们的实验板上有 4 个按键分别接到了 P3 口的 P3.2,P3.3,P3.4,P3.5 引脚上现在我们用 P3.2,P3.3,P3.4 和 P3.5 这四个按键来做一个实验实验之前先定义各个按键的功能实验程序如下按此键则灯开始流动(由左向右)按此键则停止流动所有灯为灭按此键则灯反向流动由右向左按此键则灯正向流动由左向右UpDown EQU 00H ; 上下行标志StartEndEQU01H;起动及停止标志LampCodeEQU21H;存放流动的数据代码ORG 0000H ;AJMP MAIN ; ORG 30H ; MAIN:MOV SP,#5FH ;MOVP1,#0FFH;CLRUpDown;启动时处于向上的状态CLRStartEnd;启动时处于停止状态MOV LampCode,#0FEH;单灯流动的代码LOOP:ACALL KEY ;调用键盘程序JNB F0,LNEXT ;如果无键按下则继续 ACALL KEYPROC ;否则调用键盘处理程序LNEXT:ACALL LAMP ;调用灯显示程序AJMP LOOP ;反复循环主程序到此结束DELAY:MOV R7,#100 ; D1:MOV R6,#100 ;DJNZR6,$;DJNZR7,D1;RET ;延时程序键盘处理中调用KEYPROC:MOV A,B ;从 B 寄存器中获取键值JB ACC.2,KeyStart ;分析键的代码某位被按下则该位为”1”在键盘程序中已取反JB ACC.3,KeyOver ;JBACC.4,KeyUp;JBACC.5,KeyDown;AJMP KEY_RET ;KeyStart:SETB StartEnd ;第一个键按下后的处理AJMP KEY_RET ;83----------------KeyOver:CLR StartEnd;第二个键按下后的处理AJMP KEY_RET ;KeyUp:SETB UpDown ;第三个键按下后的处理AJMP KEY_RET ;KeyDown:CLRUpDown;第四个键按下后的处理KEY_RET:RET;KEY:CLR F0 ;清 F0 表示无键按下ORLP3,#01111000B;将 P3 口接有四个键的位置1JZ K_RET ;如果为 0 则无键按下ACALL DELAY ;否则延时去键抖ORLP3,#01111000B;MOVA,P3;ORLA,#10000111B;CPLA;JZ K_RET;MOV B,A;确实有键按下将键值存入 B 中SETB F0 ;设置有键按下的标志K_RET:ORL P3,#01111000B ;此处循环等待键的释放MOVA,P3;ORLA,#10000111B;CPLA;JZ K_RET1 ;直到读取的数据取反后为”0”说明键释放了才从键盘处理程序返回AJMP K_RET ;K_RET1:RET ;D500mS: ;流水灯的延迟时间PUSHPSW;SETBRS0;MOV R7,#200 ;D51:MOV R6,#250 ; D52:NOPNOPNOPNOPDJNZR6,D52;DJNZR7,D51;POP PSW ;RET ;LAMP:JB StartEnd,LampStart ;如果 StartEnd=1 则启动MOV P1,#0FFH;AJMP LAMPRET;否则关闭所有显示返回LampStart:JB UpDown,LAMPUP ;如果 UpDown=1 则向上流动MOV A,LAMPCODE ;84 单片机学习中心,为您免费发布大量的学习资源以及商业代码RL A ;实际就是左移位MOVLAMPCODE,A;MOVP1,A;LCALL D500mS ;AJMP LAMPRET ; LAMPUP:MOV A,LAMPCODE ;RR A ;向下流动实际就是右移MOVLAMPCODE,A;MOVP1,A;LCALL D500mS ;LAMPRET:RET ; END这段程序是我们到目前为止最长的程序相信大多数指令大家应该能看懂开始三条 UpDown EQU00H StartEnd EQU 01H LampCode EQU 21H 给大家解释一下 EQU 叫做等值伪指令它的功能是将一个常数或者特定的符号赋予规定的字符串什么意思呢举个例子ORG 200HABC EQU R6MOV A ABC这里将 ABC 等值为寄存器 R6 也就是说在指令中 R6 这个寄存器可以用字符串 ABC 来代替为什么要这样写呢当然是为了增加程序的可读性不过有一点大家要记住了这里使用的字符串不是标号不能用来做分隔符比如这样写 ABC:EQU R6 如果加上汇编程序会出错当然用 EQU指令除了可以赋值数据和地址外还可以赋值直接地址或者直接当作一个立即数来使用例如ABC EQU 10HDELAY EQU 05AFHMOV A ABCLCALL DELAY这里 ABC 赋值以后被当作了直接地址使用而 DELAY 被赋值以后则成了一个16 位的地址如此一来上面的三条指令也就很清楚了这里有一个问题大家需注意使用 EQU 伪指令必须先赋值后使用所以一般的程序都把赋值指令放在程序的开头部分既然讲到了赋值伪指令我们再讲一下另外三条赋值伪指令.A 位地址定义伪指令 BIT它的功能是将一个可直接寻址的位地址赋予所规定的字符名称例如ABC BIT P1.0 把 P1.0 赋值给 ABC 即字符串 ABC 就是直接寻址位 P1.0这里注意与 EQU 不同的是这条指令只能对位地址赋值而不能对寄存器或直接地址和立即数赋值相反 EQU 指令却可以用来定义位地址变量不过这时所赋的值应当是具体的位地址值比如 P1.0 要用 90H 来代替 P2.0 要用 AOH 来代替等等B 内部 RAM 定义伪指令 DATA它的功能是给一个 8 位的内部 RAM 起一个名称例如ABC DATA 20H 把内部 RAM 的 20H 定义为 ABCC 外部 RAM 定义伪指令 XDADT给一个 8 位的外部 RAM 起一个名称例如ABC XDATA 0ACH 由于 89C51 的内部 RAM 寻址范围为 00H-FFH 所以这个地址必然大于 FFH讲了赋值伪指令再回到上面的按键处理程序这段程序的功能虽然很简单但它演示了一个键盘处理程序的基本思路程序本身很简单也不很实用实际工作中还会有好多要考虑的因素比如主循环每次都调用了灯的循环程序会造成按键反应迟钝而如果一直按着键不放则灯不会再流动85----------------一直要到松开手为止大家可以仔细考虑一下这些问题想想有什么好的解决办法独立式键盘除了上面介绍的这种连接方法我们还可以采用上图右边所示的连接方法用一个与非门把四个输入端连接起来当有任何一个按键按下时都会使与非门输出为低电平从而引起单片机的中断它的好处是不用在主程序中不断地循环查询了如果有键按下单片机就去作相应的处这一课通过两个实验讲解了独立式键盘的工作原理和基本的去抖动方法由于键盘的实际使用是千差万别的所以工程中您还得根据实际情况灵活应用这里只能给大家一个基本的认识四第 21 课习题1什么是键盘的去抖动问题为什么要对键盘进行去抖动处理2找一个硬件的去抖动电路并自行分析其工作原理。

东南大学信息学院微机实验报告十

东南大学信息学院微机实验报告十

实验十一、实验目的1.了解Intel 8086CPU的中断处理功能以及IBM-PC的中断结构。

2.了解8259中断控制器的使用。

3.掌握键盘中断的编程,观察中断的执行情况。

二、实验任务要求每按下一个键就向CPU发出中断请求信号,该信号由8259的IRQ1引入,中断类型号为09,CPU响应中断后转入执行KEYINT中断服务程序,并且在CRT上显示某字或某个图形,按下10次后返回DOS。

三、源程序STACK SEGMENT STACKDW 200H DUP(?)STACK ENDSDATA SEGMENTKEY DB ?BUF DB "OK!"DATA ENDSCODE SEGMENTASSUME CS:CODE, SS:STACK, DS:DATADELAY PROCPUSH CXPUSH DXMOV DX,0A64DHCON2: MOV CX,0FFFFHCON: DEC CXJNE CONDEC DXJNE CON2POP DXPOP CXRETDELAY ENDPDISP1 PROC FARPUSH AXPUSH BXPUSH CXPUSH DXMOV AH, 15 ;读当前显示状态INT 10HMOV AH, 0 ;设置显示方式INT 10HMOV CX, 1 ;要显示字符个数MOV DX, 0 ;行号为0,列号为0REPT: MOV AH, 2 ;设置光标位INT 10HMOV AL, 0FH ;读出太阳图形MOV AH, 10 ;写字符INT 10HCALL DELAYSUB AL, ALMOV AH, 10 ;清除原图形INT 10HINC DHADD DL, 2CMP KEY, 10JAE GO1CMP DH, 25JNE REPTGO1: POP DXPOP CXPOP BXPOP AXRETDISP1 ENDPDISP2 PROC FARPUSH CXPUSH BXPUSH AXMOV CX, 3NEXTC: LODSB ;AL<-[SI]MOV AH, 0EH ;写字符,并移动光标MOV BX, 01INT 10HCALL DELAYLOOP NEXTCCMP KEY, 10JAE GO2POP AXPOP BXPOP CXRETDISP2 ENDPKEYINT PROC FARPUSH AXPUSH SISTIIN AL, 60HIN AL, 61HOR AL, 80HOUT 61H, ALAND AL, 7FHOUT 61H,ALTEST AH, 80HJNE GOSTIINC KEYMOV SI, OFFSET BUFCALL DISP2GO: MOV AL, 20HOUT 20H, ALPOP SIPOP AXIRETKEYINT ENDP START: MOV AX, STACK MOV SS, AXMOV AX, DATAMOV DS, AXMOV ES, AXMOV AX, ES:[24H]PUSH AXMOV AX, ES:[26H]PUSH AXCLIMOV AX, OFFSET KEYINTMOV ES:[24H],AXMOV AX, SEG KEYINTMOV ES:[26H], AXSTIMOV KEY, 0AGAIN: CALL DISP1CMP KEY, 10JB AGAINCLIGO2: POP AXMOV ES:[26H],AXPOP AXMOV ES:[24H],AXSTIMOV AH, 4CHINT 21HCODE ENDSEND START四、实验中遇到的问题在实验编写过程中,遇到按住键,会一直显示OK,出现10次OK后也不会跳出程序。

东南大学微机实验4_1

东南大学微机实验4_1

微机实验及课程设计
7 东南大学
7
选作实验
3.双色点阵发光二 极管显示控制 借 助 简 单 I/O 输 出 锁 存功能, 存功能 , 实现双色 点阵显示控制。 8*8点阵显示控制。 同时了解双色点阵 LED显示器的基本原 LED显示器的基本原 理 , 掌握PC 机控制 掌握 PC机控制 PC 双色点阵LED LED显示程 双色点阵LED显示程 序的设计方法。 序的设计方法。
自端口2A0H输入ASCII码
保存输入ASCII码至DL 是ESC吗? Y N 从端口2A8H 输出其ASC码 N 有键按下吗? Y 结 束 结 束 显示ASCII码对应的字符
微机实验及课程设计
6 东南大学
6
选作实验
用基本实验( 中输出锁存电路, 成流水灯( 1. 用基本实验(1)中输出锁存电路, L0-L7成流水灯(可用 点阵列选替换),流水间隔时间由软件产生; ),流水间隔时间由软件产生 8*8点阵列选替换),流水间隔时间由软件产生; 流水方向 由键盘在线控制, 随时可切换; 由键盘在线控制 , 随时可切换 ; 流水间隔时间也可键盘控 也可利用8段数码管构成递减或递增计数显示。 制; 也可利用8段数码管构成递减或递增计数显示。 用基本实验( 中输入电路,监测逻辑电平开关 逻辑电平开关K0-K7变 2. 用基本实验(2)中输入电路,监测逻辑电平开关 变 一旦发生变化, 在显示器上显示二进制数状态, 化, 一旦发生变化 在显示器上显示二进制数状态 当开关 状态=55H时在控制台发出 声快速鸣叫 时在控制台发出5声快速鸣叫 状态 时在控制台发出 声快速鸣叫(BEL), 开关状态 =0AAH时发出 声缓慢鸣叫 时发出3声缓慢鸣叫 控制码BEL 时发出 声缓慢鸣叫(BEL)。 (ASCII 控制码 BEL 为 。 (ASCII控制码 BEL为 07H, 控制台输出,主机内部喇叭发出警告声) 07H, 控制台输出,主机内部喇叭发出警告声),实验中 注意输入处理消除颤抖方法。 注意输入处理消除颤抖方法。 观察IN/OUT 指令对应的总线周期波形( 双踪显示, IN/OUT指令对应的总线周期波形 3. 观察 IN/OUT 指令对应的总线周期波形 ( 双踪显示 , 以片选 IORD/IOWR为参考 观察A 为参考, ,D7 ),记录波形 记录波形. 或IORD/IOWR为参考,观察A9-A0,D7-D0等),记录波形.

东南大学自动化学院微机系统与接口课后习题答案

东南大学自动化学院微机系统与接口课后习题答案

东南⼤学⾃动化学院微机系统与接⼝课后习题答案《微机系统与接⼝》作业参考答案(2010.6)第6章2.相同电位,单点相联避免多点电位差引起地线上环流,影响精度3.1 ms定时中断:计数,主程序查计数变化,输出软件延时:主程序查计数,输出DELAY: MOV AL, TIMCNTCMP AL, TIMCNT0JZ DELAYMOV TIMCNT0, ALROUNTINE: CALL TIMINITRT1: XOR AL, ALMOV TIMCNT0, ALMOV AL, 0MOV DAOUT0, ALMOV DX, DAPORTOUT DX, ALRT2: CALL DELAY ;1msMOV AL, TIMCNT0CMP AL, 8JNC ONECYCLEMOV AL, DAOUT0ADD AL, STEPMOV DX, DAPORTOUT DX, ALJMP RT2ONECYCLE:4. (图略)8255PA—0809 D0-D78255PB –PB0-PB2:0809 ADDC-A, PB3---0809ALE0809 OE--+5V8253 OUT0—0809 (200uS定时)START, EOC—IRQ2CLK0—2MHzAD_BUF DB 400 DP(0);AD缓冲区INDEX DW 0 ;计数指针初始化:MOV AL, 10011001B ;A⼝⼊,B⼝出,⽅式0MOV DX, PORT8255OUT DX, ALMOV AL, 00001000B ;锁存CHMOV DX, PORT8255OUT DX, ALMOV AL, 00000000BMOV DX, PORT8253OUT DX, ALMOV AL, 00110100BMOV DX, PORT8253+3OUT DX, ALMOV AL, LOW 400MOV DX, PORT8253OUT DX, ALMOV AL, HIGH 400OUT DX, AL………………;8259初始化STI(通道选择)MOV AL, 00000XXXB ;选通道,锁存 XXX可变000-111 MOV DX, PORT8255PBOUT DX, ALMOV AL, 00001XXXB ;产⽣脉冲 __| |___OUT DX, ALMOV AL, 00000XXXB ;产⽣脉冲OUT DX, AL;初始化 INDEXMOV INDEX,0中断1:选通道,存⼊指定中断1:选通道,存⼊指定单元INT_PROC: PUSH …………MOV DX, PORT8255PAIN AL, DXMOV AD_BUF, ALMOV AL, 00000XXXB ;选通道,锁存XXX可变000-111 MOV DX, PORT8255PB OUT DX, ALMOV AL, 00001XXXB ;产⽣脉冲 __| |___OUT DX, ALMOV AL, 00000XXXB ;产⽣脉冲OUT DX, ALPOP ….中断2:不选通道,连续存⼊指定单元区INT_PROC: PUSH …………MOV DX, PORT8255PAIN AL, DXMOV BX, INDEXMOV AD_BUF[BX], ALINC INDEXMOV AL, 00000XXXB ;选通道,锁存XXX可变000-111 CMP INDEX,POP ….。

微机原理中断的应用实例

微机原理中断的应用实例

微机原理中断的应用实例引言中断是微机原理中的重要概念之一,在实际的应用中起着至关重要的作用。

本文将介绍几个微机原理中断的应用实例,以展示中断的各种功能和用途。

通过这些实例,读者可以更好地理解和应用微机中断的知识。

实例一:键盘中断键盘中断是微机系统中最常见的中断之一。

它的应用范围非常广泛,可以用于用户输入的响应、快捷键的实现等方面。

以下是键盘中断的应用实例:•按下特定的键盘按键,触发相应的中断程序,从而实现对按键的响应。

•通过键盘中断监视特定的按键组合,实现快捷功能,如打开计算器、截屏等。

实例二:定时器中断定时器中断是微机原理中另一个常见的中断类型。

它常用于需要周期性执行某些任务的场景,如操作系统的任务调度、多媒体播放等。

以下是定时器中断的应用实例:•在操作系统中,定时器中断可以用于实现任务调度。

当定时器中断触发时,操作系统可以根据事先设定的优先级来执行相应的任务。

•在多媒体应用中,定时器中断可以用于周期性地更新屏幕上的图像,实现流畅的动画效果。

实例三:外部设备中断外部设备中断是指由于外部设备的操作引起的中断。

它常用于与硬件设备的交互,如串口通信、并口通信等。

以下是外部设备中断的应用实例:•与串口通信相关的中断可以用于接收和发送串口数据,实现与外部设备的数据交互。

•并口通信相关的中断可以用于接收和发送并口数据,实现高速数据传输。

实例四:异常中断异常中断是比较特殊的中断类型,它通常用于处理出现的错误或异常情况。

以下是异常中断的应用实例:•硬件故障引发的异常中断可以用于处理硬件错误,如内存故障、通信中断等。

•软件错误引发的异常中断可以用于捕获和处理非法指令、溢出等问题。

结论微机原理中断的应用实例丰富多样,涵盖了各个领域。

在实际的开发中,合理地利用中断可以提高系统的效率和可靠性。

通过学习和理解这些应用实例,读者可以更好地应用中断的知识,提升自己的微机原理水平。

微机原理课程设计--8253定时中断时钟

微机原理课程设计--8253定时中断时钟

课程设计报告( 2013—2014年度第一学期)名称:微机原理及应用题目:8253定时中断时钟院系:控计学院班级:学号:学生姓名:指导教师:设计周数:1周成绩:日期:2013年12月30日目录一、课程设计的目的与要求 (2)1.课程设计的题目 (2)2.课程设计的要求 (2)二、设计正文 (2)1.基本原理 (2)2.代码示例 (2)三、课程设计总结 (6)四、参考文献 (7)附录 (7)1.程序源码 (7)2.程序流程图 (13)一、课程设计的目的与要求1.课程设计的题目题目:用8253定时器实现屏幕上的日历时钟,带有年月日时分秒(1人)在DOS屏幕上右上角动态显示日期、时间,要求格式:年-月-日时:分:秒。

要求采用8253定时器中断方式实现定时及显示刷新。

2.课程设计的要求通过对微机系统分析和具体设计,使学生对所学课程的理解。

培养分析能问题,解决问题的能力。

要求学生掌握汇编语言程序设计的基本方法,学会典型接口的基本设计方法二、设计正文1.基本原理获取系统时间与日期的方式有两种,比较简单的途径是直接用DOS时间与日期功能调。

比如:向量号为21,功能号为2A,可以调出系统的时间,分别存放在DX和CX之中;向量号为21,功能号为2C可以调出系统的日期,年月日信息存储在DX和CX中;向量号为1A,功能号为02,也可以调用系统时间,同样存放在DX和CX中,不过是以压缩BCD码的形式存放的;向量号为1A,功能号为04可以调出系统的日期,以BCD码的形式存放在DX和CX中。

编程的时候就会发现,后者比前者使用起来方便很多,因为显示的时候要用到ASC码,压缩BCD码可以通过与30H相加,便可以得到相应的ASC码。

而前者存储方式十六进制的,所以必须先转换成BCD码,在转换成ASC码,而十六进制与BCD码之间的转换比较复杂。

2.代码示例用1A向量实现,程序代码如下:MOV AH,02HINT 1AHPUSH DXPUSH CXMOV AH,04HINT 1AHPUSH DX这段代码执行后,查看堆栈得:14 20 02 01 17 17 07 52,时间为:2014年1月2日17点17分52秒用21号向量实现,程序代码如下:MOV AH,2CHINT 21HPUSH DXPUSH CXMOV AH,2AHINT 21HPUSH DXPUSH CX代码执行后,查看堆栈得:DE 07 02 01 17 11 40 16,当前系统时间用16进制表示的,换算之后,可以得到:2014年1月2日17点23分22秒另一种方式就是题目所要求的,利用8253的55MS中断产生定时,不过仍然需要读一次系统的时间,作为计时开始的基准。

东南大学-微机原理-微机系统与接口-实验五-六-实验报告-自动化学院

东南大学-微机原理-微机系统与接口-实验五-六-实验报告-自动化学院

东南大学《微机实验及课程设计》实验报告实验五8253 计数器/定时器实验六8255 并行输入输出姓名:学号:08011专业:自动化实验室:计算机硬件技术实验时间:2012年04月27日报告时间:2013年05月15日评定成绩:审阅教师:一. 实验目的实验五:1)掌握计数器/定时器8253 的基本工作原理和编程应用方法;2)了解掌握8253 的计数器/定时器典型应用方法实验六:1)掌握8255方式0的工作原理及使用方法,利用直接输入输出进行控制显示;2)掌握8段数码管的动态刷新显示控制;3)分析掌握8255工作方式1时的使用及编程,进一步掌握中断处理程序的编写。

二. 实验内容实验五:必做:5-1 将计数器0设置为方式0,计数初值为N(小于等于0FH),用手动的方式逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化。

(参考程序p63)5—2 将计数器0、1分别设置在方式3,计数初值设为1000,用逻辑笔观察OUT0电平的变化。

(参考程序p64)实验六:(1)8255方式 0:简单输入输出实验电路如图一,8255C口输入接逻辑电平开关K0~K7,编程A口输出接 LED 显示电路L0~L7;用指令从 C口输入数据,再从A口输出。

图一 8255简单输入输出(2)编程将A口 L0-L7控制成流水灯,流水间隔时间由软件产生;流水方向由K0键在线控制,随时可切换;流水间隔时间也可由K4~K7键编码控制,如 0000对应停止,0001对应 1秒,1111对应 15秒,大键盘输入 ESC键退出。

(3)8段数码管静态显示:按图二连接好电路,将 8255的 A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端 S1接+5V(选中),S0、dp接地(关闭)。

编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。

图二单管静态显示(4) 8段数码管动态显示:按图三连接好电路,七段数码管段码连接不变,位码驱动输入端S1、S0 接8255 C口的PC1、PC0。

微机原理实验 8059A 中断应用

微机原理实验 8059A 中断应用
8259模块选通线CS连到MCU主模块的地址A14。
8259模块的WR、RD分别连到MCU主模块的WR、RD。
8259模块的数据(AD0~AD7)、地址线(A0~A7)分别连到MCU主模块的数据(AD0~AD7)、地址线(A0~A7)。
8259模块的INTA接MCU主模块的INTA,INT接MCU主模块的INTR,IRx(指IR0~IR7中的任一个)接信号源模块的1H。
8259A的命令共有7个,一类是初始化命令字,另一类是操作命令。8259A的编程就是根据应用需要将初始化命令字ICW1-ICW4和操作命令字OCW1-OCW3分别写入初始化命令寄存器组和操作命令寄存器组。ICW1-ICW4各命令字格式如图3-2-2所示,OCW1-OCW3各命令字格式如图3-2-3所示,其中OCW1用于设置中断屏蔽操作字,OCW2用语设置优先级循环方式和中断结束方式的操作命令字,OCW3用语设置和撤消特殊屏蔽方式,设置中断查询方式以及设置对8259内部寄存器的读出命令。
DELAY PROC NEAR ;延时子程序的开始
MOV CX,0FFFFH;初始化计数次数
CC:NOP;空操作
LOOP CC;循环
RET;子程序返回
DELAY ENDP
CODE ENDS;代码段结束
END START;源程序结束
七、实验总结:
本实验我不是按照老师的实验要求,对老师提供的代码经行添加代码块或者翻译指令的功能。我是基于上次流水灯的实验,用8259产生中断,控制流水灯的工作效果。流水灯先是正常的流水,当有中断时,8086执行中断程序,使得流水灯循环熄灭三次,然后再继续流水。也可以控制A端口的输入的高低电平,达到控制流水灯的效果。因此本实验也融入了自己的一些编程思想
中断源

实验三_键盘中断程序

实验三_键盘中断程序

中断实现——实验三一、实验目的1. 理解LC-3模型机的中断机制,使用LC-3指令集进行汇编编程2. 实现中断驱动I/O效果,进一步加深对中断驱动I/O工作原理的理解二、实验内容1. 实验环境,如操作系统环境(Windows XP)、软件(LC-3 simulator、LC3Edit)2. 问题描述中断驱动I/O中断一个正在运行的程序,执行中断服务程序,执行完后,返回被中断的程序,接着被中断的指令,继续执行。

在这个试验中,采用键盘作为输入设备中断程序。

三、分析与实现1. 分析问题,详述分析过程这个程序被分成了三个部分(用户程序代码、中断程序代码、延时程序代码),阐述每个部分如何实现的,以及分析能否在程序中应用其他自陷程序,说明为什么;说明中断程序存放内存位置,尝试放在其他位置是否可以。

2. 画出程序运行示意图3. 代码实现(若程序代码过于冗长,可放在附录部分;此处必须包含主要的功能代码)4. 运行程序的步骤阐述一下,运行此程序的步骤。

四、实验结果1. 常态运行结果截图2. 极端情况下的运行结果截图3. 对程序结果作出必要的文字描述,并分析运行结果五、心得体会在实验过程中,对自己的分析问题、动手编程、耐心等能力进行自我评价,认识自己的不足,逐步在认识自我中提高自身;把对实验的内容与课程内容进行联系,谈谈自己的收获。

六、参考资料1. 《Guide to Using the Windows version of the LC-3 Simulator and LC3Edit》2. 《计算机系统概论·英文版·第二版》3. 其他资料七、附录1. 全部程序代码,包含详细注释2. 其他。

实验三 键盘中断实验报告

实验三 键盘中断实验报告

苏州大学实验报告院、系 年级专业 姓名 学号 课程名称 成绩 指导教师 同组实验者 实验日期 实验名称: 键盘中断实验一.实验目的通过该实验实习,能够熟练运用MT-IDE 嵌入式开发系统环境、汇编和C 语言以及调试方式;复习SCI 的内容;加强键盘中断的基本原理及编程原理的理解;能够理解“行扫描”法的原理并且运用它进行键盘中断的编程。

二.实验内容理解键盘模块和键盘中断点的原理,使用“行扫描”法编写一个中断方式的的键盘程序,并转化成定义值后,通过串口分别发往PC 机的VB 编写的界面中显示。

三.实验过程(一)接线图(二)基本原理GP32的A 口的8根引脚与键盘中断模块(KBI )的引脚复用。

作为KBI 引脚时,8个引脚分别称为KBIE7- KBIE0。

它们提供了以中断方式识别是否有按键按下的硬件手段。

当然,如果不以中断方式识别键盘按键,可以屏蔽键盘中断,把A 口作为一般I/O 口对待。

CPU 对键盘扫描可以采取程序控制的随机方式,CPU 可以在空闲时扫描键盘。

也可以采用定时控制,每隔一定时间,对键盘扫描一次,CPU 可以随时响应键盘输入中断。

采用中断方式,当键盘上有键闭合时,键盘向CPU 请求中断,CPU 响应键盘输入中断,对键盘扫描,以识别哪一个键处于闭合状态,并对键盘输入信息作出响应处理。

CPU 对键盘上闭合键的键号确定,可以根据行线和列线的状态计算求得,也可以通过行线和列线的状态查表求得。

四.编程图1 键盘接线原理图行线(一)流程图(二)所用寄存器名称及其各个位1.汇编方式:图2 键盘中断流程图(中断方式主程序及其中断子程序)2.C语言方式:1.本实验中用的是键盘中断编程方式,也可以使用查询编程方式,请尽量少修改代码改用查询编程方式重新编写相应的子程序和主程序。

提示:注意重键问题。

答:只要把键盘中断子程序的内容放到主函数的循环中就可以了。

同时去掉中断向量表中关于键盘中断的中断设置。

2.识别是否有键按下以及哪个键被按下有哪些方法?答:识别是否有键被按下,主要有查询法、定时扫描法与中断法。

东南大学msp实验

东南大学msp实验
只要在处理函数中对LED端口状态取反就行。
(3)如何改写程序,使用KEY1和KEY2分别控制LED_RED和LED_GREEN的亮灭。
if((P4IN&BIT2)==0x00)//4.2
{
P4OUT |= BIT4//4.4
}
else if((P4IN&BIT3)==0x00)//4.3
{
P4OUT |= BIT5//4.5
图2-2开发板上按键和MCU的IO口对应关系图
开发板上三个LED灯和MCU的IO口对应关系如图2-3所示。
LED_YELLOW---P4.6、LED_GREEN---P4.5、LED_RED --- P4.4
图2-3开发板上三个LED灯和MCU的IO口对应关系
·端口中断使用中需要注意的地方
在msp430f6638的9个GPIO端口P1~P9中,仅仅P1和P2具有中断功能,而P3~P9不具备中断功能。这里按键使用的是P4口的两个引脚,不具有中断,那么如何用中断来实现呢?
break;
case 2: P4OUT&=~BIT4;
P4OUT|=BIT5;
P4OUT&=~BIT6;
break;
case 3: P4OUT&=~BIT4;
P4OUT&=~BIT5;
P4OUT|=BIT6;
break;
default :break;
}
turns++;
if(turns>3) turns = 1;
if((P4IN&BIT2)==0x00)
{
P4OUT |= BIT4+BIT5+BIT6;//LED等亮暗转换
}

实验三(实验报告) - 键盘中断 (1)

实验三(实验报告) - 键盘中断 (1)

实验三中断程序设计学号 201216008 姓名孙坤专业电子信息科学与技术成绩【实验目的】(1)认识微机系统的中断特性。

(2)学习8259中断控制器的工作原理。

(3)学习8259中断控制器的应用编程。

(4)掌握使用PC机内8259的方法(5)掌握修改中断向量的方法。

【实验原理及内容】1、实验原理:我们利用IBM-PC机的8259A,利用键盘输入作为中断请求信号,通过IRQ1来申请中断。

2、实验内容:当用户每按下一次键盘上的按键时,即相当于从IRQ1端向计算机内部的8259A发送一次中断请求,该中断的服务是将“THIS IS A INTERRUPT!”显示在屏幕上。

中断10次后程序退出。

3、编程提示:1)PC微机系统中的8259在80x86系列PC微机系统中,系统中包含了两片8259A中断控制器,经级连可以管理15级硬件中断,但其中部分中断号已经被系统硬件占用,具体使用情况如下表所示。

两片8259A的端口地址为:主片8259使用020H和021H两个端口;从片使用0A0H和0A1H 两个端口。

系统初始化两片8259的中断请求信号均采用上升沿触发,采用全嵌套方式,优先级的排列次序为0级最高,依次为1级、8级~15级,然后是3级~7级。

在扩展系统总线上的INTR对应的中断线就是PC机保留中断其中的一个。

对INTR中断的初始化PC机已经完成,在使用时主要是将其中断屏蔽打开,修改中断向量。

2)键盘中断注意事项PC机中使用的是编码键盘,在键盘内部有一单片机对整个键盘上的字符键、功能键、控制键和组合键进行管理,当从键盘上键入一个键时,键盘上的处理器首先向微机产生硬件中断请求(IRQ1),然后将改键的扫描码传送给主机。

而PC主机在IRQ1中断的作用下,调用INT 09硬件中断读入键盘的扫描码,并转换成ASCII码,存入键盘缓冲区。

本实验中的键盘中断处理程序必须对键盘控制器完成键盘复位 1.复位键盘控制器只需读出端口61H的内容,并将最高位置1,再写入该端口。

实验三 键盘中断实验

实验三 键盘中断实验

实验三 键盘中断实验一.实验目的1.熟练运用MT-IDE 嵌入式开发系统环境、汇编、C 语言、调试方式。

2.复习串行通信接口(SCI )的内容。

3.加强键盘中断基本原理及编程原理的理解。

4.理解运行课本中的程序代码。

5.理解“行扫描”法的原理并能进行键值识别和键值编码。

6.理解键盘接线原理图(如图3-1)。

实验箱提供一个16键键盘,用于键盘中断信号的输入。

系统提供两种接线方式: ①当将键盘接入上一排插孔时为固定接线,键盘接线原理图如图3-1所示。

②当将键盘接入下一排插孔时为手动接线,连线的位置在键盘的左边。

二.预习要求1.仔细阅读本实验指导书。

2.复习有关的键盘中断和串行通信接口(SCI )的章节。

3.熟悉GP32键盘模块的工作方法及编程。

4.根据实验内容要求编写好程序,为实验做充分地准备。

行线m 1 m 2 m 3 m 4 接MCU 的PTA 引脚三.实验设备及其连接1.PC机一台2.MT-IDE嵌入式开发系统一台3.串行通信线一根4.小键盘一个5.万用表一个四.实验内容1.理解键盘模块及键盘中断的原理。

2.运行与理解各子程序。

3.主程序运行课本的样例程序。

4.编制一个中断方式的16键键盘程序,使用“行扫描”法识别按键。

采用键盘中断方式。

PTA7-PTA4为列线(输入),定义有内部上拉电阻,PTA3-PTA0为行线(输出),没有内部上拉电阻,允许INTBIER的KBIE7-KBIE4定义为中断输入引脚。

要求按下的一个键的键值和键面定义值(键的ASCII码值)通过串口在PC方软件界面显示,同时用小灯显示按键的键面定义值(键的ASCII码值)。

键盘与MCU的PTA7-PTA0相连。

PTB7-PTB0口与小灯相连。

五.编程提示1.按照结构要求写好编程代码和注释。

2.键盘一般都是矩阵排列的,行和列分别接在MCU的I/O口上,其中列线通过设置内部上拉电阻接+5V,该端口先定义为输入端,行线直接与端口相连,该端口定义为输出端。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOV DS,AX
CMP LOS,9
JA GO2
STI
INC COUNT
CMP COUNT,10
JNE GO2
MOV COUNT,0
MOV SI,OFFSET BUF2
CALL DISP2
INC LOS
GO2: MOV AL,20H
OUT 20H,AL
POP SI
POP AX
IRET
LOSINT ENDP
START: MOV AX,STACK
MOV SS,AX
MOV AX,DATA
MOV DS,AX
MOV AX,0
MOV ES,AX
MOV AX,ES:[70H]
PUSH AX
MOV AX,ES:[72H]
PUSH AX
CLI
MOV AX,OFFSET LOSINT
MOV ES:[70H],AX
MOV AX,SEG LOSINT
MOV ES:[72H],AX
MOV AX,ES:[24H]
PUSH AX
MOV AX,ES:[26H]
PUSH AX
CLI
MOV AX,OFFSET KEYINT
PUSH SI
STI
IN AL,60H
MOV AH,AL
IN AL,61H
OR AL,80H
OUT 61H,AL
AND AL,7FH
OUT 61H,AL
TEST AH,80H
JNE GO1
STI
INC KEY
CMP KEY,10
JA GO1
PUSH BX
PUSH CX
PUSH DX
MOV AH,15
INT 10H
MOV AH,0
INT 10H
MOV CX,1
MOV DX,0
RE: MOV AH,2
INT 10H
MOV AL,0FH
MOV AH,10
INT 10H
CALL DELAY
CLI
MOV SI,OFFSET BUF1
CALL DISP2
STI
GO1: MOV AL,20H
OUT 20H,AL
POP SI
POP AX
IRET
KEYINT ENDP
LOSINT PROC FAR
PUSH AX
PUSH SI
MOV AX,DATA
SUB AL,AL
MOV AH,10
INT 10H
INC DH
ADD DL,2
CMP DH,25
JNE RE
POP DX
POP CX
POP BX
POP AX
RET
DISP1 ENDP
DISP2 PROC FAR
PUSH CX
PUSH BX
AGAIN2: CMP KEY,10
JB AGAIN1
AWAY: CLI
POP AX
MOV ES:[72H],AX
POP AX
MOV ES:[70H],AX
POP AX
MOV ES:[26H],AX
POP AX
MOV ES:[24H],AX
STI
MOV AH,4CH
INT 21H
CODE ENDS
END START
DELAY PROC
PUSH CX
PUSH DX
MOV DX,20000
DL500: MOV CX,2801
DL10MS: LOOP DL10MS
Dห้องสมุดไป่ตู้C DX
JNZ DL500
POP DX
POP CX
RET
DELAY ENDP
DISP1 PROC FAR
PUSH AX
MOV ES:[24H],AX
MOV AX,SEG KEYINT
MOV ES:[26H],AX
STI
MOV KEY,0
MOV LOS,0
AGAIN1: CALL DISP1
CMP LOS,10
JB AGAIN2
JMP AWAY
STACK SEGMENT STACK
DW 200 DUP(?)
STACK ENDS
DATA SEGMENT
COUNT DB ?
LOS DB ?
BUF1 DB "KEY",20H
BUF2 DB "LOS",20H
KEY DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
PUSH AX
MOV CX,3
NEXTC: LODSB
MOV AH,0EH
MOV BX,01
INT 10H
CALL DELAY
LOOP NEXTC
POP AX
POP BX
POP CX
RET
DISP2 ENDP
KEYINT PROC FAR
PUSH AX
相关文档
最新文档