微机原理8255A并行接口按键数码管显示讨论报告 下载本文

讨论课报告

学校:上海电机学院 班级:电子13XX 学号:XXXXXXXX 姓名:WX

一、题目:通过8255A并行接口,8086CPU连接LED数码管、4X4矩阵键盘。按下任意键,数码管显示对应键号。

二、硬件设计

讨论问题:

(1)CPU8086与8255A的连接问题:

● 复用引脚上的数据信号与地址信号如何分离?画出电路连接示意图,解释实现的方法。 答: 数据缓存

DEN DT/R 8086 AB/TB ALE M/IO WR RD A1 A2 地址锁存 A15~A3 地址译码

将8086上的20位复用数据地址引脚分别接数据缓存器和地址锁存器在8086总线周期的T1期间作为存储器/IO地址总线将地址锁存在地址锁存器中,另外期间作为数据总线将8位数据缓存在数据缓存器中。缓存器与8255A数据引脚相连,地址锁存后经过译码与地址线相连。

● 假设8255A的芯片地址范围为80H~86H(偶地址),利用74LS138译码器实现8255A芯

D7~D0 A0 A1 8255A CS WR RD 片的片选控制,画出电路连接示意图,解释译码电路的设计原理。 D7~D0 RD WR RESET M/IO 8086 A7 A6 A5 A4 A3 A0 A2 A1 ≥1 G2a Y0 Y1 G1 Y2 G2b Y3 74LS138 Y4 C Y5 B Y6 A Y7 D7~D0 RD WR RESET CS 8255A A1 A0

8086系统有16根数据线,而8255A只有8根数据线,将8255A的8条数据线与低8位数据线相连。此时8255A的4个端口地址必须为偶地址,即8086寻址8255A时A0脚必须为低,将8255A的A0、A1分别接8086的A1、A2脚。

由图可见,8255A的数据线D7~D0与8086的低8位数据总线D7~D0相连,A0必须总等于0,用地址线的A2、A1来选择片内4个端口。图中地址线A7接译码器的G1,M/IO与G2a相连,A6、A5接或门输入端,或门输出与G2b相连。当A7A6A5=100,A4A3A0=000时,Y0=0,选中8255A,4个端口地址分别为80H、82H、84H和86H,对应于8255A的A口、B口、C口和控制寄存器。

(2)LED数码管与8255A的连接问题: ● 数码管采用共阴极连接,需要驱动电路,请画出与8255APA口的连接示意图,简要说明。

+5V

PC0 PC1 PC2 PC3 8255A PC4 PC5 PC6 PC7 PA6 PA5 ... PA0 LED 由图可见,8255A的A口作输入口,PA6~PA0分别接显示器LED7~LED0.二极管共阴极连接后接地电平,当PA口输出高电平时LED被电亮。

● 共阴极LED七段数码管如要显示字符0~9,A~F,如何编制段码?举例说明。 共阴极LED七段数码管连接如上图所示,

显示字符0时,a、b、c、d、e、f、g、h分别为11111100 a 对应PA口输出二进制编码为1111110B即3FH。 同理其余编码如下表所示: f g b 0 1 2 3 4 5 6 7 8 9 A b c d E F e c 3054667076773573 dp F6BF6DD7FF7C9E91 d H H H H H H H H H H H H H H H H

(3)4*4矩阵键盘与8255A的连接问题:

● PC0~PC3接行线、PC4~PC7接列线,请画出与8255APC口的连接示意图,简要说明。 PC0~PC3接行线、PC4~PC7接列线,列线接高电平5v。接线示意图如上图接线图所示: 其中当输入口检测到低电平说明有键按下。

● 键值识别方法有扫描法与反转法,它们的识别原理是什么?键值如何计算? 扫描法原理:依次从第一至最末行线上发出低电平信号, 如果该行线所连接的键没有按下的话, 则列线所接的端口得到的是全“1”信号, 如果有键按下的话, 则得到非全“1”信号。

反转法:原理是先将行线作为输出线, 列线作为输入线, 行线输出全“0” 信号, 读入列线的值, 那么在闭合键所在的列线上的值必为0;然后从列线输出全“0”信号,再读取行线的输入值,闭合键所在的行线值必为 0。这样,当一个键被按下时, 必定可读到一对唯一的行列值。再由这一对行列值可以求出闭合键所在的位置。

计算键值:先判断键盘中有无键按下:将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。

再找键位置:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

三、软件设计

