通过8255A接口控制8个发光二极管亮、灭的应用,如图所示,8255A的端口地址为80H~83H。要求L7-L0每隔3s点亮1次,点亮的顺序为:L7→L6→L5→L4→L3→L2→L1→L0→L7……周而复始。 1.写出8255A 的方式控制字和初始程序,并加以注释。 2.写出题意要求的程序。
时间: 2023-11-18 15:26:17 浏览: 456
1.8255A的方式控制字和初始程序:
8255A的控制方式字包括三个部分,分别是端口A控制字、端口B控制字和端口C控制字。具体控制方式如下:
端口A控制字:定义端口A的工作方式,如输入、输出、双向等。在此题中,L7-L0是需要输出的,因此端口A的控制方式字为10000000(即0x80)。
端口B控制字:定义端口B的工作方式,如输入、输出、双向等。在此题中,L7-L0是需要输出的,因此端口B的控制方式字为10000000(即0x80)。
端口C控制字:定义端口C的工作方式,如输入、输出、双向等。其中的高4位为控制字,低4位为端口C的输出值。在此题中,需要将PortC的0-7位输出变成01010101(即0x55),表示L7-L0都是输出高电平。因此端口C的控制方式字为11111100(即0xFC),初始值为01010101(即0x55)。
8255A的初始化程序如下:
```
MOV AL, 0x80 ;将0x80送入累加器
OUT 0x80, AL ;将累加器的值送入8255A的控制字寄存器,初始化端口A为输出
MOV AL, 0x80 ;将0x80送入累加器
OUT 0x81, AL ;将累加器的值送入8255A的控制字寄存器,初始化端口B为输出
MOV AL, 0xFC ;将0xFC送入累加器
OUT 0x82, AL ;将控制字送入8255A的控制字寄存器,同时输出01010101(即0x55)
```
2.题意要求的程序:
本题要求每隔3秒钟点亮一个LED灯,点亮的顺序为L7→L6→L5→L4→L3→L2→L1→L0→L7……周而复始。因此可以使用一个循环,每次循环点亮一个LED灯,然后等待3秒钟,再点亮下一个LED灯。程序如下:
```
MOV CX, 8 ;循环次数为8,即L7-L0
MOV BL, 0x80 ;BL为掩码,初始值为0x80,即L7点亮
LOOP:
MOV AL, BL ;将BL送入累加器
OUT 0x83, AL ;将累加器的值送入端口C,点亮LED灯
CALL DELAY ;延时3秒钟
SHR BL, 1 ;BL右移一位,即点亮下一个LED灯
JC CARRY ;如果BL的最高位为1,则跳转到CARRY
MOV BL, 0x80 ;否则将BL的值重新赋为0x80,即点亮L7
CARRY:
LOOP LOOP ;循环
```
其中,DELAY为延时函数,用于等待3秒钟。
阅读全文
相关推荐


















