加法器课程设计论文正文 - 图文

更新时间:2023-09-25 23:54:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

加法器设计1

1 设计任务描述

1.2.1 设计目的

通过课程设计使学生更进一步掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。通过查阅资料,结合所学知识进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法。为以后学生结合专业从事微机应用设计奠定基础。 1.2.2 设计的原始资料及依据

查阅可编程并行芯片8255、键盘工作原理等其他相关资料。

用简单的输入输出端口等硬件,输入数据、处理数据和输出数据。 1.2.3 设计的主要内容及要求

内容:利用微机原理实验箱,进行数据处理。

要求:1)从键盘输入两个二/四位BCD数,求其和,保存到内存。 2)用LED指示灯显示结果。 1.2.4 设计发挥

1)延时。

2)显示百位进位。、

2 设计思路1.首先定义数据段和堆栈段。

2.其次对8255进行初始化,使8255工作在方式0,即基本输入输出方式;并且设置8255的A端口和B端口为输出状态,C端口为输入状态。

3.设计键盘扫描子程序,首先键盘清零,然后根据行扫描法确定哪一按键被按下,即分别确定输入的两个二位BCD数。

4.设计延时子程序,使输入的数据及计算结果有一段停留时间。

5.设计主程序,分别调用键盘扫描子程序和延时子程序,以输入两个二位BCD加数,在CPU中计算求和,再经8255输出到LED显示器,用九盏灯显示结果,第一盏由8255的A端口高四位输出,表示十位向百位的进位,即只能进行一百以内的加法,接下来的八盏由8255的B端口输出,前四位为BCD码显示的十位,最后四位显示个位。

6.程序结束,清屏返回。 3.1 8255与键盘接口程序流程图

开始 定义数据段,堆栈段 8255初始化(8255的工作方式为0,A口和B口为输出状态,C口为输入状态,因此控制字为89H) 循环输入两个二位BCD数(调用键盘扫描子程序,采用行扫描法确定键号),消除抖动

1

加法器设计1

调用延时子程序 处理数据(两个二位BCD数相加程序),计算结果,并保存于内存 输出数据(将和输出到PB口8位及PA口高4位,并且驱动LED灯显示)

延时 清屏,返回 图(3.1)主程序

3.2 键盘扫描子程序

开始

设置8255的A端口和B端口为输

出方式,C端口为输入方式

A端口输出全为“0”,从C端口读 取列值 列线全为“1” ? Y N 保存列值,延时消抖动

列线仍有“1”? Y N 设置行扫描初值,输出到A口

修改行扫描码,转去下一行扫描

2

加法器设计1

屏蔽无关位,读入低4位列线值

列线是否有“0” N Y 从 C 口读入列值 N 键释放? Y 保存键号 清屏,返回 图(3.2)键盘扫描子程序

4 硬件接线图

XA1 XA2 系 统 XD0 总 XD7 线 IOW# IOR# IOY0 A0 PC0 A1 PC3 Y1 键数 盘码 扫显 Y4 描示 及单 X1 元 X4

PA0 D0 PA3 8255 D7 PB0 WR PB7 RD PA4 CS PA7 图(4.1)硬件接线图 DO 开 关 D7 及 LED D8 显 示 D11 单 元

设置8255的工作方式为0,即基本输入输出方式,并将键盘中的各行X1-X4分别与A口的PA0-PA3相连,A口为输出;将各列Y1-Y4分别与C口的PC0-PC3相连,C口为输入。输出结果时,由B口输出计算结果的十位和个位,并驱动LED灯显示;由A口高四位输出十位向百位的进位,并驱动LED灯显示。

3

加法器设计1

5 源程序清单及注释

DATA SEGMENT ;定义数据段 NUM DB 4 DUP(0) SUM DB 3 DUP(0) DATA ENDS

STACK SEGMENT ;定义堆栈段 DW 200 DUP(?) STACK ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK JPSMZCX PROC ;键盘扫描子程序 PUSH AX PUSH BX PUSH CX PUSH DX

MOV DX,0600H ; MOV AL,00H ; OUT DX,AL

A1: MOV DX,0604H ; IN AL,DX ; AND AL,0FH ; CMP AL,0FH ; JZ A1 ; MOV CX,2000H ;QCDD: LOOP QCDD ; IN AL,DX ; AND AL,0FH CMP AL,0FH

JZ A1 ;A2: MOV BL,4 ; MOV BH,4 ; MOV AL,0FEH ; MOV CH,0FFH ;A3: MOV DX,0600H ; OUT DX,AL ; ROL AL,1 ;

MOV AH,AL ; MOV DX,0604H ; IN AL,DX ; AND AL,0FH ; CMP AL,0FH ; JNZ A4 ; ADD CH,BH ; MOV AL,AH ; DEC BL ; JNZ A3 ; JMP A2 ; 设置8255PA端口地址 行线输出全口 设置8255PC端口地址 读入列线值 屏蔽无关位

测试列线值是否全为1

若列线值全为1,表明无键按下,等待按键设置循环次数

若有按键按下,延迟2000ms,清除抖动 再察看列线,看键是否还按着 已松开等待按键

行数送BL,即行扫描次数 列数送BH 设置行扫描初值 设置起始键号为FFH 设置8255PA端口地址 输出行扫描初值

修改扫描码为扫描下一行做准备 保持修改后的扫描码 设置8255PC端口地址 读入列值 屏蔽无关位 查列线是否全位1 有,则转去找该列线

无,修改键号指向该行末列键号 取回扫描码 行值减1

行末查完转下一行 重新开始扫描键盘

4

加法器设计1

A4: INC CH ;键号加一,指向本行首列键号 RCR AL,1 ;右移一位 JC A4

MOV [SI],CH ;键号送入[SI]中 INC SI POP DX POP CX POP BX POP AX RET JPSMZCX ENDP

YSZCX PROC ;延时子程序 PUSH BX PUSH CX MOV BL,100

DELAY: MOV CX,2801 ;WAIT1: LOOP WAIT1 JNZ DELAY POP CX POP BX RET YSZCX ENDP START: MOV AX,DATA MOV DS,AX

MOV SI,OFFSET NUM

MOV DI,OFFSET SUM

MOV DX,0606H ;8255 MOV AL,89H OUT DX,AL MOV CX ,2

B1: CALL JPSMZCX ; CALL YSZCX LOOP B1 MOV CX,2

B2: CALL JPSMZCX ; CALL YSZCX LOOP B2 MOV CX,2

MOV SI,OFFSET NUM CLC

B3: MOV AL,[SI+1] ; ADC AL,[SI+3] AAA

MOV [DI+2],AL DEC DI DEC SI LOOP B3

内环延时约10ms 初始化 输入第一个数 输入第二个数 开始进行加法操作5

DEC BL

本文来源:https://www.bwwdw.com/article/teld.html

Top