竞赛抢答器课程设计微机接口课程设计报告sw.docx

上传人:b****7 文档编号:10601578 上传时间:2023-02-21 格式:DOCX 页数:21 大小:92.56KB
下载 相关 举报
竞赛抢答器课程设计微机接口课程设计报告sw.docx_第1页
第1页 / 共21页
竞赛抢答器课程设计微机接口课程设计报告sw.docx_第2页
第2页 / 共21页
竞赛抢答器课程设计微机接口课程设计报告sw.docx_第3页
第3页 / 共21页
竞赛抢答器课程设计微机接口课程设计报告sw.docx_第4页
第4页 / 共21页
竞赛抢答器课程设计微机接口课程设计报告sw.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

竞赛抢答器课程设计微机接口课程设计报告sw.docx

《竞赛抢答器课程设计微机接口课程设计报告sw.docx》由会员分享,可在线阅读,更多相关《竞赛抢答器课程设计微机接口课程设计报告sw.docx(21页珍藏版)》请在冰豆网上搜索。

竞赛抢答器课程设计微机接口课程设计报告sw.docx

竞赛抢答器课程设计微机接口课程设计报告sw

合肥学院

计算机科学与技术系

 

微机原理与接口技术

课程设计报告

2008~2009学年第2学期

 

课程

微机原理与接口技术

课程设计名称

竞赛抢答器

学生姓名

储醒之

学号

0604032028

专业班级

计算机科学与技术专业(06网工2)

指导教师

肖连军

2009年2月

 

一、题义分析及解决方案

1.题义需求分析

题目要求利用8086系统接口电路设计一个可供八人竞赛使用的抢答器,并显示竞答者编号(1~8)。

根据题义可知:

本设计是要设计一个能够提供给8个人使用的竞赛抢答装置,能够使得抢答者的编号,显示的装置。

首先是主持人发出抢答允许信号,当抢答者收到信号后,便立刻进行抢答,然后通过装置,将最先抢答者的编号显示出来。

根据以上分析,提出以下几个问题:

主持人如何发出抢答的信息?

竞赛者如何进行抢答?

如何将分辨抢答的顺序,谁是最先抢答的?

如何显示抢答者的编号?

抢答的总体规则是什么?

怎样控制?

2.解决问题的思路及其方法

1)硬件部分

(1)主控装置,由主持人控制决定抢答有效与无效,共两个量,因而考虑到逻辑开关、微动开关和小键盘,主控完成的是保持有效与无效两种状态,而微动开关是输入一个脉冲,故不符合要求,小键盘虽然可以实现,但相对复杂,不便于实现。

逻辑开关能很好地符合要求,优点是简单、易操作。

本实验使用新实验箱,芯片8255的A、B、C口均被使用,故不能实现该主控功能,但设计思想中应包含此方面,以便设计完备。

(2)抢答装置,由竞赛选手抢答使用,每一个选手在抢答时均有两种选择情况,抢答或不抢答,同主控装置道理一样,“1”表示抢答动作发生,“0”表示不抢答,可见,逻辑开关可方便实现,微动开关同样满足要求。

然而现实生活中,更合理的应采用微动开关按键式完成抢答动作,以符合现实要求。

(3)显示装置,可选择LCD或LED,由于这里的输出结果是选手编号,比较简单,用LED即可实现,用LCD也可以实现,但相对复杂,且LCD价格高,故选LED。

实现时可采用一人一个发光二极管,但这样在抢答时不便于观察与先后比较,所以选用七段LED数码显示最后竟比较先后处理过的数字编号。

(4)规则设定,对于规则要用到可编程芯片,因为抢答结果的多种情况需要作不同的处理,要有硬件实现。

由于是八位选手在同一个时间段均可抢答,输入抢答信号,所以应并行而不是串行。

可编程芯片有8253、8251A以及8255等,8253主要用于定势和计时器用,它的6种工作方式多以触发方式,故不适用。

8251A用于通信借口,并且是串行的,也不可用。

而8255恰很好的满足需求,是并行接口芯片,所以选用8255。

(5)接口实现,8086CPU与8255之间的数据总线经数据总线收发器相连,地址线经地址锁存器相连,八个逻辑开关K0~K7分别连接到8255的输入口PA0~PA7,输出口PB0~PB7连接到七段LED显示器。

在8255与LED连接时,要留心参数是否匹配,能否成功驱动LED显示,LED的标准编码及显示数字如下表所示:

表1-1LED的标准编码

数字

DP

g

f

E

d

c

b

a

