微机原理课程设计抢答器的设计.docx
《微机原理课程设计抢答器的设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计抢答器的设计.docx(12页珍藏版)》请在冰豆网上搜索。
![微机原理课程设计抢答器的设计.docx](https://file1.bdocx.com/fileroot1/2022-11/30/b1238fa7-e577-425b-beee-3ca1f9b26358/b1238fa7-e577-425b-beee-3ca1f9b263581.gif)
微机原理课程设计抢答器的设计
《微机原理及接口技术》
课程设计报告
题目:
竞赛抢答器的设计
学院:
中北大学信息与通信工程
专业:
通信工程
小组成员:
指导教师:
丁永红
2008年06月23日
1、设计目的
1)了解竞赛抢答器的设计原理和方法。
2)掌握定时/计数器、并行接口芯片和中断控制的工作原理与使用方法。
2、所用元器件
1)80X86系列微机一台。
2)定时、计数器、并行接口芯片。
3)基本TTL电路芯片,七段数码管。
3、设计内容及步骤
1)设计要求
(1)可供4组同时抢答,由按钮控制。
(2)能显示出最先抢答的组号,而对其他组的抢答不予理睬。
(3)对主持人未曾按启动扭之前就按抢答按钮的犯规组,亮红灯警告。
(4)对抢答后的回答时间进行计时控制,如回答超时,则以音响报警。
2)撰写设计报告
(1)各个硬件模块设计和原理图
(2)各个软件模块设计和流程图
4、硬件设计
1)总体设计
由于本次实验要用到数码显示、中断控制、倒计时等功能,故初步分析,需要8255、8253等芯片。
经过小组成员讨论,认为本实验的关键是准确判断出最先抢答者的信号并锁存,而同时不理睬其他抢答者的信号。
为此,可将4个抢答按钮信号通过一个4位并行输入口接至微机中。
当主持人启动抢答过程后,微机通过该并行输入口循环对4路抢答信号进行采样。
当采样到那一组的抢答信号已经发出,则立即停止采样,并记录下该组的组号,每路抢答按钮电路可以参考下图进行设计。
图1路抢答按钮电路
由图可知,当4组均未按下抢答按钮时,送入到并行接口的4位抢答状态都是0,而当微机采样到这4位数据不为0时,则表示有一组获得了抢答机会,然后通过逐位口查询个位口状态,即可判断出哪一组抢答成功,最后利用并行输出接口将抢答成功的组号现实出来.在实验中,可以仅用一位7段数码管来显示抢答选手的组号.
为了对抢答后的回答时间进行计时控制,可以利用一个可编程定时计时器,先置计数初值,再计时,当计时时间到后,由并行接口输出一个响铃信号提示抢答选手的回答时间已到。
由于本系统要求对犯规的组亮红灯警告,所以要设置一个启动按键,在主持人按下启动按键之前,如果有抢答钮被按下,则该抢答选手犯规,可以通过并行接口输出一个信号使该组的红色发光二级管点亮以示该组选手犯规。
综上所述,本实验的硬件电路可参考下图3示的硬件结构示意图进行设计。
图2硬件结构示意图
其中8255与8086连接图如下图4
图38086与8255连接图
实验原理图见附录一。
2)芯片介绍
(1)8255芯片
8255A内部有3个相互独立的8位数据端口,即端口A﹑端口B﹑端口C。
设计人员可以用程序是他们分别作为输入端口或输出端口。
不过,每个端口有着各自的特点。
端口A对应1个8位数据输入锁存器/缓冲器和1个8位数据输出锁存器/缓存器。
所以,用端口A作为输入或输出时,数据均可以受到锁存。
端口B对应1个8位数据输入锁存器/缓冲器和1个8位数据输出锁存器/缓存器。
端口C对应1个8位数据输入锁存器/缓冲器和1个8位数据输出锁存器/缓存器。
这样,当端口C作为输入端口时,对数据不作锁存,而作为输出端口时,对数据进行锁存。
在使用中,端口A﹑端口B和端口C可以相互独立,分别作为输入或者输出端口,也可以由端口C配合端口A﹑端口B作输入端口或者输出端口,此时,端口A和端口B作为独立的输入端口或输出端口,而端口C则配合端口A和端口B工作。
具体得讲,端口C常常通过控制命令被分成两个4位端口,每个4位端口包含1个4位的输入缓冲器和1个4位的输出锁存器/缓冲器,他们分别用来位端口A和端口B提供控制信号和状态信号。
方式选择控制字
D7
D6D5
D4
D3
D2
D1
D0
A组方式
A口
1—输入
0—输出
PC7~PC4
1—输入
0—输出
B组方式
0—方式0
1—方式1
B口
1—输入
0—输出
PC3~PC0
1—输入
0—输出
1有效
标志位
00—方式0
01—方式1
1—方式2
(2)8253芯片
8253的主要性能:
8253可编程定时/计数器芯片时Intel公司生产的微型计算机通用外围芯片之一。
采用24个引脚,双列直插式封装,其主要特性如下:
采用NMOS工艺,用单一的+5V电源供电。
片内有3个独立的16位减法计数器(或计数通道),每个计数器又可分为两个8位的计数器。
计数频率为0~5MHz。
两种计数方式,即二进制和BCD方式计数。
6种工作方式,即可对系统时钟脉冲计数实现定时,又可对外部事件进行计数。
可由软件或硬件控制开始计数或停止计数。
图48253引脚图
5、软件设计
1)主程序设计
实验的软件设计可以分为主程序﹑启动中断服务程序和定时中断服务程序三部分。
启动中断服务程序完成的任务较单一,只需要对启动标志进行记录。
例如,可以在主程序中设置一个启动标志并清0,当启动按钮被按下后,系统进入中断服务程序。
这时,只需要在中断服务程序中将启动标志置1即可,系统在返回主程序后将查询该标志,以确定抢答是否开始。
在主程序中,当判断有抢答钮被按下时,需要判断启动标志是否为1,如果系统还没有启动,则抢答结果为无效,且判断该抢答组犯规。
此时,将通过并行接口送出点亮该组红色发光二极管的信号,提示有犯规行为。
另外在主程序中,还要对抢答回答时间进行初始化赋值,当回答开始后,如果回答超时,则要通过并行接口送出响铃警报信息以提示超时。
在定时中断服务程序中,主要是完成对回答问题时间的计时操作时间计数器,当定时器每发一次定时中断时,时间计数器加1。
图5主程序流程图
2)主程序
显示最先抢答组号及是否犯规程序
AAA:
MOVAL,85H;8255A的方式控制字,A口输出,B口输入
MOVDX,04A6H;控制口的地址送DX
OUTDX,AL;初始化8255A
AA:
MOVDX,04A2H
INAH,DX;读PC3是否为0
ANDAH,40H;如果为零,说明抢答开始
CMPAH,00H;转到读PB口的程序
JZAA0;PB口低电平有效
JNZAA6
AA0:
MOVDX,04A2H;读B口的数据
INAL,DX
CMPAL,FFH;读PB口值是否为FFH
JZAA0;如果是,表示没人抢答,继续等
CMPAH,FEH;1号抢答成功
JZAA1
CMPAH,FDH;2号抢答成功
JZAA2
CMPAH,FDH;3号抢答成功
JZAA3
CMPAH,F7H;4号抢答成功
JZAA4
AA1:
MOVDX,04A0H
MOVAL,79H;显示1
JMPAA5
AA2:
MOVDX,04A0H
MOVAL,24H;显示2
JMPAA5
AA3:
MOVDX,04A0H
MOVAL,30H;显示3
JMPAA5
AA4:
MOVDX,04A0H
MOVAL,19H;显示4
JMPAA5
AA5:
MOVDX,04A6H
INAH,DX;读PC3是否为1
ORAH,DFH;如果为1说明已复位
CMPAH,FFH;转到初始状态,否者等待
JZAAA
JNZAA5
AA6:
MOVDX,04A2H;读B口的数据
INAL,DX
CMPAL,FFH;读PB口值是否为FFH
JZAA;如果是,表示没人抢答犯规,继续等
CMPAH,FEH;1号抢答犯规
MOVDX,04A6H
MOVAL,09H;LED1亮
CMPAH,FDH;2号抢答犯规
MOVDX,04A6H
MOVAL,0AH;LED2亮
CMPAH,FDH;3号抢答犯规
MOVDX,04A6H
MOVAL,0DH;LED3亮
CMPAH,F7H;4号抢答犯规
MOVDX,04A6H
MOVAL,0FH;LED4亮
8253初始化程序
AA7:
MOVAL,15H;写方式控制字(设计数器0工作于方式2)
MOVDX,04B6H;控制口地址
OUTDX,AL;控制字送8253控制寄存器
MOVDX,04B0H;计数器0端口地址
MOVAL,60;将计数初值N=60写入计数器0
OUTDX,AH
6、心得体会
在这一周的微机原理课程设计里,我们小组完成了竞赛抢答器的设计,基本实现所有功能,通过这短短一周的实践,我们锻炼了自己动手设计软硬件的能力,大家分工明确,合作愉快,虽然我们每个人的分工很细致,但是在编写程序以及调试过程中还是遇到了很多问题,在同组同学和其他同学以及老师的帮助下,我们发现问题的所在,并进行修改,按时完成设计内容。
通过这次课程设计,我们了解到,即使书本上的知识掌握的更好,在将它付诸实践时,还是会遇到各种各样的问题。
这次课程设计就是一次对自己所学知识的总结和综合应用,使我们对微机原理这门课程有了更深的了解。
7、参考文献
[1]李顺增,《微机原理及接口技术》,机械工业出版社,2006年第一版
[2]冯博琴,《微型计算机原理及接口技术》,清华大学出版社
[3]王远,《模拟电子技术》,机械工业出版社
8、任务分工(具体到某些模块)
0506240117刘轩负责用七段数码管显示出最先抢答组号
0506240141孟令章负责用七段数码管显示出最先抢答组号
0506240107李影负责犯规控制
0506240120葛晶负责犯规控制
0506240103侯久俊负责计时控制
0506240110于佳负责计时控制
附录
程序2
;程序名字:
抢答器
;功能:
用户键(即抢答者):
p32,p33;主持人键:
p34,
;用法:
1.主持人按开启键,以示开始;2.用户抢答,若到了10秒还没有按键就退出;3.显示用户号
;4.等待主持人清除显示;5.清除后蜂鸣,以示庆祝
xsdatbitp1.4 ;定义驱动74164的数据脚为p1.4
xsclkbitp1.5 ;74164的时钟
gw bitp1.0 ;个位显示控制脚
sw bitp1.1 ;十位
;#############################################
org00h
ajmpmain
org0bh
ajmpt0rup ;定时10秒钟,预防主持人已经按了开启键后无用户按键而死机
org1bh
ajmpt1rup ;用于喇叭响0.5秒钟
org30h
main:
movsp,#4fh
movr3,#0 ;用于显示
movr4,#0 ;用于定时,r2:
蜂鸣
movp0,#0ffh
movp3,#0ffh
movie,#8ah
movtmod,#11h
movth0,#3ch
movtl0,#0b0h ;每50ms中断一次
movth1,#3ch
movtl1,#0b0h ;每50ms中断一次
mova,p3
orla,#11110011b
cjnea,#0ffh,main ;以免有一或多个用户一直按住键
loop0:
jbp3.4,loop0
movp0,#0 ;主持开启键:
p3.4,表示抢答开始
setbtr0 ;定时10秒钟,预防主持人已经按了开启键后无用户按键而死机
loop1:
cjner4,#200,ll;检测用户按键,若定时10s时间到了,即结束本次抢答
ajmpmain
ll:
mova,p3
orla,#11110011b
cjnea,#0ffh,ff
ajmploop1 ;等待用户按键
ff:
clrtr0 ;若有用户按键,就清除定时
rrca
rrca
loop4:
rrca
incr3
jcloop4 ;将对应用户按键转化成用户号
nn:
acalldisplay
jbp3.4,nn ;等待主持人清除
acalldelay
kk:
jnbp3.4,kk ;等待主持人放开,以免主持人开启键与清除键相混淆
acalldelay
acallfm ;蜂鸣,以做庆祝,同时将p0口全灭
movp0,#0ffh
ajmpmain
;#############################
fm:
;蜂鸣
setbtr1
clrp3.7
loop2:
cjner5,#20,tt
movr5,#0 ;清零以备下次使用
setbp3.7 ;关闭扬声器,以免使它处于导通状态而不能发声
;用cpl反转驱动三极管的通断来发声要注意, ;在停止发声时一定要关闭三极管,不要让三极管长期处在导通状态!
;否则耗电很大,三极管发热严重,从而引起声音变小或无声。
clrtr1
ret
tt:
cplp3.7
movr1,#122
djnzr1,$ ;蜂鸣器都有谐振频率,一般在2kHz左右,不在这个范围声音就很小
ajmploop2
;#############################
t0rup:
movtl0,#0b0h ;用于防死机定时
movth0,#3ch
incr4
reti
;###############################
t1rup:
;用于蜂鸣定时
movtl1,#0b0h
movth1,#3ch
incr5
reti
;#############################
display:
MOVDPTR,#XSTAB
MOVA,r3 ;取得数据
MOVCA,@A+DPTR ;提取字模
ACALLDSOUT ;调用送出子程序
CLRGW
ACALLDS1MS ;调用显示1MS延时程序
SETBGW
MOVA,#0
MOVCA,@A+DPTR ;提取字模
ACALLDSOUT ;送出
CLRSW
ACALLDS1MS ;显示1MS
SETBSW
acalldelay
ret
;#############################
delay:
movr6,#00h
dl1:
movr7,#00h
djnzr7,$
djnzr6,dl1
ret
;---送出循环----------
DSOUT:
MOVR0,#8 ;传送一个字节8位
DSLOOP:
RLCA ;左移
MOVXSDAT,C ;送数据到数据口
SETBXSCLK ;送一时钟
CLRXSCLK
DJNZR0,DSLOOP
RET
;---显示延时----------
DS1MS:
MOVR1,#10
DS1LO:
MOVR2,#100
DJNZR2,$
DJNZR1,DS1LO
RET ;延时返回
;---------------------------------------------------------
;显示字表(共阴)
XSTAB:
DB 3FH,06H,5BH,4FH ;"0","1","2","3"
DB 66H,6DH,7DH,07H ;"4","5","6","7"
DB 7FH,6FH,77H,7CH ;"8","9","A","B"
DB 39H,5EH,79H,71H ;"C","D","E","F"
;******************************************************
end