微机系统与接口技术抢答器综合实验.doc_第1页
微机系统与接口技术抢答器综合实验.doc_第2页
微机系统与接口技术抢答器综合实验.doc_第3页
微机系统与接口技术抢答器综合实验.doc_第4页
微机系统与接口技术抢答器综合实验.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机接口实验报告题目:抢答器综合实验学号:成绩姓名: 日期:1.【设计目的】 1)综合运用已学过的芯片进行自主性的设计;2)强化对各种芯片功能的掌握以及深入体会其工作的原理;3)学会利用芯片进行各种控制技术的实现。4)利用之前实验中所用到的芯片8255A,8259A,8253A来实现竞赛抢答器。2.【设计内容】用实验箱上的按钮S0S7代替抢答器按钮,利用8255A接口芯片读入按钮的状态;设置5秒倒计时,倒计时结束开始抢答,在七段数码管上抢答成功那个的组号(07)显示出来,并使得蜂鸣器响1秒钟;在倒计时5秒还没结束时,若抢答则丧失抢答资格,即该组按键无效。3.【设计环境】STAR系列实验仪一套、PC机一台、8255A芯片、8253A芯片、8259A芯片4.【设计思路】1)倒计时实现:利用8253A计数器0用2MHZ的时钟频率产生2kHZ的方波,计数器1用2KHZ的时钟频率产生1HZ的方波;以此方波作为8259A的中断源IR2,中断发生时,将中断发生标志位Flag置1,作为判断是否到达一秒的依据;每一秒产生一次中断,循环5次可实现5秒倒计时。2)抢答情况采集:利用8255A的A口连接到G6区按键,采集按键状态,输入数据AL并在数码管显示出按下的健的组号;B口接G6区发光管,将A口采集到的按键状态AL输出显示,以此可以观看到是哪组按下的键,实验时可验证数码管显示是否正确,应用上可作为抢答成功提示。3)组号显示:8255A的A口采集的按键状态AL,有按键对应位上低电平,否则高电平;AL取反后仅有键按下的位上为高电平,通过右移,可计算出按键的号数。4)犯规处理:设置犯规标志FG,初值为0,倒计时期间,若有键按下,即为犯规;犯规时8255A的A口读到的数据的AL在对应位上为低电平,为记下本次犯规号数,将AL取反后犯规号对应位为高电平,其它为低电平,用OR AL,FG可将犯规的号数记下来,保存AL即可。5)蜂鸣控制:利用8255A的PC7接蜂鸣器,在抢答成功的时通过PC7复位发出蜂鸣,延时一秒后,通过置位停止蜂鸣。6)抢答进入一轮控制:利用8255A的PC0接单脉冲可以利用单脉冲的高、低电平来控制是否进入下一轮抢答。5.【实验步骤】5.1实验装置的连线说明 8255A:B4:CS、A1、A0 - A3:CS3、A2、A1 JP56 - G6:JP74 JP53 - G6:65 PC7 - 蜂鸣器 PC0 - 单脉冲 8253:C5:CS、A0、A1 - A3:CS1、A0、A1 CLK0 - 2M OUT0 - CLK1 OUT1 - B3:IR2(8259) GATE0、GATE1- VCC 8259A:B3:CS、A0 - A3:CS7、A0 INT、INTA - ES8088:INTR、INTA 8279:E5:CS、A0 - A3:CS5、A0 CLK - 2M B、C - G5:B、C5.2编写实验程序及流程图主程序流程图:开始8255写控制字99HPC7置位不蜂鸣犯规者清零、5-CX显示秒数、倒计时是否有犯规按键Y处理违规按键N倒计时是否结束YN是否有人按键YN是否犯规NY无效输出号码并蜂鸣8253、8259初始化,开中断是否1秒NNYY下一轮?注:8253初始化、8259初始化,中断服务程序在之前的实验中已经做过类似的,本次实验当中比较简单,这里省略。5.3运行调试程序1) 按电路设计正确连接STAR的电路。2) 打开PC机中的星研软件,并载入源程序。3) 对程序进行编绎,链接。4) 运行程序,模拟抢答器控制,观察LED灯的变化。6.【设计结果】本次设计实验完成设计内容,实现了竞赛抢答器的基本功能,并且具有较大的实用性。倒计时开始后可以在数码管上看到倒计时秒数变化,在5秒倒计时之内按下键的号数发光管灯亮,在5秒倒计时之后该号数失去抢答资格。当然,其他号数依然有抢答机会,数码管上将显示出抢答成功的号数,并产生一秒的蜂鸣。利用单脉冲的高低电平可控制进入下一轮抢答。7.【实验小结】本次的实验利用所学知识,分析竞赛抢答器实际实用常用功能,提出设计内容及要求,并设计硬件电路编程实现。在课本里的要求之上又添加了设置倒计时、在倒计时之间不能抢答、对抢答的犯规者作出取消资格而且利用8255的C口高位输出在抢答成功后发出蜂鸣,C口低位输入利用单脉冲来控制是否进行下一轮抢答等功能,实验相对比较顺利。实验中遇到问题一:抢答成功的号数的显示。刚开始对读到的按键情况AL存放数据分析不透彻,导致输出号数错误;经过一番思考,才想出对AL先做NOT AL处理后逐位右移计算在AL变成0之前要右移的次数对应07八个编码。问题二:实现犯规者取消资格的功能。在判断是否发生一秒中断期间,不断读取A口数据,判断是否有按键;若有按键,表示违规,输出B口,并对A口数据并进行如下操作:NOT AL;违规按键OR AL,FGMOV FG,AL这样,FG中就记录了犯规者的编号,最后在倒计时结束之后读取的A口数据或上FG数据就可以实现对犯规者取消资格的功能。本次设计不足之处:对于犯规者取消抢答资格,这样也带来了一个问题:如果倒计时未结束所有人都犯规,即8个按键都有键按下,那么程序就会进入死循环,永远转不出来。当然这样的情况在实际使用中很难碰到,本次实验并没有对此进行改进。这样的问题改进的方法很多,比如可以设置开始抢答3秒后要是还没有人按键,那么本论抢答无效,进入下一轮抢答;有了之前设计的基础,要实现这个功能也很简单,如:CHECK:MOV DX,0D000HIN AL,DXOR AL,FG;犯规者按键无效CMP AL,0FFH;FF时无健按下JZ CHECK MOV CX,3CHECK:MOV DX,0D000HIN AL,DXOR AL,FG;犯规者按键无效CMP AL,0FFH;FF时无健按下JNZ OKLOOP CHECKOK:;有键按下,输出最后,原本是准备利用8251将抢答成功的号数发送并接收回来显示在数码管的另外一LED上,从而模拟抢答器将抢答结果提交给后台的功能。首先必须用8253的计数器2产生方波作为8251的接收发送数据数率,初始化8251,并实现自发自收;但是由于延时的原因会导致程序进入死循环无法运行,故而取消了8251。其接线图见附录。附件: 【设计程序】 .MODELTINYEXTRN display8:NEAREXTRN GetBCDKey:NEAR.STACK 100.DATAFLAGDB 0BUFDB 8 DUP(10H)KEYDB 0HSHKEYDB 0HFGDB 0H.CODESTART: MOV AX,DATAMOV DS,AX MOV ES,AXMOV DX,0D006H;8255 A口接开关(按键)B口接发光管,输出显示按下的按键,PC7接蜂鸣器MOV AL,99H;A口方式0输入,B口方式0输出,C口高位输出,低位输入OUT DX,ALMOV AL,0FFHMOV DX,0D002HOUT DX,ALMOV AL,0FH;PC7置位,不蜂鸣MOV DX,0D006HOUT DX,ALCALL C8253CALL C8259A;8259A初始化CALL IRQ2 STISTART1:MOV FG,0;犯规者清零MOV CX,5;倒计时秒数MOV BUF,CLMOV BUF+1,10HMOV BUF+2,10H MOV BUF+3,10HMOV BUF+4,10HMOV BUF+5,10HMOV BUF+6,10HMOV BUF+7,10HLEA SI,BUFCALL DISPLAY8MOV FLAG,0;开始倒计时DLOP5s:MOV DX,0D000HIN AL,DXCMP AL,0FFH;FF时无健按下JZ DLNEXTMOV DX,0D002HOUT DX,AL;B口输出按下的健NOT AL;违规按键OR AL,FGMOV FG,ALDLNEXT:CMP FLAG,0JZ DLOP5sMOV AL,CLDEC ALMOV BUF,ALMOV BUF+1,10HMOV BUF+2,10H MOV BUF+3,10HMOV BUF+4,10HMOV BUF+5,10HMOV BUF+6,10HMOV BUF+7,10HLEA SI,BUFCALL DISPLAY8MOV FLAG,0LOOP DLOP5sCHECK:MOV DX,0D000HIN AL,DXOR AL,FG;犯规者按键无效CMP AL,0FFH;FF时无健按下JZ CHECKMOV DX,0D002HOUT DX,AL;B口输出按下的健NOT ALMOV BL,0TKEY:SHR AL,1JZ SHOWKEY;显示号数INC BLJMP TKEYSHOWKEY:MOV KEY,BL;保存号码MOV BUF+3,BLMOV BUF+1,10HMOV BUF+2,10H MOV BUF,10HMOV BUF+4,10HMOV BUF+5,10HMOV BUF+6,10HMOV BUF+7,10HLEA SI,BUFCALL DISPLAY8MOV AL,0EH;PC7复位,蜂鸣MOV DX,0D006HOUT DX,ALMOV FLAG,0;延时一秒DLOP1s1:CMP FLAG,0JZ DLOP1s1MOV AL,0FH;PC7置位,不蜂鸣MOV DX,0D006HOUT DX,ALMOV DX,0D004HHOLD:IN AL,DXTEST AL,01HJZ HOLDJMP START1C8253PROC NEAR;8253初始化;设置计数器0用2MHZ的时钟频率;产生2kHZ的方波2M/2K=1000MOV DX,0F003HMOV AL,37H;00110111计数器0,写16位,方式3,BCD计数OUT DX,ALMOV DX,0F000HMOV AL,00H;写入计数初值低8位OUT DX,ALMOV AL,10H;写入计数初值高8位OUT DX,AL;设置计数器1用2KHZ的时钟频率;产生1HZ的方波2K/1=2000MOV DX,0F003HMOV AL,77H;01110111计数器1,写16位,方式3,BCD计数OUT DX,ALMOV DX,0F001HMOV AL,00H;写入计数初值低8位OUT DX,ALMOV AL,20H;写入计数初值高8位OUT DX,ALRETC8253ENDPC8259APROC NEAR;8259A初始化MOV DX,09000H MOV AL,13H;设置ICW1,即中断请采边沿触发OUT DX,ALMOV DX,09001H MOV AL,0AH;ICW2,即中断类型码高五位为00001BOUT DX,ALMOV AL,0DH ;ICW4,即不采用特殊的完全嵌套方式,缓冲方式,也不用自动中断结束方式,cpu为8088OUT DX,ALMOV AL,0FBH;OCW1,IR2不被屏蔽OUT DX,AL RETC8259A ENDPIRQ2PROC NEAR;中断服务程序入口地址填入中断向量表的程序段MOV AX,0MOV ES,AXMOV DI,28H;过程的中断向量在表内的偏移量MOV AX,OFFSET INTACLDSTOSWMOV AX,CSSTOSWRETIRQ2ENDPINTAPROC NEARPUSH DXPUSH AXMOV FLAG,1MOV DX,09000HMOV AL,20H;OCW2,EOIOUT DX,ALPOP AXPOP DXIRETINTAENDPEND START【利用8251的接线图】8255: B4 CS-A3: CS3 A1A0-A2A1 PA-G6:按键 PB-G6:发光管

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论