赵启焱
(郑州大学 机械工程学院,河南 郑州 450001)
汇编语言是面向机器的,所以可以保持对机器的语言一致性,并能直接的在编程中定义对计算机的各种硬件设备的访问和控制。使用汇编语言,可以访问所有能够被访问的软、硬件资源。并且其程序代码简洁,内存占用少,执行速度快,是一种高效的程序设计语言;由于汇编语言是一种低级语言,而且其语法和代码不如其他高级语言丰富,所以在面对具体的硬件控制需要时,就要有巧妙的程序算法来满足需要。本文就利用8255对多个按键的脉冲输入进行判断和定位的一种汇编语言算法进行讨论。
循环式程序和分支程序均是汇编语言中的基本程序结构。正确的利用它们有助于缩短程序,提高程序质量。在利用可编程并行接口8255A进行多个脉冲输出,单个脉冲输出时判断按键是否接通的情况下,就需要有技巧性的运用上述两种基本程序结构,下面是一个具体应用的例子:
如下图所示电路图,8255以由控制字定义为四个B口输出电信号,只有一个A口接受电信号,需要编写相应的汇编程序对四个按键中哪个按键按下进行判断:
针对此具体要求,编写程序段如下:
PRESPROCNEAR
MOV CL,11111110B;将电位信息装入寄存器CL中
P1: MOV AL,CL
OUT DH,AL;送数到B口
IN AL,DL;从 A 口读入
TEST AL,01H;测试从A口读入的数是否为0
JZ F;读入值为0则跳转
RO LCL,1;不为0则将初始电位信息循环移位
JMP P1;跳转至程序开始循环执行
F:MOV AL,CL;则记录此时电位信息
NOT AL;将电位信息求反
RET;子程序结束
PRESENDP
采用此子程序可以在最多8个按键上形成扫描电压,当其中某一个键按下是,电路接通,0电位信息传入8255的A口中,同时停止扫描,将此时的电位信息求反并作为此子程序的返回值,通过此返回值即可确定是哪一个按键被按下。
本文所讨论的问题的难点就在于8255有四个并行接口输出电信号,但只有一个输入接口来判断是否有按键按下,同时按键按下时只是一个短暂的脉冲信号,所以针对这种情况,就利用8255的并行输出在四个B口输出一个快速循环扫描的数字信号,然后在任一个按键按下的瞬间,程序即检测到并将结果存于通用寄存器中,从而实现按键位置的判断。
由于此系统所使用的CPU的主频的限制,所输出的扫描信号有一定的延时性,所以不适用于需要快速进行判断的场合,但在由人工进行控制时,启反应时间已足够保证满足要求。
利用可编程并行接口8255对多个按键的脉冲输入进行判断和定位在伺服系统具有广泛的应用,本文所提供的方法具有很好的借鉴意义,同时对于通过按键进行各种电气元件的控制时,本文所提供的按键扫描程序有着反应快速,执行效率高的优点,对汇编语言的编程算法技巧方面有一定的补充和贡献。
[1]孙俊杰,任天平,白国长,门茂琛.微型计算机原理及应用[M].郑州:郑州大学出版社,2005:165-180.
[2]黄惟公,邓成中,王燕.单片机原理与应用技术[M].西安:西安电子科技大学出版社,2012:164-168.