资源描述
微机原理与接口技术课程设计报告
2015-2016学年第二学期
设计题目: _______
小组成员:
所学专业:
指导教师: _______
完成时间: ___
目 录
一、课程设计目的 4
二、课程设计要求 4
三、系统功能 4
四、总体设计 4
1.基本工作原理 4
1.1可编程并行接口接口芯片8255A控制字要求 4
1.2可编程定时器/计数器8253控制字要求 5
2.硬件总体设计 5
2.1系统总成方案 5
2.2内存单元编址 5
3.键盘、扬声器及显示功能的定义 5
4.原理图 5
4.1 硬件原理框图 6
4.2 原理连线图 6
5 软件总体设计 6
五、硬件设计 8
六、软件设计 8
七、调试过程 21
八、系统操作说明 21
九、总结 22
十、参考文献 22
八路抢答器设计
一、设计目的
1、掌握微机系统的开发步骤;
2、掌握抢答器控制编程方法和芯片8255、8253的逻辑功能、键盘中断及使用方法和数码管的用法;
3、掌握一定的汇编语言知识,培养自己的动手操作能力。
4、学习程序设计的基本思路和方法。
因此,本次设计要求对微机原理的理论知识,8255A,8253,键盘显示区的工作方式、工作原理熟练掌握。
二、设计要求
当按开始键,绿灯亮后,选手抢答,1-8号选手中先按下按键者,LED数码管显示其选手号码(后按下无效),并进行声光报警(黄灯亮)提示。当按开始键未按下时,如果有选手抢答,LED数码管显示其选手号码,并进行声光报警(红灯亮)提示。
三、系统功能
一个具有8路抢答的抢答器,利用并行接口和开关键。键盘上数字键1--8代表抢答按钮,当某个逻辑开关闭合时(开始键按下未按起时),相当于抢答按钮按下,此时在七段数码管上将其号码显示出来,并使喇叭响一声(或者以发光二极管代替)。
四、总体设计
1. 基本工作原理
当按开始键按下时,绿灯亮后,选手才可抢答,否则违规。若抢答成功,LED显示器显示选手号码,黄灯亮,扬声器鸣叫;若抢答违规(未按下开始键),LED显示器显示违规选手号码,红灯亮,扬声器报警。
1.1可编程并行接口接口芯片8255A控制字要求
(1)、B口工作在方式0,做为输出端口,经驱动器1连接LED显示器(PB7~PB0依次对应连接LED显示器的dp、g、f、e、d、c、b、a七段数码管管脚);
(2)、C口也必须工作在方式0,高4 位做输入端口(本次设计中只用PC4、PC5,分别用于连接复位键和开始键),低4位做输出端口(PC3~PC0,经驱动器2后PC1、PC2、PC3分别用于连接黄、红、绿三个发光二极管,PC0连接到8253的GATE1端,以控制方式1的计数)。
1.2可编程定时器/计数器8253控制字要求
(1)、方式0:操作类型为先读写低字节再读写高字节,工作在方式3即方波发生器,
计数格式为BCD码,计数初值为0。
(2)、方式1:操作类型为先读写低字节再读写高字节,工作在方式1即可重触发的单稳态触发器,计数格式为BCD码,计数初值为0。
(3)、方式2:操作类型为先读写低字节再读写高字节,工作在方式3即方波发生器,
计数格式为BCD码,计数初值为0。
2.硬件总体设计
2.1系统总成方案
该竞赛抢答器所要器件:可编程并行接口接口芯片8255、可编程定时器/计数器8253,三个一样的驱动器,黄、红、绿三个发光二极管,十三个电阻,一个8输入与非门,一个非门,一个扬声器,一个LED显示器,10个按键。
2.2内存单元编址
(1)可编程并行接口接口芯片8255A的端口地址为60H、61H、62H、63H
(2) 可编程定时器/计数器8253的端口地址为40H、41H、42H、43H
(3) 特殊键中断号为2A---36,对应地址为00A8---00DB
本实验用到数字键1--8,对应的ASCII为31H---38H
LED显示器1--8对应的十六进制是: 06H,5BH,4FH,66H,6DH,7CH,07H,7FH
3.键盘、扬声器及显示功能的定义
一个开始键一个复位键,另外8个数字键用做8位选手的抢答按键。扬声器用与黄、红、绿三个发光二极管配合使用,黄灯亮扬声器鸣叫表示抢答成功,红灯亮扬声报警表示抢答违规报警,绿灯亮扬声器不鸣则表示主持人已按下开始键。LED显示器显示的内容与选手号对应,抢答成功或违规都要显示。
4.原理图
4.1硬件原理框图
按键设置
8255
8 2 5 5
8086
CPU
8253
8 2 5 4
LED灯
LED显 示 模 块
扬声器
声光报警
键盘输入
图1
4.2 原理连线图
4.3软件总体设计
主程序流程图:
开始
置标志位值为FFH使IF=1开放中断
点亮绿灯
关闭LED显示器
检测开始键是否弹起
检测开始键是否按下
设置抢答键中断向量并使IF置1开放中断
对8259A、8255、8253进行初始化
设置LED字形码初值、标志初值
开始
检测复位键是否按下
置标志位值为FFH使IF=1开放中断
点亮绿灯
关闭LED显示器
检测开始键是否弹起
检测开始键是否按下
设置抢答键中断向量并使IF置1开放中断
对8259A、8255、8253进行初始化
设置LED字形码初值、标志初值
开始
开始
设置LED字形码初值、标志初值
设置LED字形码初值、标志初值
对8255、8253进行初始化
对8259A、8255、8253进行初始化
设置抢答键键盘中断向量并使IF置1开放中断
设置抢答键中断向量并使IF置1开放中断
检测开始键是否按下
检测开始键是否按下
N
Y
检测开始键是否弹起
检测开始键是否弹起
N
Y
关闭LED显示器
关闭LED显示器
点亮绿灯
点亮绿灯
置标志位值为FFH使IF=1开放中断
置标志位值为FFH使IF=1开放中断
检测复位键是否按下
检测复位键是否按下
N
检测复位键是否弹起
Y
N
Y
关闭LED显示器、指示灯
将标志位清零,使IF=1开入中断
结束
图3
五、硬件设计
1.可编程并行接口接口芯片8255A的工作方式
8255A具有三个独立的输入/输出端口,每个端口的并行数据宽度为8位。三个端口分别为A端口,B端口,C端口,可分别与不同的外设进行数据交换,也可联合使用,在中断方式下实现CPU与外设间的数据传递。8255A提供方式0,方式1,方式2三种工作方式供选择。
2.可编程定时器/计数器8253的工作方式
(1)方式0:操作类型为先读写低字节再读写高字节,工作在方式3即方波发生器,计数格式为BCD码,计数初值为0。
(2)方式1:操作类型为先读写低字节再读写高字节,工作在方式1即可重触发的单稳态触发器,计数格式为BCD码,计数初值为0。
(3)方式2:操作类型为先读写低字节再读写高字节,工作在方式3即方波发生器,计数格式为BCD码,计数初值为0。
六、软件设计
DATA SEGMENT
BZ DB 00H
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
;8255A初始化
MOV AL,88H ;置8255A工作方式
OUT 63H,AL
XOR AL,AL ;B口、C口初始化
OUT 61H,AL
OUT 62H,AL
;8253初始化
MOV AL,37H ;置8253方式0控制字
OUT 43H,AL
MOV AL,00H ;置8253方式0计数初值为4000
OUT 40H,AL
MOV AL,40H
OUT 40H,AL
MOV AL,73H ;置8253 方式1控制字
OUT 43H,AL
MOV AL,00H ;置8253方式1计数初值为3000
OUT 41H,AL
MOV AL,30H
OUT 41H,AL
MOV AL,0B7H ;置8253方式2控制字
OUT 43H,AL
MOV AL,00H
OUT 42H,AL
MOV AL,00H ;置8253方式2计数初值为0
OUT 42H,AL
;中断设置
MOV AX,0000H
MOV DS,AX;
MOV BX,0457H
MOV AL,31H
MOV CX,8
LOP4:MOV [BX],AL
INC BX
INC AL
LOOP LOP4
MOV AX, OFFSET KKK1
MOV [00A8],AX
MOV AX,0000H
MOV [00AA],AX
MOV AX, OFFSET KKK2
MOV [00AC],AX
MOV AX,0000H
MOV [00AE],AX
MOV AX, OFFSET KKK3
MOV [00B0],AX
MOV AX,0000H
MOV [00B2],AX
MOV AX, OFFSET KKK4
MOV [00B4],AX
MOV AX,0000H
MOV [00B6],AX
MOV AX, OFFSET KKK5
MOV [00B8],AX
MOV AX,0000H
MOV [00BA],AX
MOV AX, OFFSET KKK6
MOV [00BC],AX
MOV AX,0000H
MOV [00BE],AX
MOV AX, OFFSET KKK7
MOV [00C0],AX
MOV AX,0000H
MOV [00C2],AX
MOV AX, OFFSET KKK8
MOV [00C4],AX
MOV AX,0000H
MOV [00C6],AX
STI ;使IF置1,开放可屏蔽中断
;主循环
LOPM: IN AL,62H ;检测开始键
TEST AL,20H ;检测C口的PC5端
JZ LOP2 ;开始键未按下即PC5=0,则跳转检测
;复位键
LOP1: IN AL,62H ;检测开始键是否已经弹起,即PC5=0
TEST AL,20H
JNZ LOP1 ;开始键没有弹起再重新检测
MOV AL,00H ;关LED显示器
OUT 61H,AL ;送到B口
MOV AL,08H ;绿灯亮
OUT 62H,AL ;送到C口
MOV BZ, 0FFH ;置标志
STI
LOP2: IN AL,62H ;检测复位键
TEST AL,10H ;检测C口的PC4端
JZ LOPM ;复位键未按下即PC4=0,则跳转再检
;测开始键
LOP3: IN AL,62H ;检测复位键是否弹起,即PC4=0
TEST AL,10H
JNZ LOP3 ;位键没有弹起,则重新检测
MOV AL,00H ;关LED显示器、指标灯
OUT 61H,AL
OUT 62H,AL
MOV BZ,00H ;清标志
STI
JMP LOPM
;中断服务子程序
KKK1:PUSH AX ;保护现场
PUSH BX
PUSH DX
PUSH DS
CLI ;并使本次中断压入堆栈中的IF=0
MOV AL,06H
OUT 61H,AL
CALL PUBLIC
POP DS ;恢复现场
POP DX
POP BX
POP AX
IRET
KKK2:PUSH AX ;保护现场
PUSH BX
PUSH DX
PUSH DS
CLI ;并使本次中断压入堆栈中的IF=0
MOV AL,5BH
OUT 61H,AL
CALL PUBLIC
POP DS ;恢复现场
POP DX
POP BX
POP AX
IRET
KKK3:PUSH AX ;保护现场
PUSH BX
PUSH DX
PUSH DS
CLI ;并使本次中断压入堆栈中的IF=0
MOV AL,4FH
OUT 61H,AL
CALL PUBLIC
POP DS ;恢复现场
POP DX
POP BX
POP AX
IRET
KKK4:PUSH AX ;保护现场
PUSH BX
PUSH DX
PUSH DS
CLI ;并使本次中断压入堆栈中的IF=0
MOV AL,66H
OUT 61H,AL
CALL PUBLIC
POP DS ;恢复现场
POP DX
POP BX
POP AX
IRET
KKK5:PUSH AX ;保护现场
PUSH BX
PUSH DX
PUSH DS
CLI ;并使本次中断压入堆栈中的IF=0
MOV AL,6DH
OUT 61H,AL
CALL PUBLIC
POP DS ;恢复现场
POP DX
POP BX
POP AX
IRET
KKK6:PUSH AX ;保护现场
PUSH BX
PUSH DX
PUSH DS
CLI ;并使本次中断压入堆栈中的IF=0
MOV AL,7CH
OUT 61H,AL
CALL PUBLIC
POP DS ;恢复现场
POP DX
POP BX
POP AX
IRET
KKK7:PUSH AX ;保护现场
PUSH BX
PUSH DX
PUSH DS
CLI ;并使本次中断压入堆栈中的IF=0
MOV AL,07H
OUT 61H,AL
CALL PUBLIC
POP DS ;恢复现场
POP DX
POP BX
POP AX
IRET
KKK8:PUSH AX ;保护现场
PUSH BX
PUSH DX
PUSH DS
CLI ;并使本次中断压入堆栈中的IF=0
MOV AL,7FH
OUT 61H,AL
CALL PUBLIC
POP DS ;恢复现场
POP DX
POP BX
POP AX
IRET
PUBLIC:TEST BZ,0FFH ;判断标志位是否为FFH
JZ LOP5
MOV AL,00H ;置8253方式2计数值
OUT 42H,AL
MOV AL,10H
OUT 42H,AL
MOV AL,03H ;黄灯亮,抢答成功
OUT 62H,AL
JMP KKK
LOP5: MOV AL,00H ;置8253方式2计数值
OUT 42H,AL
MOV AL,20H
OUT 42H,AL
MOV AL,05H ;红灯亮,抢答违规
OUT 62H,AL
KKK: MOV AL,20H ;中断结束;防止中断重复响应
OUT 20H,AL
CODE ENDS
END START
七、调试过程
(1)在刚开始编程时,各种功能大部分是由主程序来完成的。由于主程序过于复杂,可读性不高。使得在以后的程序的调试中遇到了很大的麻烦。后来把主程序的部分功能转化成子程序来实现,并在一些重要的地方增加了注释,使的程序的可读性大大加强。调试也变的比较简单了。到此基本解决了第一个问题。
(2)在编程时,子程序的调试也是相当重要,由于子程序不可避免的使用 AX\BX\CX\DX通用寄存器一个或几个。使得原主程序中的通用寄存器的内容很容易被覆盖,对子程序中所有的通用寄存器出入栈即可以避免上诉的问题,不用考虑使用的是哪几个寄存器,使用起来又比较简单方便。所以至此这个问题也已基本解决。
(3)调试是一个复杂烦琐而漫长的过程。在调试的过程中一定要耐下心来去做,否则一旦出现烦躁的心里,就会事倍功半,适得其反。
在本次设计中出现的主要问题即如上所述,解决方法也如上所述,在今后的软件调试过程中更应注意如上问题。
八、系统操作说明
比赛开始,在主持人按下开始键,绿灯亮后,选手才可开始抢答,否则违规。若选手抢答成功,LED显示器显示选手号码,扬声器鸣叫。若选手抢答违规(主持人未按开始键),LED显示器显示违规选手号码,红灯亮,扬声器报警。若系统提示某号选手抢答违规,主持人仍未按开始键,此时该号选手又按下抢答键,LED显示器显示该选手的号码。本系统开机后,若主持人既未按复位键又未按开始键,此时有选手按下抢答键,系统提示红灯亮,并报警。
注:
1、抢答成功,置8253方式2计数值为1000,扬声器的鸣叫声音频率为1MHz/1000=1KHz。
2、抢答失败,置8253方式2计数值为2000,扬声器的鸣叫声音频率为1MHz/2000=0.5KHz。
3、扬声器鸣叫或报警的时间为12s。
九、课程设计总结及体会
这次实验是一个综合性实验,通过这次实验,使我们将以前我们所学习到的芯片知识综合应用到这个实验上,从结构、功能、用法上都有了全面的认识,并基本达到了能够通过我们小组的讨论完成从构思到设计最后到调试的整个过程,虽然其中遇到了很多困难阻力,从开始到整个完成,但我们还是坚持了下来,所有的努力换回了成功的喜悦。下面就说说实验中的一些问题以及一些体会:
实验的初期,由于对整个的电路还不能从整体把握,只能从实验书上的实验要求出发,结合查找到的资料提出解决方案。最大的体会是团队的力量,几乎所有的设计都是在我们的讨论中“诞生”的,尽管每个人的想法不一样,但聚到一起后就会激发出更多的想法,同时也可以完善不足之处。设计如何用一个开关完成这些电路的多功能同时控制,曾经因为这一部分的设计而陷入僵局,好在认真经过分析,终于完成了。这也告诉我们,一定要对自己有信心,所要做的就是坚持,成功就不会遥远。我们调试时,虽然我们有合理的布局作保证,但也遇到了一些麻烦,但最终还是解决了。
十、参考文献
[1]刘红玲,邵晓根·微机原理与接口技术[M].中国电力出版社,2007年第一版
[2]冯博琴·微型计算机原理及接口技术[M].清华大学出版社,2007.
[3]艾德才·微型计算机原理与接口技术[M].高等教育出版社,2001.
[4]张雪兰,谭毓安·汇编语言程序设计[M].北京:清华大学出版社,2005.
[5]王爽·汇编语言
- 23 -
展开阅读全文