您的位置 首页 应用

单片机学习之十一:中止方法按键

1、实验现象最右面的数码管初始显示0,每次按下外部按键K0执行加一,计数到九时重新回零。2、实验目的掌握中断方式响应按键的原理掌握中断…

1、实验现象

最右面的数码管初始显现0,每次按下外部按键K0履行加一,计数到九时从头回零。

2、实验意图

把握中止办法呼应按键的原理
把握中止服务程序的具体编写:怎么进行键的辨认,怎么去颤动

3、实验任务剖析

上一个实验咱们了解了查询办法按键的原理。当单片机作业于查询办法的时分,要不连续的对外部按键进行查询,其间单片机不精干其他的任何作业。假如单片机的作业量较大,这种办法就很难习惯。

为了进一步进步单片机的作业效率,能够选用中止办法。
中止办法的按键呼应进程如下:单片机处理自己的作业,假如有按键按下,向单片机宣布中止恳求,单片机就会停下现在正在处理的作业,转去履行中止程序,履行之后回来持续方才的作业;假如没有按键按下,单片机就作自己的作业,不答理外部键盘。

怎样向单片机宣布中止恳求呢?宣布中止恳求的来历叫做中止源。单片机可提供五个中止源。其间2个为外部中止恳求INT0和INT1,2个为片内守时/计数器T0和T1的计满溢出中止,还有一个是片内串行口中止恳求TI或许RI。在本实验中,咱们用到的是外部中止INT1。

仍是先看看电路吧。(注意在作中止实验之前,咱们有必要先把JMP4跳线插上,这样按键动作才干宣布中止恳求。)

咱们在实验一中从前给咱们介绍过,单片机的P3口是双功用口,第一种功用能够作通用的I/O口。而在本实验中,咱们要用到P3口的第二功用。咱们看P3.2和P3.3两个引脚,斜线后边标明的便是P3口的第二功用,别离是INT0和INT1,也便是单片机的两个外部中止源。

咱们发现,当任何一个按键按下的时分,P3.3引脚,即INT1上就会呈现一个低电平,向单片机宣布中止恳求。假如单片机敞开了外部中止,就呼应中止恳求,进入中止服务程序。
那么单片机是否敞开中止功用是由什么操控的呢?在这儿就涉及到别的一个特别功用寄存器IE啦。还记得单片机内部256字节的数据RAM吗?其间高128字节(80h~ffh)是特别功用寄存器区。曾经咱们介绍过PSW就在这个区域,相同IE也在这个区域,它的姓名叫做“中止答应寄存器”,专门担任程序是否呼应中止的,它的各位功用阐明如下:
EA:CPU中止答应标志。EA=0,CPU制止各种中止;EA=1,CPU敞开中止。可是,每个中止源的中止恳求是否答应,还需求由各自的答应位决议。所以在本程序中,咱们不要忘了首要把EA置1哦!

ES:串行口答应中止。ES=1,答应串行口中止;ES=0,制止串行口中止。所以,在这个程序中,这一位和咱们没有联系,不睬它便是啦。

ET1:守时器/计数器T1的溢出中止答应。ET1=1时,答应T1溢出中止;ET1=0时,制止T1溢出中止。相同,这一位和咱们也没有联系。

EX1:外部中止1(即INT1)答应中止。当EX1=1时,答应INT1中止;当EX1=0时,制止INT1中止。可见,这一位的值和咱们这个实验密切相关,所以咱们千万不要忘了把这一方位1。

下面的ET0和EX0的功用与ET1和EX1相似,是别离操控守时器T0和外部中止INT0的,这儿就不再赘述啦。

在前面剖析时,咱们发现,四个按键中任何一个按下,都会宣布中止恳求。那么,怎么判别中止恳求是由那个按键宣布的呢?这便是中止服务程序的作业了。在中止服务程序中,需求完结如下作业:键辨认、去颤动、和键功用途理。
那么,键辨认是怎么完结的呢?它的思路是这样的。
(1)、先把P1口的状况读入a寄存器,然后把高四位屏蔽掉
(2)、判别是否k0按键按下,(即判别a中的数是否00001101),假如是就调用延时程序去抖,不然,表明不是K0按下,退出中止回来主程序
(3)、调用延时程序后,重复上面的(1)(2)步。假如确认k0按下,转中止服务程序,不然便是颤动,退出中止回来主程序。

在这儿还需求阐明一点:在进入中止服务程序之后,咱们首要应该封闭中止,因为假如不封闭中止,就有或许会引起紊乱。在中止服务程序回来主程序之前,再把中止翻开。
4、实验程序
org 0000h
ljmp start ;(1)为什么这儿要放一条跳转指令呢,咱们在后边解说把

org 0013h
ljmp ext1 ;(2)同上

org 0030h
start: clr p1.5 ;主程序开端
mov r7,#0ffh
setb ea ;cpu敞开中止
setb ex1 ;答应外部中止1恳求中止
setb it1 ;(3)设置外部中止1触发办法为跳变触发,原因在后边具体解说
lcall play1 ;调用初始状况显现子程序
ajmp $ ;等候按键宣布中止恳求

