8255接口实验

一、实验目的

1、掌握Proteus软件绘制原理图的方法和仿真过程。
2、掌握74LS273带清零的八位D型触发器地址译码器芯片和74LS154四-16线数据选择/多路复用器芯片的使用方法
3、掌握Proteus软件的MASM32编译器编写汇编程序和代码的调试。
4、掌握8086芯片的使用和汇编语言的编写。

二、实验内容和实验原理图

实验1:基于8086的外围电路的情况下,通过地址译码,在74LS273地址译码器芯片中,依次输出每一位灯的状态,在下面的16个灯中,实现流水灯的效果。
在8086芯片中编写汇编语言,注意将芯片开始的起始地址设置为10000H,此时代码才可以正常运行。
实验1原理图:
在这里插入图片描述

在这里插入图片描述

实验2:在基于实验1的基础上,使用8255A可编程接口芯片PA口作输入口,检测8个按键状态,PB口作输出口,显示按键状态。当按键按下时,有对应的灯泡状态输出,显示按键的情况。在8086芯片中编写汇编语言,注意将芯片开始的起始地址设置为10000H,此时代码才可以正常运行。
实验2原理图:

在这里插入图片描述

实验3:使用8255A可编程接口芯片的PA口作8位共阴极LED数码管的段码输出端口,PB口用作8位LED数码管的位控码输出端口,PC0用作独立式按键的输入检测端口。8位LED初始显示为76543210,每按下一次按键,LED数码管的数字向左循环移动一位。在8086芯片中编写汇编语言,注意将芯片开始的起始地址设置为10000H,此时代码才可以正常运行。
实验3原理图:

在这里插入图片描述

注意:实验2和实验3都是以实验1外围电路输出来控制后续的模块显示。

三、实验步骤:

1、对于实验1,需要首先布置8086芯片、74LS273、74LS154、74LS27,灯泡等等大型元器件。
2、按照实验讲义的原理图的连接,将各个元器件的引脚进行连接,注意不要连接错误。
3、之后,连接总线,将各个连接线进行网络标号,从总线中分出子线,进而完成整体的连接。
4、对于实验2,首先需要布置8255A芯片,注意要和8086在同一个工程文件里面。进而,连接总线,开关,灯泡,进行网络标号,完成设置即可。
5、对于实验3,首先需要布置8255A芯片,注意要和8086在同一个工程文件里面。之后,布置8段的共阴极数码管,进行网络标号,加上开关,便可以完成原理图的设计。
6、此后,进行代码的编写,分别针对实验1、2、3进行代码的设计,针对流水灯,按键利用灯泡来显示按键的状态,数码管移位的操作。
7、实验代码的仿真,进行具体的程序测试,完成实验的内容。

四、实验代码:

实验1流水灯代码:

.MODEL SMALL
.8086
.STACK
.CODE
.STARTUP
START:   ;此处输入代码段代码
	MOV DX,0200H      ; 74LS273芯片的地址
	MOV AX,0FFFFH     ;高电平,此时16个LED全灭。
	OUT DX,AX
	MOV AX,0FFFEH    ;首先控制11111110,后续进行0的左移
LOOP1:
	ROL  AX,1H      ;AX里的数进行循环左移 
	OUT DX,AX       ; 将AX的值输出到DX
	LOOP $          ;延时
	LOOP $
	JMP LOOP1        ;无限循环
    MOV AH,4CH
    INT 21H
END 	

实验2按键状态利用灯显示 代码:

.MODEL SMALL
.8086
.STACK
.CODE
.STARTUP
START:    
     MOV DX,206H        ;控制字寄存器端口
     MOV AL,10011001B   ;方式控制字1、A方式0基本输入和输出00、A输入1;PC7~4为输入1、B方式0基本输入和输出0、B输出0、PC3~0为输入1
     OUT DX,AL           ;初始化端口,设置输入和输出口
