您当前的位置:五五电子网电子知识电子制作小改-小革关于对89S51单片机开发板读键程序的改进 正文
关于对89S51单片机开发板读键程序的改进

关于对89S51单片机开发板读键程序的改进

点击数:7486 次   录入时间:03-04 12:00:14   整理:http://www.55dianzi.com   小改-小革

  在使用89S51单片机开发板制作智能开关控制器时,发现由厂商提供的读键程序去抖廷日寸操作要独享MCLU运行,造成MCU效率很低。因此,对相应程序加以改进,就可以大大提高MCU的运行效率。
  
  一、硬件电路
  
  下图为智能开关控制器的硬件电路示意图。这里需要关注的是4个按键K1-K4与AT89C51MCU的P3口中P3.0-P3.3相连接。
  
  每个按键都有一个上拉电阻,当键被按下时。
  
  相应MCU的输入为“0”。没有按键时,对应信号为“1”。系统钟频由12MHz石英晶体振荡器产生。

能开关控制器的硬件电路示意图


  
  二、程序分
  
  析厂家提供的读键程序,采用两次读键.中间加去抖延时的办法来实现有效读键。其8051汇编子程序如下。

  上述程序存在很明显的不足,主要体现在其两次读键之间的去抖延时是用循环计数的方法。这种方法在读键时要占用MCU的运行资源,使MCU除了中断操作外,在整个读键过程中不能运行其他程序。这个去抖延时的时间超过240×240个单指令循环l重复运行5万多次单指令),如果利用起来可以运行上万条指令,完全能够实现多数单片机项目全部程序的运行。
  
  为了把这个时间利用起来,可以通过用定时中断来实现去抖延时。这样在两次读键的间隔,MCtJ可以运行其他程序,从而大大提高整个单片机系统的运行效率。

  三、程序改进
  
  
  尽管读键操作的原理没有改变,要改进读键程序,把去抖延时从计数延时换为定时器中断定时。
  
  对原有程序的改动还是相当大的。从已改进程序的原代码长度可以看出,新代码比原来的程序长出两倍以上。
  
  程序的改进主要体现在:
  
  1)去抖延时20ms是利用80C51MCt定时器以定时中断的方法实现。可以采用定时器T0或T1(本程序采用T0】,设为工作方式1,即16位计数器定时工作方式。由于80C51定时计数是递增计数方式,在计数器值超过FFFFH_1时产生中断。对于12M钟频而言,20ms定时的计数常数应为65536一(20×10(注册标识)×12/(12×10(注册商标))):65536—20×10=45536=B1EOI-1。那么设THO=B1H,TLO=EOI。
  
  2)增设多个标志。包括:
  
  ①20ms定时完成标志F_time一20ms。20ms定时完成后设定为“1”。然后进行第二次读键。
  
  ②读键操作标志F_key—read。完成第一次读键操作后,标志设定为“1”,等待20ms定时完成后。进行第二次读键。
  
  ③执行按键操作标志F-key—opte—run。确定有效按键后,标志设定为“1”,进行相应按键功能处理。在执行这一按键处理操作时,系统不再进行新的读键。
  
  ④按键操作结束标志F_key—opte_end。某一按键处理操作结束时,标志设定为“1”。系统可以进行新的读键操作。
  
  运行时,在第一次读键之后启动20ms定时。定时完成后产生中断,设置20ms定时完成标志。当循环运行的读键程序发现20ms定时完成标志为“1”。
  
  则进行第二次读键操作。如果两次读键都读到相同的键,就可以确定按键有效,进行相应的处理操作(源代码中的Key一Functoin)。需要注意的是。为避免运行混乱,本程序设计限定MCU正在执行某一按键处理操作时,不响应新的读键操作。




本文关键字:单片机  程序  开发  小改-小革电子制作 - 小改-小革

《关于对89S51单片机开发板读键程序的改进》相关文章>>>