试编写初始化程序,设8255A的端口A工作在方式0输入,B口工作在方式0输出,使PC5端

试编写初始化程序,设8255A的端口A工作在方式0输入,B口工作在方式0输出,使PC5端,第1张

编写初始化程序,要先写控制字,所以先假设8255A的端口A、端口B和控制字寄存器的端口地址分别为20H、21H和22H,那么初始化程序为:MOV DX,023H;MOV AL,10010000B;OUT DX,AL······(其中控制字为:10010000B,PC端多为输出端)。

8255A的A,B,C三个端口的工作方式是在初始化编程时,通过向8255A的控制端口写入控制字来设定的。8255A由编程写入的控制字有两个:方式控制字和置位/复位控制字。

其中,方式控制字用于设置端口A,B,C的工作方式和数据传送方向,置位/复位控制字用于设置C口的PC7~PC0中某一条口线PCi(i=0~7)的电平,两个控制字公用一个端口地址。

扩展资料:

8255A具有3种基本的工作方式,在对8255A进行初始化编程时,应向控制字寄存器 写入方式选择控制字,用来规定8255A各端口的工作方式。

这3种基本工作方式是:

1、方式0——基本输入输出方式:适用于不需要用应答信号的简单输入输出场合,这种方式端口A和B可作为8位的端口,端口C的高4位和低4位可作为两个4位的端口;

2、方式1——选通输入输出方式:端口A和B作为数据口,均可工作于输入或输出方式,端口C的6根线用来产生或接受联络信号。

3、方式2——双向总线I/O方式:只有端口A可以工作于这种方式,端口A工作于方式2 时,端口C的5位(PC3~PC7)作A口的联络控制信号。

参考资料来源:百度百科-8255A芯片

RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

CS:芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯/CS=1时,8255无法与CPU做数据传输.

RD:读信号线,当这个输入引脚为低电平时,即/RD=0且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

WR:写入信号,当这个输入引脚为低电平时,即/WR=0且/CS=0时,允许CPU将数据或控制字写入8255。

D0~D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写 *** 作,控制字和状态信息也通过数据总线传送。

PA0~PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。

PB0~PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器。

PC0~PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。'

A0,A1:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器.

当A0=0,A1=0时,PA口被选择

当A0=0,A1=1时,PB口被选择

当A0=1,A1=0时,PC口被选择

当A0=1.A1=1时,控制寄存器被选择.

8255硬件连接及软件设置:

B口方式0输入,PB0~PB3分别连接K1~K4;

A口方式0输出,PA0~PA3外接驱动电路控制灯的4种动作;

驱动电路,可由74LS06、ULN2003作反相电流放大驱动继电器或固体继电器组成;

C口闲置;

按以上设置,8255方式控制字是82H ;

在PC机作主机的系统中,8255的4个寄存器地址是:

A口60H,B口61H,方式控制寄存器63H。

汇编程序如下:

SSEG SEGMENT PARA STACK堆栈段定义

DW 30H DUP(?)

SSEG ENDS

CSEG SEGMENT 代码段定义

ASSUME CS:CSEG,DS:CSEG

ORG 200h主程序首址

START:MOV AL, 82H 方式控制字

MOV DX, 63H

OUT DX, AL 方式控制字送入方式控制寄存器

Scan: IN AL,61H扫描从B口读入的K1~K4状态

CALL PRC1 开灯、关灯

CALL PRC2 是否暂停

CALL PRC3 是否换向

CALL PRC3 是否移动

JMP Scan 主程序循环

PRC1 PROC NEAR "开/关灯" *** 作 子程序定义

PUSH AXB口状态进栈暂存

TEST AL,00000001B 检测PB0输入状态

JZ CloseL 若PB0低电平,表示K1断,转CloseL处执行

OpenL: OUT 60H,AL 若PB0高电平,表示K1通,PA0输出高电平,开灯

JMP RT1转RT1处指令返回

CloseL: MOV AL,00000000B PA0输出低电平

OUT 60H,AL 关灯

RT1: POP AXB口状态出栈

RET返回主程序

PRC1 ENDP 子程序定义完毕

PRC2 PROC NEAR "暂停" *** 作 子程序定义

PUSH AXB口状态进栈暂存

TEST AL,00000010B 检测PB1输入状态

JZ RT2若PB1低电平,表示K2断,不暂停

PAUS:OUT 60H,AL 若PB1高电平,表示K2通,PA1输出高电平,暂停

RT2: POP AXB口状态出栈

RET返回主程序

PRC2 ENDP 子程序定义完毕

PRC3 PROC NEAR "换向" *** 作 子程序定义

PUSH AXB口状态进栈暂存

TEST AL,00000100B 检测PB2输入状态

JZ RT3若PB2低电平,表示K3断,不换向

CHG: MOV AL,00000101B 若PB2高电平,表示K3通

OUT 60H,AL PA2、PA0输出高电平、换向,灯保持亮

RT3: POP AXB口状态出栈

RET返回主程序

PRC3 ENDP 子程序定义完毕

PRC4 PROC NEAR "移动" *** 作 子程序定义

TEST AL,00001000B 检测PB3输入状态

JZ RT4若PB3低电平,表示K4断,不移动

MOVE:MOV AL,00001001B 若PB3高电平,表示K4通

OUT 60H,AL PA3、PA0输出高电平、移动,灯保持亮

RT4:RET返回主程序

PRC4 ENDP 子程序定义完毕

CSEGENDS代码段定义完毕

END START 主程序结束


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11729289.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存