(1)程序结构问题:

● 程序设计有几个段?各个段的主要内容是什么?

答:有3个段。分别为数据段、代码段和堆栈段。数据段中存放数字0-9、A-F的LED显示代码。堆栈段存放局部变量和函数返回地址。代码段程序实现的主要内容都在里面,实现按键显示对应的数字。

流程图

开始

取数据缓存首地址

8255A初始化

扫描法识别键值

有按键按

下?

Y

延时去抖动

键值计算

将数变成显示代码

显示数字(或字母)

结束

8255A的芯片初始化程序设计。

N MOV AX,DATAS MOV DS,AX

MOV AL,10000001B MOV DX,CT_PORT OUT DX,AL

MOV DX,C_PORT

按键去抖动程序设计。

MOV AL,0 OUT DX,AL

NO_KEY:MOV DX,C_PORT IN AL,DX AND AL,0FH CMP AL,0FH JZ NO_KEY CALL DELAY10MS IN AL,DX AND AL,0FH CMP AL,0FH JZ NO_KEY

采用扫描法实现键值识别程序设计。

MOV BL,0

LOOP1:MOV CH,0EFH MOV AL,CH

MOV DX,C_PORT OUT DX,AL IN AL,DX PUSH BX MOV BH,0 MOV CX,4 LOOP3:SHR AL,1 JNC LOP2 INC BH

LOOP LOOP3 ROL CH,1 CMP CH,0FEH JNZ LOOP1 JMP NO_KEY

键值计算的程序设计。

LOOP2:MOV AH,BH POP BX

MOV BH,AH;BH中是行号,BL是列号 SHL BH,1

SHL BH,1;BH*4

ADD BH,BL;键值=行号*4+列号 LEA BX,TAB1

XLAT;键值换码后得到显示码(存AL中) MOV DX,A_PORT

OUT DX,AL;显示码送到端口A,数码管显示相应值 CALL DELAY10MS MOV AH,4CH INT 21H

LED数码管显示程序设计。

LOOP2:MOV AH,BH POP BX

MOV BH,AH;BH中是行号,BL是列号 SHL BH,1

SHL BH,1;BH*4

ADD BH,BL;键值=行号*4+列号 LEA BX,TAB1

XLAT;键值换码后得到显示码(存AL中) MOV DX,A_PORT

OUT DX,AL;显示码送到端口A,数码管显示相应值 CALL DELAY10MS MOV AH,4CH INT 21H

一、讨论小结

通过本次讨论了解了可编程接口芯片8255A的功能、工作方式、硬件连接、编程结构。通过对电路及程序的设计熟悉了可编程接口芯片的编程应用。对可编程接口芯片8255A的编程应用能力有所提升。进一步熟悉了微机系统的原理及汇编语言对具体电路的控制。 二、附件

DATAS SEGMENT

TAB1 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H

DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;此处输入数据段代码 DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX

MOV AL,10000001B MOV DX,CT_PORT OUT DX,AL

MOV DX,C_PORT;此处输入代码段代码

MOV AL,0 OUT DX,AL

NO_KEY:MOV DX,C_PORT IN AL,DX AND AL,0FH CMP AL,0FH JZ NO_KEY CALL DELAY10MS IN AL,DX AND AL,0FH CMP AL,0FH JZ NO_KEY

MOV BL,0

LOOP1:MOV CH,0EFH MOV AL,CH

MOV DX,C_PORT OUT DX,AL IN AL,DX PUSH BX MOV BH,0 MOV CX,4 LOOP3:SHR AL,1 JNC LOP2 INC BH

LOOP LOOP3 ROL CH,1 CMP CH,0FEH JNZ LOOP1 JMP NO_KEY

LOOP2:MOV AH,BH POP BX

MOV BH,AH;BH中是行号, SHL BH,1

SHL BH,1;BH*4

是列号BL ADD BH,BL;键值=行号*4+列号 LEA BX,TAB1

XLAT;键值换码后得到显示码(存AL中) MOV DX,A_PORT

OUT DX,AL;显示码送到端口A,数码管显示相应值 CALL DELAY10MS MOV AH,4CH INT 21H

DELAY10MS PROC;延时程序 PUSH BX;现场保护 PUSH CX

WAITO:MOV CX,2801;内循环次数 WAIT1:LOOP WAIT1;延时10ms DEC BX JNZWAITO

POP CX;现场恢复 POP BX RET

DELAY10MS ENDP CODES ENDS END START