汇编语言小设计——抢答器
汇编语言与微机接口小设计——>抢答器(6路)
随着电子技术的发展,计算机在现代科学技术的发展中起着更加重要的作用。各种技术都离不开计算机,计算机已经在人们生活的各个方面普及了。本课程设计是微机原理及接口技术的应用。运用所学的微机原理和接口技术知识完成六路竞赛抢答器。通过硬件与软件的结合,用我们刚刚学过的汇编语言编写程序模拟分析了六路抢答器出现的各种情况。该抢答器以主持人为中心,操作抢答器的开始与复位,选手们可以根据主持人的提示进行抢答,该抢答器基本能满足现在市场所需抢答器的需要,设计简单,成本低,适合小型抢答场合。
功能如下:
硬件测试通过。8259能够实现中断。8254能够实现呼吸灯。8255能够控制L8—L15的亮与灭。
启动与复位。主持人按KK1+键表示表示启动一次抢答,绿色发光二极管亮作允许抢答指示。此时选手侧可以按动各自的抢答按钮。主持人按KK2+表示复位。红绿指示灯全灭,选手灯全灭。主持人可以再次按KK1+键,启动下一次抢答。
抢答。使用实验仪的逻辑电平开关K0-K5来代表6个抢答按钮。当开关向上拨时表示按下按钮。收到第1个抢答信号后,主持人侧红色发光二极管亮(绿色发光二极管仍然亮)作已经有人抢答指示。
显示选手灯。在单个LED灯上显示抢先一组的组别。
在数码管上显示选手编号。
同时考虑抢答允许时间,10秒内有效。10秒之后无人抢答,本次抢答作废。
1、设计思路
首先初始化8255,然后判断是启动还是复位操作,若是复位操作,则控制8255输出的数据使绿色和红色指示灯、LED灯全灭;否则启动下一次抢答,使绿色发光二极管亮;当8255的输入口PB有不为0的数据时,则使绿色发光二极管灭并使红色发光二极管点亮。并判断先拨动开关的组号,在LED灯上显示出其组号。最后使用LED 8段数码管,显示选手编号。
2、使用的I/O设备
输入设备有:8个开关K0~K7。两个按键,KK1+和KK2+。
输出设备有:8个LED灯L0~L7。一位数码管显示器。
3、使用的芯片
8259芯片,8255芯片,8254芯片
4、芯片的作用
(1)8259芯片,实现中断控制。结合8254实现定时中断。启动和停止也由相应的中断服务程序实现。有三个中断源开放,MIR6、MIR7和SIR1。MIR6接OUT0,MIR7接KK1+,SIR1接KK2+。
(2)8255芯片,有PA、PB和PC三个并行口。PA口接8个开关的输入,让PB口去控制选手LED灯L0~L7。PC口自然去接数码管。
(3)8254芯片,实现硬件定时。定时10s。有两个通道CNT0和CNT1可用。选用CNT0和CNT1使用。
四、硬件线路设计
1、硬件接线图
1、程序流程图
TIMER0 EQU 0600H ;IOY0
TIMER1 EQU 0602H
TIMER2 EQU 0604H
TIMERM EQU 0606H
P8255A EQU 0640H ;IOY1
P8255B EQU 0642H
P8255C EQU 0644H
P8255M EQU 0646H
;---------------------------------------------------------------
DATA SEGMENT
DISCODE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0--7的显示代码DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;8--F的显示代码
STA DB 00H
TIME DW 500
COUNT DB 100
DATA ENDS
SSTACK SEGMENT PARA STACK 'STACK'DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT ASSUME CS:CODE, DS:DATA,SS: SSTACK
START: MOV AX,DATA MOV DS,AX
;--------------------------------------------------------------- 8255初始化
INITA: MOV DX, P8255M MOV AL, 90H OUT DX, AL MOV DX, P8255B MOV AL, 0FFH OUT DX, AL
;--------------------------------------------------------------- 中断芯片
INITB: PUSH DSMOV AX,0000H MOV DS,AX MOV AX,OFFSET MIR7MOV SI,003CHMOV [SI],AXMOV AX,CSMOV SI,003EHMOV [SI],AXMOV AX,OFFSET MIR6MOV SI,0038HMOV [SI],AXMOV AX,CSMOV SI,003AHMOV [SI],AXMOV AX, OFFSET SIR1 MOV SI, 00C4H MOV [SI], AX MOV AX, CS MOV SI, 00C6H MOV [SI], AX CLI POP DS
;---------------------------------------------------------------主片MOV AL,11HOUT 20H,AL ;ICW1MOV AL,08HOUT 21H,AL ;ICW2MOV AL,04HOUT 21H,AL ;ICW3MOV AL,01HOUT 21H,AL ;ICW4
;-------------------------------------------------------------初始化从片8259 MOV AL, 11H OUT 0A0H, AL ;ICW1 MOV AL, 30H OUT 0A1H, AL ;ICW2 MOV AL, 02H OUT 0A1H, AL ;ICW3 MOV AL, 01H OUT 0A1H, AL ;ICW4
;--------------------------------------------------------------- MOV AL, 0FDH ;OCW1 = 1111 1101BOUT 0A1H,AL MOV AL,2BH ;OCW1 = 00101011BOUT 21H,AL STI
;--------------------------------------------------------------- 定时器芯片
INITC: MOV DX, TIMERM ;8254控制字 MOV AL, 36H ;计数器0,方式3 OUT DX, AL MOV DX, TIMER0MOV AX, 20000 OUT DX, AL MOV AL, AHOUT DX, AL MOV DX, TIMERM ;8254控制字 MOV AL, 76H ;计数器1,方式3 OUT DX, ALMOV DX, TIMER1MOV AX, 1000 OUT DX, AL MOV AL, AH OUT DX, AL
;--------------------------------------------------------------- 8255初始化
INITD: NOP
;---------------------------------------------------------------
BEGIN: NOP
AA2: JMP AA2
;---------------------------------------------------------------
MIR7 PROC NEARPUSH AXPUSH DXMOV AX,0137HINT 10H ;显示字符7MOV AX,0120HINT 10HMOV AL,STACMP AL,01HJNZ M7END;状态位不是01的话就结束 可能存在一个刚按下start就来中断的情况 需要在start里面重新初始化8254MOV DX,21HIN AL,DXOR AL,11000000B;关中断OUT DX,AL;----------选手灯全灭MOV DX, P8255CMOV AL, 10000000B;状态灯pc7 pc6 1 0 代表无人抢答 OUT DX, ALMOV DX, P8255BMOV AL, 0;全灭代表8.亮OUT DX, ALMOV AL, 10HMOV STA, ALM7END: MOV AL,20HOUT 20H,ALPOP DXPOP AX RET
MIR7 ENDP
;---------------------------------------------------------------
MIR6 PROC NEARPUSH AXPUSH DXMOV AX,0136HINT 10H ;显示字符6MOV AX,0120HINT 10HMOV BX, TIMEDEC BXMOV TIME, BXJNZ SWAPCALL MIR7SWAP: MOV DX, P8255AIN AL, DXCK_STA: MOV AH, STACMP AH, 01HJNZ M6END;检测状态位是否为01HCK_K: TEST AL, 0FFHJZ M6END MOV DX, 21H;想读中断控制字,屏蔽MIR7MIR6和IN AL, DXOR AL, 11000000B;开中断交给SIR1OUT DX, ALCALL SWITCH;今晚调通MOV STA,11H;转换状态M6END: MOV AL,20HOUT 20H,AL POP DXPOP AX IRET
MIR6 ENDP
SIR1 PROC NEARPUSH AXPUSH DXMOV AX,0131HINT 10H ;显示字符1MOV AX,0120HINT 10HMOV DX, 21HIN AL, DXMOV TIME,500;这里重新对time进行处理CALL ALTER ;调用状态转换函数MOV AL, 20H OUT 0A0H, AL OUT 20H, ALPOP DXPOP AX IRET
SIR1 ENDP;---------------------------------------------------以下为子程序
DELAY: PUSH SIPUSH CXMOV SI, 00FFH
D11: MOV CX, 00FFH
D22: LOOP D22DEC SIJNZ D11 ;延时结束POP CX POP SIRET
;---------------------------------------------------------------
ALTER PROC NEARPUSH AXMOV AL,STATEST AL,01HJZ EVEN1
ODD1: MOV STA,0CALL SUBR1JMP DONE2
EVEN1: MOV STA,01HCALL SUBR2
DONE2: POP AXRET
ALTER ENDP
SUBR1 PROC NEARPUSH AXPUSH DX;---------选手灯,数码管全灭,状态转换为00H PC7 PC6灯的问题MOV DX,P8255CMOV AL,00HOUT DX,ALMOV DX,P8255BMOV AL,0FFHOUT DX,ALPOP DXPOP AXRET
SUBR1 ENDP
SUBR2 PROC NEARPUSH AXPUSH DX;-----------------准备干活了 确保10s中断不会被打断MOV DX,P8255CIN AL,DXMOV AL,01000000B;01H红绿灯OUT DX,AL;----------------------------------重新初始化8254 防止出现不到十秒就中断的情况MOV DX, TIMER0MOV AX, 20000OUT DX, AL MOV AL, AHOUT DX, ALMOV DX, TIMER1MOV AX, 1000 OUT DX, AL MOV AL, AH OUT DX, AL ;--------------------------------IN AL,21HAND AL,00111111B;允许中断OUT 21H,AL;-------------------------------POP DXPOP AXRET
SUBR2 ENDP
SWITCH PROC NEAR ; PUSH AXPUSH DXMOV DX,P8255A ;判断A口开关状态IN AL,DXMOV DX,P8255COR AL,0C0HOUT DX,ALMOV DX,P8255ATEST AL,01HJNZ K1TEST AL,02HJNZ K2TEST AL,04HJNZ K3TEST AL,08HJNZ K4TEST AL,10HJNZ K5TEST AL,20HJNZ K6JMP DOWN4;利用分支实现选手灯亮,以及状态从01H-->11HK1: MOV AL,06HMOV STA,11HJMP DONEK2:MOV AL,5BHMOV STA,11HJMP DONEK3: MOV AL,4FHMOV STA,11HJMP DONEK4: MOV AL,66HMOV STA,11HJMP DONEK5: MOV AL,6DHMOV STA,11HJMP DONEK6:MOV AL,7DHMOV STA,11HJMP DONE
DONE: MOV DX,P8255BOUT DX,AL
DOWN4: POP DXPOP AXRET
SWITCH ENDP
;---------------------------------------------------------------
CODE ENDSEND START
;---------------------------------------------------------------
CODE ENDSEND START
下面送上实验结果图何连线图——>
汇编语言小设计——抢答器相关推荐
- 微型计算机原理课设抢答器,微机原理课程设计抢答器.doc
西安郵電大学 硬件课程设计报告 题 目: 抢 答 器 院系名称:计算机学院 专业名称:班 级: 学生姓名:学号(8位):指导教师:设计起止时间 设计目的 用逻辑开关模拟竞赛抢答器按钮(共8个开关:K0 ...
- 数电课程设计--抢答器系统概述
一.题目: 1.基本要求 ①主持人利用开关控制系统的清零和抢答开始. ②电路具有第一抢答信号的鉴别和锁存功能,并显示抢中的选手编号. ③在主持人将系统复位并发出抢答指令后,开始抢答,定时器开始工作,数 ...
- verilog设计抢答器【附源码】
抢答器设计 1.实验平台 2.实验目的 2.1.实验内容 3.实验流程 3.1.实验原理 3.2.系统架构 3.3.子功能模块设计 3.3.1.中央控制模块 模块框图 信号定义 设计文件 3.3.2. ...
- c51抢答器程序汇编语言,单片机课程设计抢答器word 含汇编语言源程序,仿真
OK EQU 20H;抢答开始标志位 RING EQU 22H;响铃标志位 ORG 0000H AJMP MAIN ORG 0003H AJMP INT0SUB ORG 000BH AJMP T0IN ...
- c51抢答器程序汇编语言,c51单片机汇编语言单片机八位抢答器程序
OK EQU 20H RING EQU 22H ORG 0000H AJMP MAIN ORG 0003H AJMP INT0SUB ORG 000BH AJMP T0INT ORG 0013H AJ ...
- c51抢答器程序汇编语言,单片机八路抢答器proteus仿真带汇编语言源程序 原理图...
OK EQU 20H ;抢答开始标志位 RING EQU 22H ;响铃标志位 DATA0 EQU 36H ...
- 51单片机八位抢答器c语言设计,基于51单片机八路抢答器的设计
基于51单片机八路抢答器的设计 毕业设计(论文)题 目:基于 51 单片机八路抢答器的设计 系 部: 专 业: 学 号: 学生姓名: 指导教师姓名: 指导教师职称: 2013 年 xx 月 xx 日X ...
- 51单片机抢答器c语言代码,使用51单片机实现抢答器的设计资料和代码说明
在知识比赛中, 特别是做抢答题目的时候, 在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务.如果在抢答中,靠视觉是很难判断出哪组先答题.利用单片机系统来设计抢答器,使以 ...
- 用c语言设计八路抢答器的犯规程序,八路抢答器电子线路设计(附C语言程序) - 图文...
电子系统课程设计 第三章 硬件电路设计 3.1总体设计 根据抢答器的基本功能,可以设计出如下: 3.1总体设计 图3-1 总体设计 8 电子系统课程设计 3.2 外部振荡电路的设计 图3-2 外部振荡 ...
最新文章
- 暑期集训1:C++STL 例2:UVA-10935
- 请编写出一个html页面 令其输出,javaweb程序设计案例教程_课后习题1.pdf
- 网页加载报错——URL网页连接错误
- __proto__(隐式原型)与prototype(显式原型)
- JavaXml教程(二)使用DOM方式解析XML文件
- 【转】两种方法教你在Ubuntu下轻松关闭触摸板(TinkPad)
- 2019-03-11-算法-进化(求众数)
- 还有那个bspider不知道哪里的飞鸽传书
- ss模型复模态的物理意义及adams复模态振型求解
- 四种方式话Equal
- python数据结构之列表(list)——超详细
- js 数字格式化,只能输入正负整数,小数
- 支持向量机(SVM)凸二次规划的求解——序列最小最优化算法(SMO)原理及python实现
- 【JAVA】Socket文件上传遇到的问题!~
- 如何使用hMailServer+云服务器搭建个人邮箱
- wifi 性能 测试 android,WiFi性能测试app下载
- Java中的控制(耦合)反转
- 【操作系统】知识梳理(八)磁盘存储器的管理
- datagrip 设置查询结果显示行数
- 优秀的朋友圈,到底有多重要!(深度好文)