二进制编码(字形)

0

0

0

1

1

1

1

1

1

3FH

1

0

0

0

0

0

0

1

1

06H

2

0

1

0

1

1

0

1

1

5BH

3

0

1

0

0

1

1

1

1

4FH

4

0

1

1

0

0

1

1

0

66H

5

0

1

1

0

1

1

0

1

6DH

6

0

1

1

1

1

1

0

1

7DH

7

0

0

0

0

0

1

1

1

07H

8

0

1

1

1

1

1

1

1

7FH

E

0

1

1

1

1

0

0

1

79H

通过上表,我们需要用到的编码是0、1、2、3、4、5、6、7、8、E,LED完全符合要求,每一位选手的编号,显示装置采用七段LED二极管显示八位选手的编号,即为抢答结果。

2)软件部分

对于设计中的抢答规则由软件来实现,考虑到8位选手的各自按下抢答装置与自己的编号间的对应关系,8个信号有可能在同一时间段内有两个或以上信号输入,各自之间在时间上不会牵制,即涉及并行的方式输入,后要对输入的开关量进行处理、输出,连接至LED显示,其中需有一主控装置,据此结合课程的所学的相关知识可知,使用可编程并行接口芯片8255能够满足要求,实现相关功能。

实现时,可设置8255的A口作为八个输入信号,用逻辑电平开关K0—K7代表抢答装置的抢答开关1—8号。

当某个微动开关置“0”时,显示有效,当有两个或以上选手同时按下抢答器时,信号无效,显示“E”。

将B口输出信号与7段LED的a—dp连接,即可用LED显示器输出抢答结果。

在实验中需设置C口位控制选用新实验箱的八个LED显示中的一个。

二、硬件设计

1)8255芯片

(1)8255引脚图

8255是可编程并行接口,内部有3个相互独立的8位数据端口,即A口B口和C口。

三个端口都可以作为输入端口或输出端口。

A口有三种工作方式:

即方式0、方式1和方式2,而B口只能工作在方式0或方式1下,而C口通常作为联络信号使用。

8255的工作只有当片选CS有效时才能进行。

而控制逻辑端口实现对其他端口的控制。

(2)CPU接口

1.数据总线缓冲器

这是一个8位双向三态缓冲器,三态是由读/写控制逻辑控制的。

这个缓冲器是8255A与CPU数据总线的接口。

2.读/写控制逻辑

它与CPU的6根控制线相连,控制8255A内部的各种操作。

控制线RESET用来使8255A复位。

和地址线A1及A0用于芯片选择和通道寻址。

控制线用来决定8位内部和外部数据总线上信息传送的方向,即控制把CPU的控制命令或输出的数据送到相应的通道,或把状态信息或输入数据送到CPU。

8255A的读/写控制逻辑的作用,是从CPU的地址和控制总线上接受输入的信号,转变成各种命令送到A组或B组控制电路进行相应的操作。

(3)8255A的引脚信号

1.与外设相连的

PA7~PA0:

A口数据信号线。

PB7~PB0:

B口数据信号线。

PC7~PC0:

C口数据信号线。

2.与CPU相连的

RESET:

复位信号。

当此信号来时,所有寄存器都被清除。

同时三个数据端口被自动置为输入端口。

D7~D0:

它们是8255A的数据线和系统总线相连。

CS:

片选信号。

在系统中,一般根据全部接口芯片来分配若于低位地址组成各种芯片选择码,当这几位地址组成某一个低电平,于8255A被选中。

只有当有效时,读信号写才对8255进行读写。

RD:

读信号。

当此信号有效时,CPU可从8255A中读取数据。

WR:

写信号。

当此信号有效时,CPU可向8255A中写入数据。

A1、A0:

端口选择信号。

8255A内部有3个数据端口和1个控制端口,共4个端口。

规定当A1、A0:

为00时,选中A端口;为01时,选中B端口;为10时,选中C端口;为11时,选中控制口。

表2-18255A的技术参数

标识符

最小

最大

测试条件

输入低电平(VIL)

-0.5V

0.8V

输入高电平(VIH)

2.0V

5V

输出低电平(VOL)DB

0.45V

IOL=2.5mA

输出低电平(VOL)PER

0.45V

IOL=1.7mA

输出高电平(VOH)DB

2.4V

IOH=-400μA

输出高电平(VOH)PER

2.4V

IOH=-200μA

驱动电流

-1.0mA

-4.0mA

REXT=750Ω,VEXT=1.5V

供应电流

120mA

