8086D8~D158255D0~D7RDRDWRA2A1M/IOBHEA15A11A10A9A8A0A14A13A12A7A6A5A4A3PA0PA1......WRA1PA716位开关量(K15~K0)A0PB0PB1PB7......VCCCSPC3PC2PC1PC0(2) MOV DX,8F07H L2:
SHL BX,1 JNC L1
MOV AL,10010010B ;端口A、B方式0输入,端口C方式0输出 OUT DX,AL
MOV DX,8F03H ;从端口B读取高8位开关量 IN AL,DX XCHG AL,AH
MOV DX,8F01H ;从端口A读取低8位开关量 IN AL,DX MOV BX,AX XOR AL,AL MOV CX,16 CLC
NEXT:
L1:
INC AL LOOP L2
MOV DX,8F05H ;从端口C送出 OUT DX,AL
JMP NEXT ;进行下一次检测
5. 利用IBM PC系统机的总线槽,开发由一片8255A构成的子系统,8255A端口地址为260H~263H,编程
实现产生如图10.20所示的8个信号(各个信号的节拍不必严格相等)。
Y0Y1Y7图10.20 要求产生的信号波形
解:8355A与IBM PC机总线的连接框图如下:
…
可将8255A的端口A作为要产生的信号的输出端口,设定为方式0输出,端口B和端口C不做使用,均设定为方式0输出。程序段如下:
MOV DX,263H ;设定8255A的工作方式 MOV AL,10000000B OUT DX,AL
MOV DX,260H ;产生指定信号 XOR AL,AL OUT DX,AL
REP:
MOV AL,80H MOV CX,7 REP1:
OUT DX,AL SAR AL,1 LOOP REP1 MOV CX,8 REP2:
SHL AL,1 OUT DX,AL LOOP REP2 JMP REP
6. 在实际应用中,经常会遇到要求输入多个数据量,这时需要用到多路开关,如图10.21表示八选一的
逻辑框图及其真值表。
现有8组16位开关量数据(无符号数),要求通过一片8255A(端口地址为260H~263H)分时输入到CPU(8088最小方式系统)中,并找出它们中的最大值,并通过4个发光二极管指示其序号(灯亮表示“1”)。画出8255A的连接图,并编程实现。
解:由于开关量是16为数据,故可以将8255A的PA端与PB端设定为方式0,分别读取开关量的低八位和高八位,以PC低三位端口的控制八选一电路的输出
依次从X0到X7,使用PC端口的高八位输出最大开关量的序号(该序号为1~8),控制发光二极管的亮灭以码指示序号。 连接图如下:
八选一x0x1x2x3x4x5x6x7ys0s1s2s2s1s00 0 00 0 10 1 00 1 11 0 01 0 11 1 01 1 1yx0x1x2x3x4x5x6x7图10.21 八选一逻辑电路
程序段如下:
MOV DX,263H
MOV AL,10011010B ;设定工作方式,PA,PB均工作于方式0,PA、PB为输入,PC为输出
OUT DX,AL MOV CX,8 XOR BX,BX
MOV SI,0 ;SI表示输入开关量的序号 ST1:
MOV DX,262H OUT DX,SI
MOV DX,260H IN AL,DX
MOV DX,261H IN AH,DX CMP BX,AX JA NEXT
MOV BX,AX INC SI
PUSH SI NEXT:
INC SI LOOP ST1
POP SI XOR AX,AX
MOV AX,SI MOV CL,4
ROL AL,CL MOV DX,262H
OUT DX,AL ;将开关量数据的低八位写入AL ;将开关量数据的高八位写入AH ;将当前最大值保存在BX中 ;将当前最大值的序号压栈 ;最大值的序号出栈 ;将最大值的序号(4位)移至AL的高四位 ;PC的高四位输出最大值序号
相关推荐: