键盘、中断与定时器

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

一、按键输入

一、按键的分类

键盘分编码键盘和非编码键盘。

键盘上闭合键的识别由专用的硬件编

码器实现,并产生键编码号或键值的

称为编码键盘,如计算机键盘.而靠软

件编程来识别的称为非编码键盘;在

单片机组成的各种系统中,用的最多

的是非编码键盘。也有用到编码键盘

的。

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

二、独立按键的检测

当按键没按下时,CPU对应的I/O接口由于内部有上拉电阻,其输入为高电平;当某键被按下后,对应的I/O接口变为低电平。只要在程序中判断I/O接口的状态,即可知

道哪个键处于闭合状态。(如下图所示)

变化与否,得出按键是否被按下,从而做出相

吗?

◎现实并非理想

在我们通过上面的按键检测原理得出上述

的结论的时候,其实忽略了一个重要的问题:

那就是现实中按键按下时候的电平变化状态。

我们的结论是基于理想的情况得出来的,就如

同这幅按键按下时候对应电平变化的波形图一

样。

而实际中,由于按键的弹片接触的时候,

并不是一接触就紧紧的闭合,它还存在一定的

抖动。尽管这个时间非常的短暂,但是对于我

们执行时间以us为计算单位的微控制器来说 ,它太漫长了。于是就会造成上图所示的差

别。

这样便存在这样一个问题。假设我们的系统有这样功能需求:在检测到按键按下的时候,将某个I/O的状态取反。由于这种抖动的存在,使得我们的微控制器误以为是多次按键的按下,从而将某个I/O的状态不断取反,这并不是我们想要的效果。假如该I/O控制着系统中某个重要的执行的部件,那结果更不是我们所期待的。于是乎有人便提出了软件消除抖动的思想,道理很简单,抖动的时间长度是一定的,只要我们避开这段抖动时期,检测稳定的时候的电平不就可以了吗。于是这就产生了一种方法,就是通过延时来跳过这段抖动的时间,而实际上这样的效果还不错。当然,还有其他的消抖方法,同学们请自己思考思考。

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

三、矩阵键盘

1、为什么使用矩阵键盘

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

0xfe低电平

2、矩阵键盘检测原理

一般矩阵键盘的检测方法有以下两种:

方法一:逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。

方法二:行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。

下面给出矩阵键盘逐行扫描函数的一部分(只扫描了第一行的四个按键),其余部分请自行添加,如有不懂的地方先查阅C语言课本或者自行百度。

二、89C51的中断系统

一、中断的概念

CPU在处理某一事件A时,发生了另一事件B的请求(中断请求);

CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);

待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。

运行过程如下图所示:

二、中断系统的结构

引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。

整个中断系统如下图所示:

TCON IE硬件查询

中断源分类

外部中断请求源:即外中断0和1,经由外部管脚引入的,在单片机上有两个管脚,名称为INT0、INT1,也就是P3.2、P3.3这两个管脚。在内部的TCON中有四位是与外中断有关的。IT0:INT0触发方式控制位,可由软件进和置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。这两种方式的差异将在以后再谈。IE0:INT0中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。IT1、IE1的用途和IT0、IE0相同。

内部中断请求源TF0:定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。当CPU响应中断后,再由硬件将TF0清0。TF1:与TF0类似。

TI、RI:串行口发送、接收中断,在串行口中再讲解。

三、中断响应的过程

1、中断响应的条件:讲到这儿,我们依然对于计算机响应中断感到神奇,我们人能响应外界的事件,是因为我们有多种“传感器”――眼、耳能接受不一样的信息,计算机是如何做到这点的呢?其实说穿了,一点都不希奇,MCS51工作时,在每个机器周期中都会去查询一下各个中断标记,看他们是否是“1”,如果是1,就说明有中断请求了,所以所谓中断,其实也是查询,不过是每个周期都查一下而已。这要换成人来说,就相当于你在看书的时候,每一秒钟都会抬起头来看一看,查问一下,是不是有人按门铃,是否有电话。。。。很蠢,不是吗?可计算机本来就是这样,它根本没人聪明。了解了上述中断的过程,就不难解中断响应的条件了。在下列三种情况之一时,CPU将封锁对中断的响应:

CPU正在处理一个同级或更高级别的中断请求。

现行的机器周期不是当前正执行指令的最后一个周期。我们知道,单片机有单周期、双周期、三周期指令,当前执行指令是单字节没有关系,如果是双字节或四字节的,就要等整条指令都执行完了,才能响应中断(因为中断查询是在每个机器周期都可能查到的)。

当前正执行的指令是返回批令(RETI)或访问IP、IE寄存器的指令,则CPU至少再执行一条指令才应中断。这些都是与中断有关的,如果正访问IP、IE则可能会开、关中断或改变中断的优先级,而中断返回指令则说明本次中断还没有处理完,所以都要等本指令处理结束,再执行一条指令才能响应中断。

2、中断响应过程CPU响应中断时,首先把当前指令的下一条指令(就是中断返回后将要执行的指令)的地址送入堆栈,然后根据中断标记,将对应的中断入口地址送入PC,PC 是程序指针,CPU取指令就根据PC中的值,PC中是什么值,就会到什么地方去取指令,所以程序就会转到中断入口处继续执行。这些工作都是由硬件来完成的,不必我们去考虑。中断程序完成后,一定要执行一条RETI指令,执行这条指令后,CPU将会把堆栈中保存着的地址取出,送回PC,那么程序就会从主程序的中断处继续往下执行了。

四、中断的控制

要想控制中断,首先得先了解一个概念——即控制寄存器。

顾名思义,控制寄存器是用于控制和确定处理器的操作模式以及当前执行任务的特性的特殊存储部件,一般由触发器组成,可通过程序来控制。

了解了寄存器的概念,就可以正式接触寄存器的控制了。

1、TCON寄存器

相关文档
最新文档