IIL(INPUTLOADCURRENT

±10μA

VIN=0V~5V

IOFL(Outputfloatleakage

±10μA

VOUT=0.45~5V

输入最低电压:

min-0.5V,max0.8V,输入最高电压:

2.0V。

输出最低电压:

0.45V,输出最高电压:

2.4V。

(3)8255A的方式控制字

D7D6D5D4D3D2D1D0

1

0

0

1

0

0

0

0

1:

工作方式A口方式0输入B口方式0输出

C口高4位输出C口低4位输出

图2-18255A的方式控制字

方式0的工作特点是通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定为输入或输出。

其功能为:

①两个8位通道:

通道A、B。

两个四位通道:

通道C高四位和低四位;

②任何一个通道可以作输入/输出;

③输出是锁存的;

④输入是不锁存的;

⑤在方式0时各个通道的输入/输出可有16种不同的组合。

2)显示器件LED

(1)LED在本设计中的作用

LED功能分析如下:

1.物理构造:

LED发光二级管,采用砷化镓、镓铝砷、和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。

2.工作原理:

当在发光二极管PN结上加正向电压时,PN结势垒降低,载流子的扩散运动大于漂移运动,致使P区的空穴注入到N区,N区的电子注入到P区,这样相互注入的空穴与电子相遇后会产生复合,复合时产生的能量大部分以光的形式出现。

3.数字成像:

将七个发光管进行组合,排列成数字图形8,再根据需要控制七个管的亮与灭,即可显示出定义数字。

LED技术参数如下:

1.发光二极管的压降一般为1.5~2.0V,其工作电流一般取10~20mA为宜。

2.发光二极管的发光颜色有:

红色光、黄色光、绿色光、红外光等。

3.发光二极管应用电路有四种,即直流驱动电路、交流驱动电路、脉冲驱动电路、变色发光驱动电路。

表2-2LED显示管段选码编码表

数字

DP

g

f

e

d

c

b

a

二进制编码(字形)

0

0

0

1

1

1

1

1

1

3FH

1

0

0

0

0

0

0

1

1

06H

2

0

1

0

1

1

0

1

1

5BH

3

0

1

0

0

1

1

1

1

4FH

4

0

1

1

0

0

1

1

0

66H

5

0

1

1

0

1

1

0

1

6DH

6

0

1

1

1

1

1

0

1

7DH

7

0

0

0

0

0

1

1

1

07H

8

0

1

1

1

1

1

1

1

7FH

E

0

1

1

1

1

0

0

1

79H

图2-2LED数码管及其框图

上面两图分别为外形图和原理图,当七段数码管点亮其中几段可显示数字和简单的字符,将七段数码管负极连接到一起称为公共端,而发光二极管的正极则分别由引脚引出,便于控制哪个发光二极管点亮。

由于将8个发光二极管负极全部连接在一起,称为共阴极数码管,还有将8个发光二极管的正极连接在一起,故称之为共阳极数码管。

本次实验用的数码管需动态扫描显示,其接口电路将所有数码管的笔画控制段与a~h同名端连在一起,接到一个并行端口,每个公共极COM端由独立的I/O线控制,CPU向字模输出口送出字形码时,所有数码管接收到相同的字形码,究竟哪个数码管显示,取决于每个LED的COM端,所谓动态扫描,就是显示一位信息时,其他位不能显示,必须采用分时方法,轮流控制COM端。

3)微动开关

(1)微动开关及其编码

开关高电平:

+5V、低电平:

0V

表2-4微动开关及其编码

编码

数字

编码

数字

0000

0

1000

8

0001

1

1001

9

0010

2

1010

A

0011

3

1011

B

0100

4

1100

C

0101

5

1101

D

0110

6

1110

E

0111

7

1111

F

4)硬件总逻辑图及其说明

图2-3硬件电路图

说明:

8086的数据线接8255A的数据线,8086的地址线形成地址通过译码器与8255A的片选信号相连。

8086的分别接8255A的A0,A1。

PA0—PA7接微动开关K0—K7。

PB0—PB7接显示管的a—dp,PC0—PC7接LED显示装置,用于位选择。

3、控制程序说明

3.1控制程序设计思路说明

1)定义十六进制数字符的七段代码表。

2)初始化8255A的工作方式。

3)置LED灯全灭。

4)输出显示零表示等待抢答。

5)读A口状态,若有两个或两个以上的抢答信号,显示输出E。

若只有一个抢答信号,则查询输出其编号。

6)继续观察LED是否输出显示零,若为0,进行下一次抢答。

