您的位置 首页 解答

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

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/changshang/jieda/298804.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部