ext1: clr ea ;进入中止,先封闭中止
lcall key_reader ;调用键辨认子程序
pass: setb ea ;回来主程序之前先开中止
reti ;(4)中止回来指令,

key_reader: mov a,p1 ;读入P1口的状况
anl a,#0fh ;屏蔽高四位
cjne a,#0dh,pass;假如a的内容不是00001101(表明不是k0按下),就退出中止
lcall del10ms ;不然,表明k0按下,调用10ms延时去抖
mov a,p1 ;再次读入p1口的内容
anl a,#0fh ;屏蔽高四位
cjne a,#0dh,pass ;假如a的内容不是00001101,便是颤动,退出中止
lcall play2 ;不然,确认按键按下,转数码显现程序
ret

play1: mov a,#48h ;让最右面的数码管显现0的子程序
mov p0,a

mov p2,#01h;
ret

play2: inc r7 ;查表求段码,然后送到P0口的子程序,咱们很熟了
mov a,r7
mov dptr,#tab
movc a,@a+dptr
mov p0,a
mov p2,#01h
cjne a,#48h,next;假如没有显现到最终一个数字0,就持续查表显现
mov r7,#0ffh ;不然,从头从表头开端显现
next: ret

del10ms: mov r5,#10 ;延时10ms子程序
del1: mov r4,#02h
del2: mov r3,#0ffh
del3: djnz r3,del3
djnz r4,del2
djnz r5,del1
ret
tab: db 0ebh,52h,62h,0e1h,64h,44h,0eah,40h,60h,48h ;寄存0~9的段码表
end

信任经过上面的具体注释,咱们基本上现已看懂这个程序了。下面我就几个小问题再给咱们作一些解说。

5、注释

1、先看(1)句子,咱们发现程序开端的时分,在地址为0000h的当地,放了一条跳转指令。主程序是从程序存储器中0030h的当地开端寄存的,为什么要把前面的空间空出来呢?这是因为前面的空间咱们是有用途的。

因为不同类型的中止,具有不同的中止进口地址。CPU在呼应中止的时分,会依据中止源的类别,转到相应的进口去履行中止服务程序。外部中止1的进口地址是0013h(其他4个中止的进口地址咱们能够查阅相关材料),那么cpu在呼应了外部中止1后,会主动的到这个地址来,从这个地址开端往下履行程序。所以咱们要把前面的一段空出来,避免掩盖这个地址。

2、再看看(2)句子,它在中止1的进口处放了一个跳转指令,所以,cpu在呼应外部中止后,会到这个进口处往下履行程序。所以CPU就会从这儿转去中止服务程序。咱们或许会说,为什么要跳转,直接从这儿开端寄存中止服务程序 不就能够了嘛。

因为咱们很难意料中止服务程序的长度,所以咱们就拿禁绝主程序应该从什么单元开端寄存。这样就简略形成整个程序的结构紊乱。
所以仍是选用上面的办法吧,看起来结构清楚标准,简略了解。

3、(3)句子的意思是设置外部中止1为跳变办法触发。咱们或许觉得,当K0按下的时分,INT1上会呈现一个低电平,为什么不能选用电平办法触发呢?解说如下:当咱们选外部中止为电平办法触发的时分,当INT1输入低电平的时分,cpu呼应中止。在中止回来之前,INT1有必要回到高电平,不然就会第2次发生中止。所以,假如咱们按下按键的时刻较长,就会发生屡次的中止,导致程序紊乱。所以咱们在这儿要选用边缘办法触发。

趁便说说it1,它是外部中止触发办法操控位,为1的时分挑选跳变办法触发,为0的时分挑选电平办法触发。那么它在哪里呢?

it1是tcon寄存器其间的一位,tcon和咱们知道的psw,ie相同,也是一个特别功用寄存器。方位当然也在特别功用寄存器区啦。

TCON是守时器/计数器(T0,T1)的操控寄存器,关于它的使用咱们今后经过比如具体阐明。它的各位的功用阐明如下:

TF1:守时器/计数器(T1)的溢出中止标志,当T1发生溢出试,由硬件置1,CPU呼应中止后,由硬件置0;TF0相似。(今后经过实验具体阐明)

TR1:置1时发动守时/计数器,置0时中止守时/计数器;TR0相似。(今后经过实验具体阐明)

IE1:外部中止1恳求标志。当它置一的时分,恳求中止。

IT1:外部中止1触发办法操控位。假如IT1是1,则外部中止为跳变办法触发,不然,为电平办法触发。挑选何种办法触发,视程序的具体情况来定。

IE0:外部中止0恳求标志,意义同IE1。

IT0:外部中止0触发办法操控位,意义同IT1。

4、句子(4)是中止回来指令,功用和子程序回来指令ret相相似,通常被安排在中止服务程序的最终。CPU履行完这条指令后,从本来被中止处开端,从头履行被中止的程序。

现在咱们对中止的基本概念和简略的编程处理办法有所了解了把,下面一个实验“按键操控跑马灯”,在这个实验里边,咱们要了解关于中止现场维护的问题。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/266861.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部