3.2程序流程图

图3-1程序流程图

3.3控制程序

.MODELTINY

PCIBAR3EQU1CH;8位I/O空间基地址(它就是实验仪的基地址,也为DMA&32BITRAM板卡上的8237提供基地址)

Vendor_IDEQU10EBH;厂商ID号

Device_IDEQU8376;设备ID号

.STACK100

.DATA

IO_Bit8_BaseAddressDW?

msg0DB'BIOS不支持访问PCI$'

msg1DB'找不到StarPCI9052板卡$'

msg2DB'读8位I/O空间基地址时出错$'

COM_ADDDW00F3H;控制口偏移量

PA_ADDDW00F0H;PA口偏移量

PB_ADDDW00F1H;PB口偏移量

PC_ADDDW00F2H;PC口偏移量

.CODE

START:

MOVAX,@DATA

MOVDS,AX

NOP

CALLInitPCI

CALLModifyAddress;根据PCI提供的基地址,将偏移地址转化为实地址

movdx,COM_ADD;控制口地址

movax,90h;10010000

outdx,ax

step0:

movax,00h;禁止显示LED全灭

movdx,PB_ADD;B口地址输出

outdx,ax

step3:

movdx,PB_ADD

movax,3fh;输出显示0表示允许抢答

outdx,ax

movdx,PC_ADD;设置数码管位选码

moval,7Fh;只使用最左边一位

outdx,al

step2:

movdx,PA_ADD;通过A口地址读输入信号

inax,dx;读A口状态

notax;取反,因为微动开关按下为低电平有效

cmpal,00h;检测是否有输入

jzstep2;没有则继续检测

movdl,al

movbl,00h;bl用于记录有几人同时按键

movcx,8h;循环次数

test1:

rordl,1;循环右移一位,末位进CF

jnctest2;若没有进位,即CF=0则跳转retest继续测试

incbl;有进位,bl自加记录同时抢答人数

test2:

looptest1;循环测试8次

cmpbl,1

jaerror;有一人以上同时抢答,则报错

movbl,00h;bl清零

next:

roral,1;有抢答信号

jcprint;有则输出

incbl;bl用来记录是哪一位选手

jmpnext

error:

movbl,8

print:

moval,bl

leabx,ssegment;查表

xlat;将BX的内容(代码表首地址)+AL的内容(表格偏移量)作为有效地

;址,最终内容存入AL中

movdx,PB_ADD

outdx,al

movdx,PC_ADD;设置数码管位选码一位显示

moval,7Fh;只使用最左边一位

outdx,al

step5:

movdx,PA_ADD

inax,dx

cmpal,0ffh;检测开关是否已松开

jnzstep5;没有松开继续检测

jmpstep6

step6:

moval,cl

movdx,PB_ADD

outdx,al

movdx,PC_ADD;设置数码管位选码一位显示

moval,0FEh;只使用最右边一位

outdx,al

callDL500ms;调用延迟程序

jmpstep0

ssegment:

db06h

db5bh

db4fh

db66h

db6dh

db7dh

db07h

db7fh

db79h

DL500msPROCNEAR

pushax

pushdx

movdx,500

movah,0ffh

int21h

popdx

popax

RET

DL500msENDP

InitPCIPROCNEAR

MOVAH,00H

MOVAL,03H

INT10H;清屏

MOVAH,0B1H

MOVAL,01H

INT1AH

CMPAH,0

JZInitPCI2

LEADX,msg0

InitPCI1:

MOVAH,09H

INT21H

JMPExit

InitPCI2:

MOVAH,0B1H

MOVAL,02H

MOVCX,Device_ID

MOVDX,Vendor_ID

MOVSI,0

INT1AH

JNCInitPCI3;是否存在StarPCI9052板卡

LEADX,msg1

JMPInitPCI1

InitPCI3:

MOVDI,PCIBAR3

MOVAH,0B1H

MOVAL,09H

INT1AH;读取该卡PCI9052基地址

JNCInitPCI4

LEADX,msg2

JMPInitPCI1

InitPCI4:

ANDCX,0FFFCH

MOVIO_Bit8_BaseAddress,CX

RET

InitPCIENDP

ModifyAddressPROCNEAR

ADDCOM_ADD,CX

ADDPA_ADD,CX

ADDPB_ADD,CX

ADDPC_ADD,CX

RET

ModifyAddressENDP

Exit:

MOVAH,4CH

INT21H

ENDSTART

4、上机调试过程

4.1硬件调试

