八路抢答器汇编程序 微机课程设计.docx
《八路抢答器汇编程序 微机课程设计.docx》由会员分享,可在线阅读,更多相关《八路抢答器汇编程序 微机课程设计.docx(27页珍藏版)》请在冰豆网上搜索。
![八路抢答器汇编程序 微机课程设计.docx](https://file1.bdocx.com/fileroot1/2023-2/2/f6b683c1-a5fe-4bdf-9b76-dacd6f2eeb85/f6b683c1-a5fe-4bdf-9b76-dacd6f2eeb851.gif)
八路抢答器汇编程序微机课程设计
课程设计报告
课程微机原理课程设计
题目竞赛抢答器
系别物理与电子工程学院
年级09级专业电子信息工程
班级1班学号160409105,6,7,8
学生姓名
指导教师职称
设计时间
目录
第一章关于抢答器的概述及设计要求2
1.1数字抢答器的简介2
1.2课程设计要求2
1.3实现功能3
第二章总体设计4
2.1功能需求分析4
2.2可行性分析4
2.3硬件总体设计4
2.3.1硬件器材4
2.3.2内存单元地址4
2.4软件流程图5
第三章硬件设计6
3.1所选芯片介绍6
3.1.1可编程并行接口接口芯片8255A6
3.1.2可编程定时器/计数器82537
3.2系统所选用各芯片的连接8
3.2.1各芯片与CPU的连接8
3.2.2各芯片之间的连接和与外设的连接8
第四章软件设计9
4.1程序流程9
4.2子程序清单9
4..2.1芯片8255初始化:
9
4..2.2芯片8253初始化:
9
4..2.3获取选手号码子程序:
9
4.2.4数码管显示子程序:
10
4.2.5扬声器鸣叫时间:
11
第五章结果分析12
结束语13
附录14
参考文献14
主程序清单14
第一章关于抢答器的概述及设计要求
1.1数字抢答器的简介
抢答器是在竞赛、文体娱乐活动(抢答活动)中,能准确、公正、直观地判断出抢答
者的机器。
通过抢答者的指示灯显示、数码显示和警示显示等手段指示出第一抢答者。
随着科学技术的不断发展,促使人们学科学,学技术,学知识的手段多种多样,抢答器作为一种强大工具,已经广泛应用于各种知识能力竞赛场合,例如选拔人才、评选优胜及各种智力竞赛等。
目前知识竞赛之类的活动愈加频繁,凡是有知识竞赛类的活动那么也就必然离不开抢答器。
针对主持人提出的问题,各组一般要进行必答和抢答,对于抢答,要判定哪组先按键,为了公正,这就要有一种逻辑电路抢答器作为裁判员。
这种数字抢答器杜绝了人为因素的影响,实现了抢答公平公正的原则。
所以操作简单、经济实用的小型数字抢答器将流行于各类竞赛中,成为小规模知识竞赛的首选。
1.2课程设计要求
内容:
用微机原理实验箱,在外接8个按键的抢按下,让7段LED数码管显示抢答者编号,并使喇叭响一下。
具体要求:
(1)通过实验箱上8255芯片接收来自实验箱按键的信息,将该信息送入8088CPU,由CPU判断是哪个按键按下;
(2)8088CPU将判断出的按键信息转换为7段显示码,并通过8255芯片发送到7段显示模块显示;
(3)在显示按键信息的同时通过实验箱上8253芯片产生一定频率的方波信号发送到音频功放模块,发出声音;
(4)提高要求:
能对几乎同时发生的按键进行判别,找到先按的键。
1.3实现功能
当没有选手按下按键时,LED数码管显示“-”符号,表示此时可以进行抢答,当抢答开始,选手按下8路抢答器中的任何一路开关时,8段LED数码管上显示最先按开关的选手的号码,同时蜂鸣器鸣叫一段时间以示已经有人抢答成功。
当一位选手抢答成功时,数码管上显示这位选手的号码,此时其他选手再按下按键不会产生任何作用,系统进入锁死状态,当抢答成功的选手退下按键时,LED数码管显示“-”符号,表示系统已经初始化,可以进行下一轮抢答。
第二章总体设计
2.1功能需求分析
系统必须准确判断抢答者的信息,根据按键信息判断被按下的按键的序号,在LED数码管上显示相应的数字反映抢答信息,同时蜂鸣器响一声以示有选手抢答成功。
2.2可行性分析
将8个抢答器按键连接到8255芯片的PA0~PA7,当8组均未按下抢答按钮时,送入到并行接口的8位抢答状态都是0,当检测到按键发生变化时,即微机采样到这8位数据不为0时,微机通过该并行输入口循环对8路抢答信号进行采样。
当采样到哪一组的抢答信号已经发出,则记录下该组的组号,从PB口输出组号所对应的LED数码管段码,同时PC7端口连接至定时器的门控信号端口,使定时器工作,输出端连接到蜂鸣器,蜂鸣器鸣叫一段时间后关闭,若系统检测到按键信息全为0时,表明选手已经把按键退下,则系统重新开始检测按键状态,进入下一个抢答环节。
2.3硬件总体设计
2.3.1硬件器材
所需器件:
可编程并行接口芯片8255、可编程定时器/计数器8253,扬声器,一个LED显示器,8个按键。
2.3.2内存单元地址
①可编程并行接口接口芯片8255A的端口地址为0ff28H、0ff29H、0ff2AH、0ff2BH。
②可编程定时器/计数器8253的端口地址为0040H、0041H、0042H、0043H。
2.4软件流程图
显示“-”符号
从8255A口读取按键状态
Y
Y
无按键按下
Y
N
LED显示1
按键1按下
LED显示3
LED显示4
LED显示5
LED显示6
LED显示7
LED显示2
Y
N
按键2按下
N
按键3按下
Y
Y
N
按键4按下
N
Y
按键5按下
Y
N
按键6按下
N
按键7按下
N
LED显示8
Y
按键8按下
蜂鸣器响一声
检测PA口是否全为0
N
按键全为0
Y
图1系统软件流程图
第三章硬件设计
3.1所选芯片介绍
3.1.1可编程并行接口接口芯片8255A
①8255A内部结构
8255A芯片是一个采用NMOS工艺制造的40引脚双列直插式(DIP)封装组件。
8255A有3个8位数据端口,即A口、B口及C口,它们都可以分别作为输入口或输出口使用;A组控制与B组控制;读/写控制逻辑;数据总路线缓冲器。
②8255A主要的外部引脚
图28255A引脚图
PA7~PA0:
A口的8条I/O线。
8条线只能同时作为输入或输出,不能分开使用,可设置成双向口,也只有A口允许这样做。
PB7~PB0:
B口的8条I/O线。
不可以设置成双向口,其它和A口一样。
PC7~PC0:
C口的8条I/O线。
不可以设置成双向口,但它可以分拆为两组即高4位和低4位,这两组可以任意设置为输入或输出。
除了作为独立的I/O线外,C口还经常为A口、B口服务,配合A口、B口作联络线使用。
A1、A0:
端口地址选择信号。
用于选择8255A的3个数据端口和一个控制口。
当A1A0=00时,选择端口A;为01时,选择端口B;为10,选择端口C;为11时,选择控制口。
③8255A工作方式
方式0:
基本的输入/输出方式。
A口、B口、C口都可以工作在些方式下。
④8255A方式控制字格式
表18255方式控制字
D7
D6、D5
D4
D3
D2
D1
D0
1
A口
A口
C口高4位
B口
B口
C口低4位
00方式0
01方式1
1x方式2
0输出
1输入
0输出
1输入
0方式0
1方式1
0输出
1输入
0输出
1输入
3.1.2可编程定时器/计数器8253
①8253的内部结构
8253采用NMOS工艺制成,有24个引脚,所有输入、输出端均TTL电平兼容,单一电源(Vcc=+5V)供电,最高计数速率为2.6MHz。
它包括3个计数器(即计数器0、1、2)、数据总路线缓冲器、读/写逻辑以及控制寄存器等4个部分。
②8253的外部引脚
图38253引脚图
A1、A0:
地址输入线,用来址8253内部的4个端口,即3个计数器和1个控制字寄存器与CPU系统地址线相连。
CLK0、CLK1、CLK2:
时钟脉冲输入端,用于输入定时脉冲或计数脉冲信号。
CLK可以是系统的时钟脉冲,也可以由系统时钟分频或者其他脉冲源提供。
当用于定时时,这个脉冲必须是均匀的、连续的、周期精确的,而用于计数时,这个脉冲可以是不均匀的、断续的、周期不定的。
GATE0、GATE1、GATE3:
门控输入端,用于外部控制计数器的启动计数和停止计数的操作。
两个或两个以上计数器连用时,可用此信号同步,也可用于与外部某信号的同步。
OUT0、OUT1、OUT2:
计数输出,当计数器从初值开始完成计数操作进,OUT引脚输出相应的信号。
③8253的工作方式
方式0:
减1计数到0,产生中断请求信号。
方式3:
减1计数到初值的1/2,方波发生器。
④8253方式控制字格式
表28253方式控制字
D7D6
D5D4
D3D2D1
D0
00选计数器0
01选计数器1
10选计数器2
00计数器锁存
01只读写低8位
10先读写高8位
11先读写低8位
再读写高8位
000方式0
001方式1
X10方式2
X11方式3
100方式4
101方式5
0二进制计数
1BCD计数
3.2系统所选用各芯片的连接
3.2.1各芯片与CPU的连接
8255A、8253的数据总线D7~D0端、
端、
端、
端、
端、INT端分别与CPU的D7~D0数据总线、片选端、
端、
端、
端、INTR端。
8255A、8253的A1、A0端分别与CPU地址线的A1、A0端相连。
3.2.2各芯片之间的连接和与外设的连接
8255A的A口的PA7~PA0依次接“按键1”~“按键8”,B口的PB7~PB0通过驱动器1接到LED显示器,8253的GATE0端接PC7端口,CLK0接1MHz,OUT0的输出接入接扬声器。
第四章软件设计
4.1程序流程
设定好8255、8253的方式控制字后,根据读取8255PA端口的状态值,获取选手的具体号码,从而转到相应程序,将号码所对应的段码输出到PB端口进行数码管显示。
同时将PC7置1,使相连的GATE0门控信号为1,通道0进行计数,输出到扬声器进行鸣叫。
4.2子程序清单
4..2.1芯片8255初始化:
PORT_AEQU0FF28H
PORT_BEQU0FF29H
PORT_CEQU0FF2AH
PORT_CTLEQU0FF2BH
MOVAL,90H;8255控制字A组方式0输入
MOVDX,PORT_CTL;B组方式0输出C口输出
OUTDX,AL
4..2.2芯片8253初始化:
MOVAL,00110110B;8253控制字计数器0读写字
MOVDX,43H;工作方式方式3
OUTDX,AL
MOVAX,5000;计数器初值
MOVDX,40H
OUTDX,AL
MOVAL,AH
OUTDX,AL
4..2.3获取选手号码子程序:
在硬件电路中,8255的PA端口连接开关按键,根据读取PA的状态可以判断出按下的是哪个键(按下为高电平),根据进行移位操作,可得出选手的具体号码。
MOVDX,PORT_A;读取A口状态(按键状态)
INAL,DX
CMPAL,00000000B;无按键按下返回LED1
JELED1
CMPAL,00000001B;按键1
JELP1
CMPAL,00000010B;按键2
JELP2
CMPAL,00000100B;按键3
JELP3
CMPAL,00001000B;按键4
JELP4
CMPAL,00010000B;按键5
JELP5
CMPAL,00100000B;按键6
JELP6
CMPAL,01000000B;按键7
JELP7
CMPAL,10000000B;按键8
JELP8
JMPLED1;返回
4.2.4数码管显示子程序:
根据获取得到选手的号码,跳转相应程序,将段码输出给PB端口。
LP1:
MOVDX,PORT_B;数码管显示1
MOVAL,11111001B
OUTDX,AL
LP2:
MOVDX,PORT_B;数码管显示2
MOVAL,10100100B
OUTDX,AL
…
LP8:
…
LED的管脚
对应的字形
dp、g、f、e、d、c、b、a
11111001
10100100
10110000
10011001
10010010
11100010
11111000
10000000
1
2
3
4
5
6
7
8
4.2.5扬声器鸣叫时间:
PUSHDX
PUSHAX
MOVAL,00001111B;8255PC7口置1,使蜂鸣器工作
MOVDX,PORT_CTL
OUTDX,AL
POPAX
POPDX
MOVBL,00000000B
MOVCX,0FFFFH;延时一段时间
LPP2:
LOOPLPP2
MOVCX,0FFFH
LPP3:
LOOPLPP3
PUSHDX
PUSHAX
MOVAL,00001110B;8255PC7口置0,蜂鸣器停止工作
MOVDX,PORT_CTL
OUTDX,AL
POPAX
POPDX
第五章结果分析
连接硬件电路后,控制程序输出得到相应结果:
图5硬件显示结果
由上结果可看出,当按键3按下的时候,数码管显示数字3,扬声器进行鸣叫,在无按键按下时,LED数码管显示符号“-”,可得程序设计及硬件连接能达到题目要求。
结束语
转眼间一周微机课程设计转眼就结束了,通过这次课程设计,我学会了许多课本上学不到的东西,同时也加强了我的动手、思考和解决问题的能力,受益匪浅。
课程设计过程中,我觉得是对课本知识的巩固和加强,由于课本上的知识太多,同时平时课间又没有好好的运用额理解个芯片的功能,而且考试的内容有限,所以在这次课程设计过程中,我们了解很多元件的功能,对其在电路中的使用有更多的认识。
从前的学习过程过于浮浅,只是流于表面的理解,而现在要做课程设计,就不得不要求我们对所用到的知识有更深层次的理解。
因为课程设计的内容比及书本中的理论知识而言,更接近于现实生活,而理论到实践的转化往往是一个艰难的过程,它犹如一只拦路虎,横更在我们的面前。
但是我们毫不畏惧,因为我们相信我们能行。
前几天的主要任务是设计程序。
虽然在设计中会遇到这样那样的问题,有时认为是正确的,而在仿真中却出现了这样那样的问题。
软件部分做好了,下面就是接线啦,这可是一个比较麻烦的事。
在接线的时候要细心和耐心、恒心,这样才能做好事情。
同时接好了一步电路以后,最为重要的是检查这部分是不是接对了。
在做硬件测试的时候,八个数字基本能显示,但还是有点缺陷,比如显示数字1的时候,显示的不对,后来在老师帮助下解决了这个问题。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
此次课程设计,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高,都受益非浅,今后的制作应该更轻松,自己也都能扛的起并高质量的完成项目。
最后,我要感谢给予我们精心辅导的老师。
附录
参考文献
[1].朱金钧麻新旗·《微型计算机原理及应用技术》[M]·北京:
机械工业出版社
主程序清单
PORT_AEQU0FF28H
PORT_BEQU0FF29H
PORT_CEQU0FF2AH
PORT_CTLEQU0FF2BH
CODESEGMENT
ASSUMECS:
CODE
ORG11B0H
START:
MOVAL,90H;8255控制字A组方式0输入
MOVDX,PORT_CTL;B组方式0输出C口输出
OUTDX,AL
MOVAL,00110110B;8253控制字计数器0读写字
MOVDX,43H;工作方式方式3
OUTDX,AL
MOVAX,5000;计数器初值
MOVDX,40H
OUTDX,AL
MOVAL,AH
OUTDX,AL
LED1:
MOVBL,00000001B;设置全局变量BL
MOVAL,00001110B;PC7端口置0
MOVDX,PORT_CTL
OUTDX,AL
MOVDX,PORT_B;在数码管显示符号"-"
MOVAL,10111111B
OUTDX,AL
MOVDX,PORT_A;读取A口状态(按键状态)
INAL,DX
CMPAL,00000000B;无按键按下返回LED1
JELED1
CMPAL,00000001B;按键1
JELP1
CMPAL,00000010B;按键2
JELP2
CMPAL,00000100B;按键3
JELP3
CMPAL,00001000B;按键4
JELP4
CMPAL,00010000B;按键5
JELP5
CMPAL,00100000B;按键6
JELP6
CMPAL,01000000B;按键7
JELP7
CMPAL,10000000B;按键8
JELP8
JMPLED1;返回
LP1:
MOVDX,PORT_B;数码管显示1跳转LP9
MOVAL,11111001B
OUTDX,AL
JMPLP9
LP2:
MOVDX,PORT_B;数码管显示2跳转LP9
MOVAL,10100100B
OUTDX,AL
JMPLP9
LP3:
MOVDX,PORT_B;数码管显示3跳转LP9
MOVAL,10110000B
OUTDX,AL
JMPLP9
LP4:
MOVDX,PORT_B;数码管显示4跳转LP9
MOVAL,10011001B
OUTDX,AL
JMPLP9
LP5:
MOVDX,PORT_B;数码管显示5跳转LP9
MOVAL,10010010B
OUTDX,AL
JMPLP9
LP6:
MOVDX,PORT_B;数码管显示6跳转LP9
MOVAL,10000010B
OUTDX,AL
JMPLP9
LP7:
MOVDX,PORT_B;数码管显示7跳转LP9
MOVAL,11111000B
OUTDX,AL
JMPLP9
LP8:
MOVDX,PORT_B;数码管显示8跳转LP9
MOVAL,10000000B
OUTDX,AL
JMPLP9
LP9:
MOVDX,PORT_A;读取按键状态
INAL,DX
CMPBL,00000001B;全局变量BL与1比较相同时跳转
JEDELAY2
CMPAL,00000000B;检测按键是否清零,清零时跳DELAY1
JEDELAY1
JMPLP9;重复检测A口状态
DELAY1:
MOVCX,0FFFFH;延时返回LED1
LPP1:
LOOPLPP1
JMPLED1
DELAY2:
;PC7口置1,8253开始工作
PUSHDX
PUSHAX
MOVAL,00001111B
MOVDX,PORT_CTL
OUTDX,AL
POPAX
POPDX
MOVBL,00000000B
MOVCX,0FFFFH;延时一段时间后,8253停止工作
LPP2:
LOOPLPP2
MOVCX,0FFFH
LPP3:
LOOPLPP3
PUSHDX
PUSHAX
MOVAL,00001110B;PC7口置0,8253停止工作
MOVDX,PORT_CTL
OUTDX,AL
POPAX
POPDX
JMPLP9;返回LP9
CODEENDS
ENDSTART
课程设计独创性声明:
学生签名:
指导教师评语:
课程设计成绩:
指导教师签名:
教研室意见:
教研室主任签名: