本次我们介绍一下8255A芯片的使用方法
在对8255A进行编程操作时候,我们只需要了解三个步骤:
(1)控制端口写控制字;
(2)8255A端口地址计算;
(3)对应端口读/写数据。
8255A控制字:
对8255A写控制字可以理解为配置各个端口的工作方式,以及输入输出模式。D7标志位主要是为了区分端口C的控制字。
举例:
MOV AL,10001001B
MOV DX,CRTL_PORT ;CRTL_PORT为控制的端口地址
OUT DX,AL
此程序的目的是配置C端口为输入模式,其他端口为输出模式,且工作与方式0。
举个例题:
这个题我们最开始想到的组合是8种,在控制字编程中,C端口的高位和低位是分开配置的,所以这道题的答案是16种。
端口置位/复位控制字:
这个其实就是对C端口的某些位进行置位或者清零操作
对C端口进行置位/清零操作也是往控制端口写入数据,D7=0。
举例:
下面介绍一下8255A端口地址计算:
根据本图得连接方式可知,CS端由74154芯片的IO1端控制,A13~A14控制74154芯片的使能。A1,A2控制端口选择。
由此可以端口状态表:
A16~A19为参与地址控制,置0。由此可知:
当A2=0,A1=0,选中A端口,A端口地址为0200H
当A2=0,A1=1,选中B端口,B端口地址为0202H
当A2=1,A1=0,选中C端口,C端口地址为0204H
当A2=1,A1=1,选中控制端口,控制端口地址为0206H
例题:
该题的目的是C端口开关传送开关状态,随后在数码管显示。
先计算端口地址:
由于74LS138 Y4 端口控制片选所以 C B A 状态为1 0 0,A7~A15通过与门控制使能端,所以只能是高电平,同理A5需要为低电平。状态图为:
经计算得出:A端口地址为:FF84H
B端口地址为:FF85H
C端口地址为:FF86H
控制端口地址为:FF87H
代码如下:
A_PORT EQU 0FF84H
B_PORT EQU 0FF85H
C_PORT EQU 0FF86H
CRTL_PORT EQU 0FF87H
DATA SEGMENT
LEDTAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX ;段基地址初始化
MOV AL,10001001B
MOV DX,CRTL_PORT
OUT DX,AL ;8255A写入控制字
KEY_PRESS:
MOV DX,C_PORT
IN AL,DX ;C端口状态存入AL寄存器中
MOV CL,AL ;将AL内容送入CL寄存器中,目的一会取高四位状态送入B端
AND AL,0FH ;与操作,高四位清零,取低四位
MOV BX,offset LEDTAB
XLAT
MOV DX,A_PORT
OUT DX,AL ;A端口输出低四位的值
ROR CL,4 ;逻辑循环有移动,高四位变成低四位,
MOV AL,CL
AND AL,0FH ;与操作,高四位清零,取低四位,此时取的是高位
MOV BX,offset LEDTAB
XLAT
MOV DX,B_PORT
OUT DX,AL ;B端口输出高四位的值
JMP KEY_PRESS ;死循环,一直扫描C端按键状态
CODE ENDS
END START
本次我们介绍一下8255A芯片的使用方法
在对8255A进行编程操作时候,我们只需要了解三个步骤:
(1)控制端口写控制字;
(2)8255A端口地址计算;
(3)对应端口读/写数据。
8255A控制字:
对8255A写控制字可以理解为配置各个端口的工作方式,以及输入输出模式。D7标志位主要是为了区分端口C的控制字。
举例:
MOV AL,10001001B
MOV DX,CRTL_PORT ;CRTL_PORT为控制的端口地址
OUT DX,AL
此程序的目的是配置C端口为输入模式,其他端口为输出模式,且工作与方式0。
举个例题:
这个题我们最开始想到的组合是8种,在控制字编程中,C端口的高位和低位是分开配置的,所以这道题的答案是16种。
端口置位/复位控制字:
这个其实就是对C端口的某些位进行置位或者清零操作
对C端口进行置位/清零操作也是往控制端口写入数据,D7=0。
举例:
下面介绍一下8255A端口地址计算:
根据本图得连接方式可知,CS端由74154芯片的IO1端控制,A13~A14控制74154芯片的使能。A1,A2控制端口选择。
由此可以端口状态表:
A16~A19为参与地址控制,置0。由此可知:
当A2=0,A1=0,选中A端口,A端口地址为0200H
当A2=0,A1=1,选中B端口,B端口地址为0202H
当A2=1,A1=0,选中C端口,C端口地址为0204H
当A2=1,A1=1,选中控制端口,控制端口地址为0206H
例题:
该题的目的是C端口开关传送开关状态,随后在数码管显示。
先计算端口地址:
由于74LS138 Y4 端口控制片选所以 C B A 状态为1 0 0,A7~A15通过与门控制使能端,所以只能是高电平,同理A5需要为低电平。状态图为:
经计算得出:A端口地址为:FF84H
B端口地址为:FF85H
C端口地址为:FF86H
控制端口地址为:FF87H
代码如下:
A_PORT EQU 0FF84H
B_PORT EQU 0FF85H
C_PORT EQU 0FF86H
CRTL_PORT EQU 0FF87H
DATA SEGMENT
LEDTAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX ;段基地址初始化
MOV AL,10001001B
MOV DX,CRTL_PORT
OUT DX,AL ;8255A写入控制字
KEY_PRESS:
MOV DX,C_PORT
IN AL,DX ;C端口状态存入AL寄存器中
MOV CL,AL ;将AL内容送入CL寄存器中,目的一会取高四位状态送入B端
AND AL,0FH ;与操作,高四位清零,取低四位
MOV BX,offset LEDTAB
XLAT
MOV DX,A_PORT
OUT DX,AL ;A端口输出低四位的值
ROR CL,4 ;逻辑循环有移动,高四位变成低四位,
MOV AL,CL
AND AL,0FH ;与操作,高四位清零,取低四位,此时取的是高位
MOV BX,offset LEDTAB
XLAT
MOV DX,B_PORT
OUT DX,AL ;B端口输出高四位的值
JMP KEY_PRESS ;死循环,一直扫描C端按键状态
CODE ENDS
END START
举报