题目:
讲解部分:
一、连接思路
程序开始后,先定位到开关接口的地址,从连接开关的接口读入开关的输入数据。
接下来,定位到LED灯的接口地址,传出数据使相应的LED灯点亮。
其中,接口的位置与数据锁存使用74HC245芯片,CPU指令锁存采用74HC373芯片,译码器采用74LS138芯片,并利用或非门来构建连接逻辑关系。
二、芯片与原理讲解
先放一张全图~


输入:RP1用来提供高电势,配合DSW1实现开关信号的产生。我们发现开关打开时,该路接地,则向外输出低电平。如图中例,输出的信号为01010001。
74HC245:作为锁存器和接口,当芯片的19号引脚为高电平时数据传递方向为A-B,为低电平时数据传递方向为B-A。如将A连接CPU部分,B连接外设,则在作为输入接口时,19应该出0,作为输出接口时,19应该出1。
输入接口74HC245:观察发现,当CE输入低电平时,芯片被触发,将开关信号数据从B端传入A端连接的数据指令线。
74HC373:与74HC245类似,1号引脚输入低电平时,数据由D侧输入,向Q侧传出。
输出接口74HC373:当OE输入低电平时,芯片被触发,将数据从D端连接的数据指令线传入Q端。这里我们发现,芯片的输出端口是对着LED的阴极的,因此需要输出低电平点亮LED。结合输入端口的逻辑,我们只需将输入的数据信号传给输出即可实现——开关打开,LED亮,开关关闭——LED灭。
CPU指令锁存74HC373:当OE输入低电平时,CPU指令线上的信号从D端传到Q端,通过Q端连接的片选器来寻找输入输出接口。
片选器74LS138:E1高电平,E2和E3低电平时有效,输入的ABC为二进制对应Y0到Y7,如CBA为 110时,对应十进制为6,即触发Y6引脚出低电平。片选器通过输入的ABC信号来选取对应的接口地址。
由于READ的片选地址Y5为101,WRITE的片选地址为110,我们可以确认输入端D4到D7的数据,并将其余位补0,作为接口地址信号(为之后汇编代码用)。
我们再看一遍全图,这次从CPU开始,CPU想先读取开关信号,于是他传指令,通过指令锁存器和译码器选择输入接口,Y5出0后经过上方逻辑门使得U3(输入接口)的10号引脚为0,传入数据开关信号。接下来,传入的数据被存在CPU寄存器里,CPU再去传出指令去给LED写入数据,于是他又传指令,选择输出接口并通过低位数据线传出寄存器内保存的开关信号数据,使LED点亮。为此,我们可以写出汇编指令。
三、汇编指令
.MODEL SMALL
.STACK
.DATA
INPUT EQU 0D000H
OUTPUT EQU 0E000H
.CODE
.STARTUP
START:
MOV DX,INPUT
IN AL,DX
MOV DX,OUTPUT
OUT DX,AL
JMP START
.EXIT 0
END
这里采用了简化的汇编。我们先在数据段放上输入和输出的地址,即刚刚译码器Y5和Y6的地址,0D000H和0E000H。接下来我们先用IN指令传入输入信号(开关信号),并将开关信号数据存入AL,接下来我们读取LED地址,并将AL上的数据传出给LED,实现对灯的开闭。汇编核心代码就是输入和输出的4行。
效果图如上。
题源来自于南京农业大学汇编语言和微机原理实验题一。
注:如本文出现漏洞,欢迎评论联系作者修改。