按照硬件连接图接好线后,运行程序,发现LED显示的不是0,经检查发现二进制编码是11000000而并不是0的编码00000011。

后在老师提示下,原因是PB口的连接的并不是a-dp,而是dp-a。

后采用将数据线反过来接,结果正确显示0。

4.2软件调试

 刚开始调试程序时,总是出现错误,后经老师提示,原因是新实验箱没有8086CPU,它采用的运行方式是上位机的CPU模拟实现下位机的8086CPU实现功能,所以加入了老师给的地址转换程序,得以实现。

继而相应的删去了一些重复不必要的初始化程序。

4.3联机调试

在联机调试时出现了两个问题:

(1)起初一直坚守“1”有效,运行错误,后仔细阅读了实验箱使用说明,认识

微动开关按下时的状态为“0”,松开为“1”,于是在程序中读信号的代码段中入NOTAX,将读取的微动开关按位取反,以使得开关按下“0”时有效,弹开“1”时无效,结果成功实现。

(2)程序反复调试并运行了多次,几经测试,起初都正确,可是后来同样正确的程序运行LED显示却出现故障,下位机重置仍然不行,后经老师指导,将上位机重启,问题被解决。

4.4调试结果及问题的提出

(1)数码管显示数字的笔画不对,尽管数码管编码正确无误,经检查原因是控制编码段的定位变化未能有效设置好,随着程序的运行,值变化混乱,后经单步调试,仔细分析并改正优化,成功解决。

(2)在联机调试结果正确后,全速运行情况下,LED显示始终会全部显示,后在老师的提示下,程序中显示代码段的位置出加入movax,00h,movdx,PB_ADD以禁止显示,LED全灭,同时应考虑到人眼视网膜的分辨率,设置显示延迟时间,以便于观察。

(3)在老师的要求下,应该能够观察到选手的编号。

而微动开关按下是瞬间的且选手不能一直按着开关不放,对于观察结果不方便,故老师要求在最右边的一位LED上显示出选手编号。

设计时在测试微动开关是否松开后,再加一个B口输出在LED上显示。

开始的很多次,在单步调试中可以观察到在最右边的LED上显示了选手编号,而在全速运行中却看不到。

经老师检查后,发现在显示程序后立刻执行了LED全灭,在人眼的能力内是看不到的,在老师的建议下,加入一个延迟程序即可解决问题。

5、设计结果分析及问题讨论

5.1课程设计结果

在允许抢答信号发出后,七段LED显示器上会显示首先按下开关的选手编号。

由于响应速度非常快,若有两人或两人以上同时拨下开关是,七段LED显示器上始终会灵敏的显示第一个按下开关的抢答者,当起初有两个或以上选手抢答,则显示“E”表示出错,抢答无效。

5.2设计结果分析

由于芯片8255的三个端口A、B、C全部都被使用,起初的主控思想便无法实现,从8255A的A口读入输入信号,即为选手编号。

然后从B口输出抢答结果到七段LED显示器上,C口控制LED数码管的位控制,采用最左边的一位LED显示,并设置延迟在最右边的一位LED上显示最终的抢答者号码,便于观察和比较。

5.3问题讨论

在考虑如何确定有几人同时拨下开关的问题中,用BL记下在A口的输入信号,将BL循环右移八次,看八位选手中有哪几位发出了抢答动作,即所在的位有效,有几个一被移出,就有多少个人同时按下开关。

将BL与1比较,如果大于1,说明有多人同时抢答,七段LED显示器上显示E,表示抢答无效。

否则,满足一位选手动作,LED显示器即会显示选手编号。

5.4收获、体会和建议

5.4.1关于可编程芯片8255A

通过本次课程设计我熟练掌握了可编程并行接口芯片8255A的内部结构,数据总线缓冲器,三个八位端口,A口、B口和C口的控制电路,读写控制逻辑,工作方式,分别有:

方式0--基本输入输出方式,方式1—选通输入输出方式,方式2—双向选通输入输出方式,初始化,包括方式选择控制字,C口按位置位控制字及其应用。

8255A有三个八位的输入输出端口,由于内部电路原因,通常将A口(PA0-PA7)作为输入用,B口(PB0-PB7)作为输出用,C口作为辅助用,本实验,在设计程序时,选取8255A的工作方式0,通过A口输入,B口输出LED段控制,C口输出LED位控制。

5.4.2七段LED显示器

通过这次课程设计我掌握了作为终端显示的七段LED显示器物理构造,明白了其工作原理,数字成象的原理及相关技术参数。

5.4.3汇编语言

通过这

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1