本次我们介绍一下8255A芯片的使用方法
在对8255A进行编程操作时候,我们只需要了解三个步骤:
(1)控制端口写控制字;
(2)8255A端口地址计算;
(3)对应端口读/写数据。
8255A控制字:
对8255A写控制字可以理解为配置各个端口的工作方式,以及输入输出模式。D7标志位主要是为了区分端口C的控制字。
举例:
1 2 3 | 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
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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 |