![微机原理课程设计_抢答计时器[1].doc_第1页](http://file.renrendoc.com/FileRoot1/2020-1/14/b23fc96f-ae00-49d2-9ccc-fb56f019f2e2/b23fc96f-ae00-49d2-9ccc-fb56f019f2e21.gif)
![微机原理课程设计_抢答计时器[1].doc_第2页](http://file.renrendoc.com/FileRoot1/2020-1/14/b23fc96f-ae00-49d2-9ccc-fb56f019f2e2/b23fc96f-ae00-49d2-9ccc-fb56f019f2e22.gif)
![微机原理课程设计_抢答计时器[1].doc_第3页](http://file.renrendoc.com/FileRoot1/2020-1/14/b23fc96f-ae00-49d2-9ccc-fb56f019f2e2/b23fc96f-ae00-49d2-9ccc-fb56f019f2e23.gif)
![微机原理课程设计_抢答计时器[1].doc_第4页](http://file.renrendoc.com/FileRoot1/2020-1/14/b23fc96f-ae00-49d2-9ccc-fb56f019f2e2/b23fc96f-ae00-49d2-9ccc-fb56f019f2e24.gif)
![微机原理课程设计_抢答计时器[1].doc_第5页](http://file.renrendoc.com/FileRoot1/2020-1/14/b23fc96f-ae00-49d2-9ccc-fb56f019f2e2/b23fc96f-ae00-49d2-9ccc-fb56f019f2e25.gif)
已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机实验及课程设计报告 微机实验及课程设计课程设计报告目 录一课程设计目的与要求3二方案论证与原理设计3三详细设计4四方案实现与测试6五分析与总结71、基本要求设计一个用于智力竞赛的抢答计时器,同时能测试人的反应(响应)时间。按启动钮,测试开始,2个八段码倒计时开始(如从10秒或20秒倒计时),一旦看到灯亮,参赛双方(或三方)分别按不同的抢答按钮参与抢答。一旦其中一位按下按钮,相应的显示灯(LED)亮并响“嘟”的一声,此时若其它按钮按下均无效。若一直到计数到零,无一人按下按钮,则抢答结束(以后再按抢答钮无效)。立即按测试钮,88点阵显示反应时间xx.xx秒(88点阵用红色代表秒,绿色代表0.01秒,交替显示)。要求:(1)编制1个随机数产生子程序,由随机数决定从按启动钮到对应LED亮的时间(如在3秒15秒之间内任意变动),使被测试者对LED亮的时间无法预见,以确保测试结果的可信;(2)必须在见到LED亮后按测试钮才有效,即一直按着按钮或提前按下按钮无效;(3)反应时间显示xx.xx秒,准确到百分之一秒。2、设计思路将系统分成3个大的模块:倒计时模块,计时模块,显示模块。1)倒计时模块:通过一个子程序段获得随机数,并用这个随机数倒计时;2)计时模块:倒计时结束时灯亮,开始计数,当有人按下键并正确时,锁存所用时间;3)显示模块:将锁存的时间用八段码显示出来。一. 课程设计目的与要求1、课程设计目的 上学期在学习微机原理的基础上,我们一直在实践微机实验及课程设计教程这门实验课程,从指令与汇编语言基础开始,我们熟悉了调试工具的使用,汇编语言程序设计,I/O与存储器,简单输入输出,中断,计数/定时器,以及模数/数模转换。平时的实验都是对各个单元单一功能的验证,并没有他们之间的联系,最后的综合课程设计将让我们学以致用,把学到的各个章节的知识根据需要联系在一起,并实现一定的功能。同时也培养我们遇到问题,思考问题,解决问题的能力。化零为整,在实践中深化对所学内容的认识。 2、基本要求设计一个用于智力竞赛的抢答计时器,同时能测试人的反应(响应)时间。按启动钮,测试开始,2个八段码倒计时开始(如从10秒或20秒倒计时),一旦看到灯亮,参赛双方(或三方)分别按不同的抢答按钮参与抢答。一旦其中一位按下按钮,相应的显示灯(LED)亮并响“嘟”的一声,此时若其它按钮按下均无效。若一直到计数到零,无一人按下按钮,则抢答结束(以后再按抢答钮无效)。立即按测试钮,88点阵显示反应时间xx.xx秒(88点阵用红色代表秒,绿色代表0.01秒,交替显示)。要求:(1)编制1个随机数产生子程序,由随机数决定从按启动钮到对应LED亮的时间(如在3秒15秒之间内任意变动),使被测试者对LED亮的时间无法预见,以确保测试结果的可信;(2)必须在见到LED亮后按测试钮才有效,即一直按着按钮或提前按下按钮无效;(3)反应时间显示xx.xx秒,准确到百分之一秒。3、进一步设计要求修改以上设计使进一步能测试人对不同事物的反应(响应)时间。如功能为:按启动钮,测试开始,一旦红灯亮,立即按红灯测试钮,一旦绿灯亮,立即按绿灯测试钮,但黄灯亮为干扰。88点阵显示反应时间xx.xx秒。若按错钮,则显示出错并响“嘟”一声。要求:(1)编制2个随机数产生子程序,1个决定从按启动钮到LED 亮的时间,另一个决定亮何种颜色灯;(2)同样要求在见到LED亮时按测试钮才有效;(3)在倒计数时附有音乐伴奏。二.方案论证与原理设计1、设计思路将系统分成3个大的模块:倒计时模块,计时模块,显示模块。1)倒计时模块:通过一个子程序段获得随机数,并用这个随机数倒计时;2)计时模块:倒计时结束时灯亮,开始计数,当有人按下键并正确时,锁存所用时间;3)显示模块:将锁存的时间用八段码显示出来。2、进一步设计随机数程序我用读系统时钟的方法,得到随机数后一旦测试开始,通过loop倒计时,倒计时结束时,灯亮表示可以开始抢答。这里灯亮可以有两种选择:红灯和黄灯,我用随机数末位进行选择,0则红灯亮,1则绿灯亮。这也变相实现了进一步设计要求中两个随机数子程序的要求。灯亮以后我用8253的计数器开始计数,当有人按下键且正确时,计数停止,得到一个计数值。对这个计数值进行处理以后可以相应的通过8*8点阵的行选和红选黄选使时间在点阵上交替显示。由于系统板可以提供的时钟是1MHZ或2MHZ,这样计数器计出的数值再转化比较繁琐,我选择用8253的另一个计数器输入1MHZ的时钟,采用方式3产生100HZ的方波,这样每个脉冲0.01秒,计数得到的值单位为0.01秒,可以直接用来显示。三.详细设计1、硬件连接图PB0 PA0PB1 PA1PB2 PA2PB3 PA3PB4 PA4PB5 PA5PB6 PA6PB7 PA7红灯GATE1 2A0H8*8点阵 2A8H绿灯 2B0H8255OUT2CLKCLK1 CLK2GATE1 GATE2 OUT1 OUT2 PB05V (CLK来自系统脉冲1MHZ) CLK1 82532、主程序流程图与显示子程序流程图主持人开始? 初始化芯片 产生随机数是随机数末位为0? 红灯亮 倒计时开始计时 可以抢答有人按下?显示时间正确? 是是是 绿灯亮 否 否 否 退出程序 否 否 开始 置初值 得到所要显示数字的行码 输出行码 输出颜色列码行号加1 列码左移一位延时是否到?是否4次?是否4次? 退出是 否 图一.主程序流程图 图二.显示子程序流程图3、初始定义在程序的数据段里定义好8253、8255各需要用到的端口地址,定义点阵的行选和列选地址。4、初始化首先显示提示信息,等待测试开始。8253:用到计数器1、2,计数器1的控制字为01110001B,采用方式0,BCD码十进制计数,计数器2的控制字为10110111B,采用方式3,二进制计数。计数器2初值选择10000,产生0.01s脉冲,输出作为计数器1的时钟信号。8255:控制字为10000000B,A口B口均做输出;B口接GATE1,需要开始计数时初值设为01H。5、倒计时通过读系统时钟得到一个随机数,启动后通过loop倒计数,计完时灯亮,可以开始抢答。这里倒计数时我并没有用数码管显示,这样才更有不可预见性。6、计反应时间倒计时结束后灯亮,此时PB0输出高电平,使计数器1开始工作,当有键按下且是正确的时PB0输出低电平,计数器1停止工作。8253计数器2产生的0.01s时钟使得计数器1计得得时间是以0.01s为单位,用0减去计数停止时的数即为从开始计数到按键之间的时间。分别获得这个时间各位数字存入不同的变量,就可以在点阵上交替显示这些变量来得到反应时间。实验中数字显示形式为xx:xx秒,红色数字显示为秒,黄色显示为0.01秒,四个数字交替显示就是测试者的反应时间。7、显示模块8*8点阵上数字的现实原理:字形09与段码有对应关系,例如数字5:8fh,89h,89h,0f9h,将数字09的段码依次放在变量numx中,显示方法:行选地址-2A0H,红选地址-2A8H,黄选地址-2B0H,要显示某一个数字,对应到位选信号00h,04h,08h,0ch,10h,14h,18h,1ch,20h,24h中的一个,映射到段码变量中就是所要显示数字的段码,依次扫描显示。显示模块的中心思想就是扫描,利用人眼的视觉暂留,看到4列LED灯都亮,显示相应的信息。四. 方案实现与测试现在提交的程序与验收时的有所不同,验收时并没有实现全部功能,如反应时间的显示是通过中断显示在屏幕上,算是变相的实现。此后我又完善了一些功能,如点阵显示,随机亮红灯或绿灯。基本完成了实验要求。实验现象:开始时若按“q”,则退出测试;若按其他键,重新显示提示信息,重新开始;若按“1”,测试开始,等待,当有灯亮时,如为红灯按“2”,为绿灯按“3”,如果按键准确,点阵显示时间,如果按错,屏幕显示“wrong!”,“Continue? (Y/N)”。程序编译无误后连接实验箱进行调试,调试时首先分别单独连接点阵,8255,8253进行简单功能的验证,验证无误保证硬件不会影响到方案的实现。对显示模块的调节花了比较多的精力,刚开始点阵不显示,但硬件验证的时候点阵是没问题的,所以我先改为屏幕显示,通过中断使在运行到某一些关键步骤的时候输出一定的信息,功能验证无误后再连接点阵。其次是delay环节的时间,因为数字的显示是通过扫描完成的,所以delay时间不能太长也不能太短,通过不断的调试终于得到了合适的delay值。五分析与总结通过这四周的课程设计,我学到了不少也发现不少问题。很大的一个问题是我没有很好的利用TD等调试工具,造成的后果就是不能及时发现问题出在哪里,所以效率相对较低,如果以后还有类似的课题,我一定要好好利用这些工具。另外隔了一个假期,对有一些基本知识和功能有一些陌生了,所以熟悉这些也花了不少时间,这是以后需要改进的地方。我从不断想方案,否定一个再试一个,到完善程序,到不断调试出结果,最后能完成基本功能,我还是比较欣慰的。这和许多实践类课程一样,重在实践,当你写完程序觉得逻辑功能都很完美的时候,只是走出了一小步,当调试时会遇到各种各样意想不到的问题,在不断改进的过程中才能对理论有更好的把握。对于这次实验而言,它将原来有些枯燥的基本实验实例化了,而且需要我们根据要求把它们有机联系在一起,实际设计了利用微机系统的一些应用。同时我了解到微机,乃至以后单片机的一些设计和应用的方法。虽然我没能把系统功能非常完美的呈现,但在这个过程中我从不断的错误中吸取很多教训,这些对以后的学习时间都是很有帮助的。当然,如果时间更加充裕的话,我相信我的设计会做的更加完善。参考书目:1 东南大学微机系统与接口课程组,微机实验及课程设计教程(试用版2.0),2009年2月2 杨素行 等编著,微型计算机系统原理及应用(第2版),北京,清华大学出版社,2004年附汇编代码PORTEQU0E000H-280HTIM_CTL EQU PORT+283H ;8253控制寄存器TIMER0 EQU PORT+280H ;计数器0 1 2TIMER1 EQU PORT+281HTIMER2 EQU PORT+282HCW_TIMER0 EQU 00110000B ;计数器0控制字,方式0CW_TIMER1 EQU 01110001B ;计数器1控制字,方式0CW_TIMER2 EQU 10110111B ;计数器2控制字,方式3 P8255_CTL EQU PORT+28BH ;8255控制寄存器,A口输出P8255A EQU PORT+288H ;8255 A B C口P8255B EQU PORT+289HP8255C EQU PORT+28AHLED EQU PORT+2A0HLED_R EQU PORT+2A8H;红选LED_Y EQU PORT+2B0H;黄选 DATE SEGMENT ;数据段MESS1 db * XXXXXXXXX*,0dh,0ah,$MESS2 dB Start -press 1,0DH,0AH db red light on -press 2,0dh,0ah db green light on -press 3,0dh,0ah db stop -ANY KEY,0DH,0AH db quit -press q,0dh,0ah,$ MESS3 DB Wrong!,0dh,0ah,$MESS4 DB Continue? (Y/N),0DH,0AH,$num DB 00h,04h,08h,0ch,10h,14h,18h,1ch,20h,24hnumx db 0Ffh,81h,81h,0ffh,0ffh,00h,00h,00h,0f1h,91h,91h,9fh,0ffh,91h,91h,91h,0ffh,08h,08h,0f8h,8fh,89h,89h,0f9h,8fh,89h,89h,0ffh,0ffh,80h,80h,80h,0ffh,89h,89h,0ffh,0ffh,89h,89h,0f9hNUM1 DB ?num2 DB ?NUM3 DB ?num4 DB ?DATE ENDS;=STAC SEGMENT PARA STACK STACK ;堆栈段STA DW 32 DUP(?)TOP EQU LENGTH STASTAC ENDSCODE SEGMENTASSUME CS:CODE,DS:DATE,SS:STAC,ES:DATESTART: MOV AX,DATEMOV DS,AXMOV ES,AX MOV AH,09HMOV DX,OFFSET MESS1 ;显示提示信息INT 21HRANDOM PROC PUSH CX PUSH DX PUSH AX STI MOV AH,0 ;读时钟计数器值 INT 1AH MOV AX,DX MOV BH,AH MOV BL,AL ;BX作随机数 POP AX POP DX POP CX RETRANDOM ENDPSTART1: ; 计数器1计反应时间 MOV DX,TIM_CTLMOV AL,CW_TIMER1OUT DX,AL ;计反应时间; 计数器2产生0.01秒时钟MOV DX,TIM_CTLMOV AL,CW_TIMER2OUT DX,ALMOV DX,TIMER2 MOV AX,10000 ;计数初值为10000,输入1MHZ,输出100HZOUT DX,AL MOV AL,AH OUT DX,AL;8255 A OUT,B OUTMOVDX,P8255_CTLMOVAX,10000000B ;A口输出,PA03红灯,PA47绿灯OUTDX,AL MOV AH,09H ;显示提示信息 MOV DX,OFFSET MESS2 INT 21H mov ah,08h int 21h cmp al,q ;按q,测试退出 jz quit01 mov ah,08h ;等待键盘产生“1” int 21h cmp al,1 ;按1,测试开始 JNZstart1;其他键,重新开始 CALL RANDOM and bl,01h cmp bh,0 ;随机数末尾数等于零则跳至红灯,否则绿灯 jz redlight ;=greenlight: MOV DX,P8255AMOV AL,00H OUT DX,AL ; 灯暗CALL RANDOM MOV AH,BH ; 倒计时 MOV AL,BL ;bl随机数MOV CX,AX ;ax-cx LOOP $ MOV DX,TIMER1 MOV AX,00H ;计数器1初植OUT DX,ALOUT DX,ALMOVAL,01H;B口初值,PB0接GATE1,使GATE1高MOVDX,P8255BOUTDX,AL MOV DX,P8255A MOV AL,0F0H OUT DX,AL ;绿灯亮 jmp greenpressquit01: jmp quit redlight: MOV DX,P8255A MOV AL,00H OUT DX,AL ; 灯暗 CALL RANDOM MOV AH,BH ; 倒计时 MOV AL,BL ; bx随机数 MOV CX,AX LOOP $ ;$操作符表示当前地址,这条指令不断执行,直到cx=0 MOV DX,TIMER1 MOV AX,00H ;初植 OUT DX,AL OUT DX,AL MOVAL,01H;B口初值,PB0接GATE1 MOVDX,P8255B OUTDX,AL MOV DX,P8255A MOV AL,0FH OUT DX,AL ;红灯亮 jmp redpress greenpress: mov ah,08h ;等待键盘输入“3” int 21h cmp al,3 MOVAL,00H ;PB0变低,停止计数 MOVDX,P8255B OUTDX,AL jnz wrongmsg;不正确显示错误信息 jmp lockk;正确则跳至显示程序 redpress: mov ah,08h ;等待键盘输入“2” int 21h cmp al,2 MOVAL,00H ;PB0变低,停止计数 MOVDX,P8255B OUTDX,AL jnz wrongmsg;不正确显示错误信息 jmp lockk;正确则跳至显示程序QUIT00:JMP START1lockk: MOV DX,TIMER1 IN AL,DX XCHG AL,AH INAL,DX XCHGAL,AH ;AX为计数后值MOV BX,0 SUB BX,AX;相减得到反应时间 MOVAX,BXAND AX,000FHMOV NUM1,AL;将要输出的值分别放入num1和num2,num3,num4(低位到高位)MOVAX,BXAND AX,00f0H MOV CL,4SHR AX,CLMOV NUM2,ALMOVAX,BXAND AX,0f00H MOV CL,8SHR AX,CLMOV NUM3,ALMOVAX,BXAND AX,0f000H MOV CL,12SHR AX,CLMOV NUM4,AL LOP0: CALL DISPMOV DL,0FFHMOV AH,06H ;直接控制台I/O,al=输入字符的asc码,zf=0INT 21HJZ LOP0QUIT: mov ah,09h mov dx,offset mess4 int 21h mov ah,08h int 21h cmp al,y jz QUIT00 cmp al,Y ;y/Y重新开始 jz QUIT00 MOV AX,4C00H ;否则返回dos INT 21Hwrongmsg: MOV AH,09H ;显示出错信息 MOV DX,OFFSET MESS3 INT 21H JMP quit;=; 以下为显示子程序段DISP PROC NEAR MOVBL,NUM4;时间显示形式:xx.xx秒CALLDISP_R;红色代表秒MOVBL,NUM3;黄色代表0.01秒CALLDISP_R;四个数字交替显示MOVBL,NUM2CALLDISP_YMO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合唱拓展课活动方案
- 合肥金店国庆活动方案
- 吉安炒粉活动策划方案
- 同学聚会歌舞秀活动方案
- 名品发艺公司年会策划方案
- 名牌会员活动方案
- 后勤激励活动方案
- 向阳中学旅游活动方案
- 吴川海滨中学活动方案
- 告别拖延活动策划方案
- 《食品经营许可证》申请书(范本)
- 2024至2030年中国博物馆行业现状调研及未来发展规划分析报告
- 广东省揭阳市2024年小升初语文真题试卷及答案
- 化工过程安全管理导则培训
- 2024年西藏事业单位真题
- 兽医传染病学考试题(含答案)
- 医学微生物学(北华大学)智慧树知到期末考试答案2024年
- MOOC 人工智能导论-西安电子科技大学 中国大学慕课答案
- (正式版)HGT 3217-2024 搪玻璃上展式放料阀
- 人工智能导论单元练习题1及答案
- 金融数据分析智慧树知到期末考试答案2024年
评论
0/150
提交评论