四川工程职业技术学院《单片机应用技术实验指导书》
实验九 键盘中断实验
一、实验目的
键盘/按键是操作人员向单片机系统输入指令的基本工具,在前面的实验中我们已经多
次使用了按键。键盘/按键在编程时可以用查询或中断的方法来检测按键是否按下。其中,
中断方式可以优化单片机的运行,并能快速做出反应,且可靠性较高。本实验要求大家用
中断方式编写按键检测程序,该程序可以用于各种需要中断键盘/按键的场合。实验中需要
掌握以下知识要点:
1.复习中断程序的编写格式及特殊功能寄存器的使用。
2.中断程序的编写格式。
3.中断程序的调试方法。
4.多个按键中,判断具体按下键的分析方法。
二、实验预备知识
1.中断程序的编写方法
普通的 MSC-51 单片机有 5 个中断源,每个中断有自己的中断程序入口,在汇编语言
中具有中断的程序编写格式如下:
ORG 0000H
SJMP MAIN
ORG 0003H ;INT0 中断入口
LJMP INT0IN
……
……
ORG 0030H ;主程序起始地址
MAIN: MOV IE ,#01H ;主程序部分
……
……
INT0IN:…… ;中断服务程序主体部分
……
RETI ;中断返回指令
END
中断程序的入口就是中断服务程序的首地址,MSC-51 系列单片机的各中断入口地址
是固定的。INT0 的中断入口是 0003H,其中断服务程序就必须从 0003H 单元开始,在实
际编程中,为了不占用其它中断的入口,一般在入口处放一条跳转指令,而把中断服务程
序主体放到其它地方。上面的程序就是采用的这种方法。
单片机在运行过程中,只有发生中断后才能运行中断服务程序,而不能直接运行到中
断程序中。单片机复位后,从 0000H 单元开始运行程序,为了避免单片机直接运行到中断
版权所有:四川工程职业技术学院单片机应用技术精品课程组电话:0838-2652710 http://mcu.scetc.net 42
四川工程职业技术学院《单片机应用技术实验指导书》
程序中,所以采用了 SJMP MIAN 指令,跳过中断入口,进入主程序中。
程序中有中断程序时,主程序的起始地址应设置在中断入口区后面。在 MSC-51 单片
机中,中断入口区是 0003H~002FH。在以前的实验中没有用到中断,因此主程序的起始地
址可以是 0000H。在主程序中要对中断进行设置并开中断。中断程序一般写在主程序的后
面,但在主程序中不能直接跳转到中断程序中。
2.中断键盘的结构和使用
在使用按键的程序中,要判断按键是否按下,需要对按键所接的端口状态进行判断。
如果需要按键后立即响应,则程序要不停地查询端口状态,这样会大量占用单片机的运行
时间,使其它程序的运行受到限制。在实际使用的单片机系统中,操作人员使用按键的次
数和时间是非常有限的。在单片机系统中较多采用中断键盘,即:单片机平时不用查询按
键状态,而在按键按下后产生中断,在中断程序中判断按键是否按下和哪个按键按下。简
单中断键盘的电路如下:
图 3-11 中断键盘电路图
没有按键按下时,键盘的 INT 端为高电平,如果 K1~K4 中任何一个按键按下,
INT 端变成低电平。把 INT 端接单片机的 INT0 或 INT1 端就可以产生中断,在中
断程序中读入按键所接端口的状态,就可以判断出那个按键被按下。
3.中断键盘编程
以图 3-11 的电路为例,假设按键接 P1.0~P1.3,INT 端接 INT0(P3.2),键盘中
断程序如下:
KEYBOARD:PUSH ACC ;保护现场
LCALL DELAY ;有键按下,调延时去抖动
MOV A ,P1 ;读入按键端口状态
ANL A ,#0FH ;屏蔽无效位
版权所有:四川工程职业技术学院单片机应用技术精品课程组电话:0838-2652710 http://mcu.scetc.net 43
四川工程职业技术学院《单片机应用技术实验指导书》
CPL A ;取反
JZ EXIT ;如果按键端口均为 1,则退出
CJNE A ,#01H,NEXT ;判断是否是 K1 按下
SJMP K1 ;执行 K1 按下的操作
NEXT:CJNE A ,#02H,NEXT1 ;判断是否是 K2 按下
SJMP K2
NEXT1:CJNE A ,#04H,NEXT2
SJMP K3
……
K1:…… ;K1 按下要执行的程序
……
SJMP EXIT
K2:…… ;K2 按下要执行的程序
……
EXIT:POP ACC ;恢复现场
RETI
在主程序中要根据所连接的中断端设置与该中断相关的特殊功能寄存器。
中断程序中要保护一些在主程序使用,并在中断程序中也被使用的存储单元的数据,
叫做“保护现场”。在退出中断时要恢复这些单元的内容,使主程序能接着中断前的状态
运行,这种操作叫“恢复现场”。保护现场和恢复现场一般通过堆栈操作来实现,保护现
场时将相关单元依次入栈,恢复现场时将它们按于入栈相反的顺序依次出栈。在实际编程
中,那些单元的数据需要保护要根据需要而定。
4.中断程序的调试方法
在前面讲述中,当有按键按下时单片机应该执行一定的操作。当按下按键后如果没有
相关操作,则我们很难判断问题是出现在主程序还是中断服务程序。
调试中断程序时最好的方法是采用断点运行的方法。在中断服务程序的开始语句处设
置断点,如果主程序中中断设置正确,则按下按键以后程序就会在断点处停止,然后再通
过单步运行检查中断服务程序。如果按下按键后程序不在断点处停止,说明该中断没有产
生,主程序或硬件电路出了问题。
三、硬件连接
使用键盘显示模块,直接插在 J12 和 J13 上即可。根据电路图确定 K1-K4 所连接的 I/O
口和所使用的中断端。
四、实验内容
1.利用按键控制显示,要求按下 K1 显示“1”,按下 K2 显示“2”,按下 K3 显示“3”,
按下 K4 显示“4”。
在按键显示模块的四个数码管的位选是 P3.2~P3.5,在使用外中断时要占用 P3.2 或
P3.3,因此显示时只能采用 P3.4 和 P3.5 作为位选。
版权所有:四川工程职业技术学院单片机应用技术精品课程组电话:0838-2652710 http://mcu.scetc.net 44
四川工程职业技术学院《单片机应用技术实验指导书》
编程时,选择一个数据寄存器(如 30H)作为主程序和中断服务程序间的数据交换单
元,主程序显示该单元的内容,而中断程序根据不同的按键修改其内容。主程序中除了初
始化程序外就是动态显示程序,动态显示程序的编写方法参照实验五。中断程序的结构框
图如图 3-12 所示。流程图中判断是否为抖动就是去抖动。30H 单元中存放需显示的数据,
主程序显示该单元的内容即可。由于 30H 单元用于实现主程序和中断程序间的数据交换,
因此就不能被保护。
保护现场
是
是否为抖动
否
读入按键端口状态
屏蔽无效位
取反
是否等于 1
否
是否等于 2
否
是否等于 4
否
是
是
是
MOV 30H,#04H MOV 30H,#03H MOV 30H,#02H MOV 30H,#01H
恢复现场并返回
图 3-12 中断程序流程图
五、扩展内容
利用键盘显示模块,编程实现以下功能:
一个数码管轮流显示 1~9,每隔 2 秒钟加 1,当按下 K1 后显示“F”,5 秒钟后返回。
要求分别使用中断和查询方式判断按键,并比较运行时有何差别。
六、思考题
1.分析用中断和查询方式编写的键盘程序在运行时会出现什么区别?
版权所有:四川工程职业技术学院单片机应用技术精品课程组电话:0838-2652710 http://mcu.scetc.net 45
四川工程职业技术学院《单片机应用技术实验指导书》
2.当单片机进入中断后,其 SP、PC 等特殊功能寄存器的内容会发生什么变化?
3.中断程序保护现场有何意义?
4.在程序中,读入按键端口状态后为什么要取反?
版权所有:四川工程职业技术学院单片机应用技术精品课程组电话:0838-2652710 http://mcu.scetc.net 46