一、实验目的
通过对并行接口8255编程、调试,进一步熟悉仿真软件Proteus的使用方法,掌握8255的基本编程及调试方法,掌握编写程序控制硬件接口。
二、实验设备
Proteus 8 Professional、DOSBox 0.74、masm 5、EditPlus 5.2、PC机一台
三、实验内容
实现8255A口控制8个指示灯,循环点亮(瞬间只有一个灯亮)
四、实验原理图
图1 8086CPU最小模式
图2 地址总线
图3 译码电路
图4 8255接口流水灯实验原理图
五、实验步骤
1、建立实验工程文件,绘制实验的原理图方案;
2、编写程序源代码,实现8255A口控制8个指示灯,循环点亮(瞬间只有一个灯亮)。
3、观察验证实验结果。
六、程序参考流程图
图5 8255接口流水灯程序流程图
七、源程序
PORT_8255_A EQU 9000H
PORT_8255_B EQU 9002H
PORT_8255_C EQU 9004H
CONTROL_PORT_8255 EQU 9006H
DELAY_NUM1 EQU 0BH
DELAY_NUM2 EQU 1FFFH
STACK SEGMENT PARA STACK 'STACK'
STA DB 1024 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START:MOV DX,CONTROL_PORT_8255
MOV AL,10000000B ;A口方式为0
OUT DX,AL ;将AL的内容送给地址为9006H的端口
MOV DX,PORT_8255_A
MOV AL,0FFH ;将11111111送给地址为9000H的端口
OUT DX,AL ;关闭LED
MOV AL,0FEH ;11111110B
NEXT:OUT DX,AL
CALL DELAY ;子程序调用,看见灯亮
ROL AL,1 ;11111101--11111011 使得每个灯依次闪
JMP NEXT ;无条件跳转指令,执行NEXT后的指令
DELAY PROC NEAR ;段内子程序的调用
PUSH BX ;堆栈操作,保护BX,CX寄存器
PUSH CX
MOV CX,DELAY_NUM1 ;延时时间=DELAY_NUM1*DELAY_NUM2
AGAIN2:MOV BX,DELAY_NUM2
AGAIN1:NOP ;NOP操作,空指令,延时作用
NOP
DEC BX
JNZ AGAIN1 ;ZF=0执行AGAIN1
DEC CX ;CX=CX-1
JNZ AGAIN2 ;ZF=0 执行AGAIN2
POP CX
POP BX
RET
DELAY ENDP
CODE ENDS
END START
八、实验结果与思考
1.如何使LED闪亮的顺序反向?
循环右移;将发光二极管去掉;将高低电平反接;将11111110,逻辑左移,如果CF=1,则将循环左移的数加1,再这基础上重复循环上一步骤。
2.如何调整LED闪亮的时间间隔?
改变NOP指令的个数;改变延时子程序中的CX值;多次调用延时子程序。