微机原理|| 流水灯实验
一、实验目的
通过对并行接口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 9006HDELAY_NUM1 EQU 0BH
DELAY_NUM2 EQU 1FFFHSTACK SEGMENT PARA STACK 'STACK'STA DB 1024 DUP(?)
STACK ENDS
CODE SEGMENT ASSUME CS:CODE,SS:STACK
START:MOV DX,CONTROL_PORT_8255MOV AL,10000000B ;A口方式为0OUT DX,AL ;将AL的内容送给地址为9006H的端口MOV DX,PORT_8255_A MOV AL,0FFH ;将11111111送给地址为9000H的端口 OUT DX,AL ;关闭LEDMOV AL,0FEH ;11111110B NEXT:OUT DX,ALCALL DELAY ;子程序调用,看见灯亮ROL AL,1 ;11111101--11111011 使得每个灯依次闪JMP NEXT ;无条件跳转指令,执行NEXT后的指令
DELAY PROC NEAR ;段内子程序的调用PUSH BX ;堆栈操作,保护BX,CX寄存器PUSH CXMOV CX,DELAY_NUM1 ;延时时间=DELAY_NUM1*DELAY_NUM2
AGAIN2:MOV BX,DELAY_NUM2
AGAIN1:NOP ;NOP操作,空指令,延时作用NOPDEC BXJNZ AGAIN1 ;ZF=0执行AGAIN1DEC CX ;CX=CX-1JNZ AGAIN2 ;ZF=0 执行AGAIN2POP CX POP BXRET
DELAY ENDP
CODE ENDSEND START
八、实验结果与思考
1.如何使LED闪亮的顺序反向?
循环右移;将发光二极管去掉;将高低电平反接;将11111110,逻辑左移,如果CF=1,则将循环左移的数加1,再这基础上重复循环上一步骤。
2.如何调整LED闪亮的时间间隔?
改变NOP指令的个数;改变延时子程序中的CX值;多次调用延时子程序。