NEXT:   
     MOV DX, 200H       ;A口读取
     IN AL, DX          ;读A口操作
     MOV DX, 202H       ; B口输出
     OUT DX, AL         ;写B口操作
	 JMP NEXT           ;跳转,持续进行    
     MOV AX, 4CH
     INT 21H
END 	

实验3数码管按键移位代码:

DATAS SEGMENT
    BUF DB  007H,07DH,06DH,066H,04FH,05BH,006H,03FH
DATAS ENDS
.MODEL SMALL
.8086
.STACK
.CODE
.STARTUP
START:
     MOV DX, 206H    ;写入方式控制寄存器
     MOV AL,089H  ;设置工作方式,AB输出,C输入
     OUT DX,AL   
xunhuan0:  
	 MOV CX,008H ;总共8个数字
     MOV AH,07FH ;位选0111 1111
     LEA BX,BUF  ;指针指向数据表首址
xunhuan1:   
	 MOV DX,202H  ;指向端口B
     MOV AL,AH    ;第一个数字位控
     OUT DX,AL
     MOV DX,200H  ;指向端口A
     MOV AL,[BX]  ;第一位数字段码
     OUT DX,AL
     
     MOV DX,CX    ;延时
     MOV CX,000FFH
     LOOP $
     MOV CX,DX
     
     INC BX    ;指针指向下一位
     ROR AH,1  ;移位下一个数字位控
     LOOP xunhuan1 ;循环显示,人眼看到八个数字
     
     MOV DX,204H    ;指向端口C
     IN AL,DX       ;读取按键状态
     CMP AL,0FEH    ;判断按键是否按下
     JZ xunhuan2    ;按下就跳转
     JMP xunhuan0   ;没按下则继续显示当前数字
xunhuan2: 
     MOV DX,204H  ;按键消抖
     IN AL,DX     ;读入按键
     CMP AL,0FEH  ;判断按键是否释放
     JZ xunhuan2  ;未释放就一直跳转
     
     LEA BX,BUF   ;指针指向数据表首地址
     MOV CX,007H  ;设置移位循环次数
     MOV AL,[BX]  ;保存初始地址
xunhuan3:   MOV AH,[BX+1];取出下一位数字的值
     MOV [BX],AH  ;段码送出
     INC BX      ;地址+1
     LOOP xunhuan3; 
     MOV [BX],AL ;一轮之后恢复初始
     JMP xunhuan0  ;回到循环1再次检测按键
     
    MOV AX,4CH  ;结束
    INT 21H
     END
ENDLESS:
        JMP ENDLESS
CODE    ENDS
        END START

五、实验结果:

根据端口地址译码电路,各I/O端口地址情况:
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 十六进制地址
IO0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000H
IO1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0200H
IO2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0400H
IO3 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0600H
IO4 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0800H
IO5 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0A00H
IO6 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0C00H
IO7 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0E00H
IO8 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1000H
IO9 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1200H
IO10 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1400H
IO11 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 1600H
IO12 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1800H
IO13 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 1A00H
IO14 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1C00H
IO15 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 1E00H
实验1流水灯现象:
在程序启动之后,16个灯泡将会从上到下依次进行循环流动,进行闪亮。当执行完成一轮16个灯的循环之后,将会从最开始,重新进行循环点亮。
在这里插入图片描述
在这里插入图片描述
实验2按键状态灯的显示现象:
由于我在实验的过程中,芯片端口初始输出为高电平,灯采用共阴极接法,因此灯会首先全部亮起。之后,在对应的按键按下时,灯泡会熄灭,再按一下,灯会亮起,其他的七个灯现象相同。

在这里插入图片描述
在这里插入图片描述
实验3数码管移位的现象:
在初始程序运行时,可以看到,在数码管上面显示数字76543210,当按下按键之后,数码管上面的数字排列会变成65432107,数字整体向左边移位,数字7移位到最右边。此后,多次按下按键,数字按照同样逻辑变成43210765,10765432,最后变为76543210,再次开始新的一轮循环。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jerry独爱电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值