实验六 74LS273扩展I/O口实验
1、编写程序,以74LS273作为I/O口,控制8个单色LED灯。I/O端口号为168H。
原理分析:
① 74LS273为锁存器,可以作为I/O数据寄存器保存CPU与外设之间的传送数据。D0-D7是数据输入端口,Q0-Q7是数据输出端口,8个数据输出可以分别连接8个单色LED灯。CPU通过控制D0-D7从而达到控制锁存数据Q0-Q7输出的目的。CPU输出与8个LED状态的关系见表1,8个LED的编号见图1。
![](https://img-blog.csdnimg.cn/20210125123932666.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ3OTEyMDcy,size_16,color_FFFFFF,t_70)
② I/O端口号为0168H,当地址线A15-A0为0000 0001 0110 1000时选中74LS273,此时D0-D7数据线上数据便可以输出。译码电路的作用就是当A15-A0这16根地址线中的A3,A5,A6,A8为1,其余为0时,允许数据输出。
③ 8个LED灯采用共阳极接法,阳极通过电阻后接电源,阴极需要给低电平才能够导通,这就对应了表1中的数据Q0-Q7输出。LED灯接法见图1:
![](https://img-blog.csdnimg.cn/20210125124113916.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ3OTEyMDcy,size_16,color_FFFFFF,t_70)
④ 对于延时问题,采用程序循环方式实现:
MOV CX,0E000H
LOOP $
LOOP $ 的作用是一直执行当前指令(即LOOP指令),可以用来延时。每执行一次LOOP指令,CX自动减1。
电路连接图:
![](https://img-blog.csdnimg.cn/20210125124502744.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ3OTEyMDcy,size_16,color_FFFFFF,t_70)
汇编代码:
IO0 EQU 0168H
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX,IO0
MOV AL,0FEH
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,0FDH
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,0FBH
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,0F7H
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,0EFH
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,0DFH
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,0BFH
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,07FH
OUT DX,AL
MOV CX,0E000H
LOOP $
JMP START
CODE ENDS
END START
实验部分过程截图:
![](https://img-blog.csdnimg.cn/20210125124923118.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ3OTEyMDcy,size_16,color_FFFFFF,t_70)
2、设计一七段LED数码管显示电路,编写程序,实现在数码管从0-9的循环显示。(可使用74LS47作为LED的显示译码)要求循环速度可调,即显示间隔可变。
原理分析:
同第一部分,采用74LS273做I/O接口数据锁存器,默认I/O接口地址为0168H。
74LS47的功能是将BCD码数字直接转化成七段数码块中的数字。74LS47引脚见图2,七段数码管见图3。向74LS47的DCBA四个端口输入0-9的二进制数,QA-QG对应的输出见表2,默认LT和BI为无效状态。
数码管采用共阳极接法,当a-g对应输入端口输入低电平时,对应的数码管亮。反之,输入为高电平时,对应的数码管熄灭。
![](https://img-blog.csdnimg.cn/20210125125218676.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ3OTEyMDcy,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20210125125350247.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ3OTEyMDcy,size_16,color_FFFFFF,t_70)
将74LS273的Q3-Q0分别连接到74LS47的DCBA,将74LS47的QA-QG分别连接数码管。Q3-Q0从0000B到1001B变化,数码管上就可以显示0-9的数字。那么,通过控制AL的值,从而控制D0-D7从00H到09H变化,即可完成题目要求。
显示间隔采用控制程序循环次数实现:
MOV CX,0E000H
LOOP $
通过改变CX的值,从而改变显示间隔。
电路连接图:
![](https://img-blog.csdnimg.cn/20210125125606802.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ3OTEyMDcy,size_16,color_FFFFFF,t_70)
汇编代码:
IO0 EQU 0168H
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX,IO0
MOV AL,00H ;数码管显示0
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,01H ;数码管显示1
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,02H ;数码管显示2
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,03H ;数码管显示3
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,04H ;数码管显示4
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,05H ;数码管显示5
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,06H ;数码管显示6
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,07H ;数码管显示7
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,08H ;数码管显示8
OUT DX,AL
MOV CX,0E000H
LOOP $
MOV AL,09H ;数码管显示9
OUT DX,AL
MOV CX,0E000H
LOOP $
JMP START
ENDLESS:
JMP ENDLESS
CODE ENDS
END START
实验部分过程截图:
![](https://img-blog.csdnimg.cn/20210125130045204.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ3OTEyMDcy,size_16,color_FFFFFF,t_70)