用8255A,只用汇编语言编程,当按键为学号末位时(0号等同于1号,9号等同于8号)控制B口的发光二极管,初始D0~D3亮,其余不亮,延时一段时间后D4~D7亮,如此循环5次。
时间: 2023-11-18 15:03:38 浏览: 75
用P1口做输出口,接八只发光二极管 编写程序,使发光二极管循环点亮,循环点亮时间间隔为1秒,该时间间隔用定时器中断实现
好的,这是一个使用8255A控制程序,下面是汇编代码:
```
ORG 0000H
MOV A,#80H ;设置A口的控制字,使得D0~D3为输出,D4~D7为输入
OUT 0A8H,A ;将控制字发送到8255A芯片
MOV A,#0F0H ;设置D0~D3为高电平,D4~D7为低电平
OUT 0A9H,A ;将数据发送到8255A芯片
MOV R1,#05H ;循环5次
LOOP:
IN A,0AAH ;读取8255A的输入寄存器
ANL A,#0FH ;屏蔽高4位,保留低4位
CJNE A,#0DH,SKIP ;如果不是学号末位,跳过
MOV A,#00FH ;D4~D7为高电平,D0~D3为低电平
OUT 0A9H,A ;将数据发送到8255A芯片
ACALL DELAY ;延时
MOV A,#0F0H ;D0~D3为高电平,D4~D7为低电平
OUT 0A9H,A ;将数据发送到8255A芯片
ACALL DELAY ;延时
SKIP:
DJNZ R1,LOOP ;循环5次
HLT ;停机指令
DELAY:
MOV R2,#0FFH
DELAY1:
NOP
NOP
NOP
DJNZ R2,DELAY1
DJNZ R0,DELAY
RET
```
程序的思路是,首先设置8255A芯片的控制字,将A口的D0~D3设置为输出,D4~D7设置为输入。然后将A口的初始状态设置为D0~D3为高电平,D4~D7为低电平。
进入循环后,每次读取8255A的输入寄存器,屏蔽高4位,保留低4位,判断是否为学号末位,如果是,则将A口的数据设置为D4~D7为高电平,D0~D3为低电平,延时一段时间后反转输出,再延时一段时间后回到初始状态,继续循环。如果不是,则跳过。
循环5次后程序停机。
延时函数使用的是简单的循环计数,可以根据需要调整延时时间。
阅读全文