答:AD0是片选端,作为8086访问奇偶地址单元的判别端
(4)图5-1中6264的外部地址从8000H开始,编程时应该怎么写?此时仿真时U4 O7引脚为什么出现高电平
代码如下:
ORG 0100H
MOV CX,0064H ;循环100次 MOV DX,0000H ;置初值 MOV BX,8001H ; MOV AX,0000H
MOV DS,AX ;DS置零 SIM:
MOV [BX],DL INC DL INC BX LOOP SIM
INT 3H ;停止在INT 3H
U4 O7端属于使能端,当它为高电平时才能正常工作
(5)如果6264的外部地址从C000H开始,图中应作哪些修改? 答:若外部地址从C000H开始,则A15A16A17A18为1100,对CBA=111 111B=7,所以图中芯片74LS138中的输出端口应接在Y7.
实验七8255 并行I/O 扩展实验(一)
一、实验要求
利用8255 可编程并行口芯片,实现输入、输出实验,实验中用8255PA 口作读取开关状态输入,8255PB 口作控制发光二极管输出
二、实验目的
1、了解8255 芯片结构及编程方法。 2、了解8255 输入、输出实验方法。
三、实验电路及连线
图6-1 8255 并行I/O 扩展实验Proteus 实验电路
四、实验说明
1、8255A芯片简介:8255A可编程外围接口芯片是INTEL公司生产的通用并行接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:
方式0:基本输入/ 输出方式 方式l:选通输入/ 输出方式 方式2:双向选通工作方式
2、使8255A端口A工作在方式0并作为输入口,读取Kl-K8个开关量,PB口工作在方式0作为输出口。
五、实验程序流程图
图6-2实验程序流程图 其程序代码为:
读PA口 开始 初始化8255,设置工作方式 置PB口 CODE SEGMENT
ASSUME CS:CODE
IOCON EQU 8006H ;控制端口地址 IOA EQU 8000H ;端口A地址
IOB EQU 8002H ;端口B地址 IOC EQU 8004H ;端口C地址 START:
MOV AL,90H ;设置A口为输入,B口为输出,10010000B MOV DX,IOCON OUT DX,AL
NOP ;空指令,用于延时 STAR1:
NOP NOP
MOV AL,0 MOV DX,IOA
IN AL,DX ;将A口的状态存入AL之中 NOP NOP
MOV DX,IOB
OUT DX,AL ;将AL的状态输出到IOB口中 JMP STAR1 CODE ENDS
END START
六、思考题
(1) 如果使8255 的A口为输出,B口为输入,应该怎样修改程序? 答:代码修改:将代码中的第8行MOV AL,90H改为MOV AL,82H;
第16行改为MOV DX,IOB;第20行代码改为MOV DX,IOA即可
电路修改:将A口和B口的电路元件互换即可。
(2) 如果修改8255的地址为6000H~60006H,应如何修改电路和程序? 答:电路图修改如下:
代码修改只需修改第03行~第06行即可,其余不用修改:
03. 04. 05.
06.
IOCON EQU 6006H IOA EQU 6000H IOB EQU 6002H IOC EQU 6004H
(3) 如何修改程序,使得显示灯不需要拨动,也能自动亮灭? 其代码如下:
STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS CODE SEGMENT
ASSUME CS:CODE IOCON EQU 8006H IOA EQU 8000H IOB EQU 8002H IOC EQU 8004H
START:
MOV AL,80H ;设置A口为输出,B口为输出 MOV DX,IOCON ;定义8255工作方式 OUT DX,AL MOV DX,IOB
STAR1: MOV AL,0 OUT DX,AL CALL DALLY
MOV AL,0FFH MOV DX,IOB
OUT DX,AL ;将AL的状态输出到IOB口中 JMP STAR1
DALLY PROC NEAR ;软件延时子程序 PUSH CX PUSH AX
MOV CX,0FH
D1: MOV AX,0FH ;该值不能太大,否则在proteus中看结果很慢 D2: DEC AX JNZ D2
LOOP D1 POP AX POP CX RET
DALLY ENDP CODE END
END START
(4) 流水灯显示实验。编写程序,使8255 的A 口和B 口均为输出,实现
16 位数据灯的相对循环显示。
电路图修改如下:
其代码修改如下:
IOY0 EQU 8000H ;#####对应8255的片选IOY0端口地址 MY8255_A EQU IOY0+00H*2 ;8255的A口地址 MY8255_B EQU IOY0+01H*2 ;8255的B口地址 MY8255_C EQU IOY0+02H*2 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*2 ;8255的控制寄存器地址
STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS
DATA SEGMENT
LA DB 0 ;定义数据变量 LB DB 0 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA