河北科技大学
课程设计报告
学生姓名: 张德正 学号: 120701233
专业班级:电子信息122班
课程名称: 微型计算机原理及应用技术
学年学期: 2 0 14 — 2 0 15 学年第 1 学期
同组人员: 薛小禹、应佳捷、张念琦、张美萍
指导教师: 赵艳
2 0 14年 12月
课程设计成绩评定表
目录
一、课程设计目的------------------------------------1
二、课程设计题目------------------------------------1
三、设计任务与要求----------------------------------1
四、汇编语言程序设计的基本步骤----------------------2
五、课程设计原理及方案------------------------------2
六、程序与分析---------------------------------------8
七、实施结果-----------------------------------------9
八、小组成员及贡献 --------------------------------10
九、设计体会---------------------------------------10
十、参考资料----------------------------------------10
一、课程设计目的:
1、掌握汇编语言程序的建立和运行;
2、熟悉DOS环境以及在DOS下会调试编写好的汇编程序;
3、熟悉常用的DOS功能;
4、小组合作完成设计题目。
课程设计是培养和锻炼学生在学习完本门课后综合应用所学理论知识解决实际工程设计和应用问题的能力的重要教学环节,它具有动手、动脑和理论联系实际的特点,是培养在校工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一种较好方法。
通过课程设计实践,不仅要培养学生的实际动手能力,检验学生对本门课学习的情况,更要培养学生在实际的工程设计中查阅专业资料、工具书或参考书,掌握工程设计手段和软件工具,并能以图纸和说明书等表达设计思想和结果的能力。培养学生事实求是和严肃认真的工作态度。
通过设计过程,要求学生熟悉和掌握微机系统的软件设计的方法、设计步骤,使学生得到微机开发应用方面的初步训练。让学生独立或集体讨论设计题目的系统方案论证设计、编程、软件调试、查阅资料、编写说明书等问题,真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计使学生熟练的熟练掌握微机系统的设计方法,熟练应用8086汇编语言编写应用程序和实际设计中的软件调试方法和步骤,熟悉微机系统的软件开发工具的使用方法。
二、课程设计题目
加法练习程序
三、设计任务与要求:
1、设计加法练习程序;
2、程序设计基本要求:
1)菜单
内容包括:①输入字符串②程序运行③退出
2)输入字符串
随机给出百位数以内的加法算式,并提示输入答案;
3)程序运行
若答案正确,则给出正确提示;若答案错误,则给出错误提示,并提示输入答案;
4)按R键则继续下一题,按Q键则返回DOS系统。
四、汇编语言程序设计的基本步骤
1.分析问题
首先必须明确求解问题的意义和任务。对题目给出的已知条件和要完成的任务进行详细地了解和分析,将一个实际的问题转化为计算机可以处理的问题。
2.确定算法
所谓算法,简单地说就是计算机能够实现的有限的解题步骤。我们知道,计算机只能进行最基本的算术运算和逻辑运算,要完成较为复杂的运算和控制操作,必须选择合适的算法,这是正确编程的基础。
3.设计流程图
将提出的算法或编程思想用流程图的方式画出
4.根据流程图编写程序
编写程序是采用程序设计语言来实现上面已确定的算法,此过程有些书上称为编码。本书所介绍的是采用汇编语言编写程序。采用汇编语言编写程序应注意以下几个问题:
(1)必须详细了解CPU的编程模型、指令系统、寻址方式及相关伪指令;
(2)必须进行存储空间和工作单元的合理分配;
(3)多次使用的程序段可采用子程序或宏指令;
(4)尽可能用标号或变量来代替绝对地址和常数;
5.程序的检验
程序编写好以后,必须经过书面检查和上机调试,以便说明程序是否正确。检验时,应预先选择典型数据,检查是否可以得到预期结果。
五、课程设计原理及方案
1、流程图
2、使用的DOS功能:
1) 显示字符串 MOV AH,09H
INT 21H ;入口参数DS:DX=缓冲区
2) 键盘输入一个字符 MOV AH,01H
INT 21H ; AL=输入的字符
3)终止当前程序并返回调用程序 MOV AH,4CH
INT 21H ;AL=退出码
4)输入字符串 MOV AH,0AH
INT 21H ;入口参数DS:DX=缓冲区
5)输出单字符 MOV AH,2
INT 21H ;DL=要显示字符的ASCII码
3、使用的BIOS功能:
1) MOV AL,0AH;在光标位置显示字符
INT 10H
2) MOV AH,0;从键盘读字符
INT 16H
3) MOV AX,0E20H;空一格
INT 10H
3、使用工具和软件:
计算机和MASM汇编软件
六、程序与分析
OUTPUT MACRO X
LEA DX,X
MOV AH,9
INT 21H
ENDM
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
START:
PUSH CS
POP DS
OUTPUT TIPS
AGAIN:
MOV AX,0E20H
INT 10H
CALL JIAFA
OUTPUT MSG
KEY:
MOV AH,0
INT 16H; 无回显接收一键
CMP AH,13H ;'R'
JZ AGAIN
CMP AH,10H ;'Q'
JNZ KEY
OUTPUT EXIT
MOV AH,1
INT 21H ; 输入字符
MOV AH,4CH
INT 21H ; 返回DOS
JIAFA:
CALL RANDOM
MOV SUM,AX
CALL SHOW
MOV DL,'+'
MOV AH,2
INT 21H
CALL RANDOM
ADD SUM,AX
CALL SHOW
NEXT:
MOV AX 0E20H 串间空格隔开
INT 10H
MOV DL,'='
MOV AH,2
INT 21H 输出=
CALL INPUT
CMP BP,SUM
JZ DONE
OUTPUT NO
JMP NEXT
DONE:
OUTPUT YES
RET; 功能:产生一个百位以内的随机数存于AX中
RANDOM:
XOR AX,AX AX清零
OUT 43H,AL
IN AL,40H
MOV AH,AL
IN AL,40H
XCHG AL,AH
XOR DX,DX
MOV BX,99
DIV BX
MOV AX,DX ; 余数为随机数
RET 返回断点处
SHOW:
MOV AX ,AX
AAM
OR AX,3030H
XCHG AH,AL
MOV DX,AX
MOV AH,2
INT 21H
MOV DL,DH
INT 21H
RET
INPUT:
XOR BP,BP
MOV CX,3
GET:
MOV AH,0
INT 16H
CMP AL,0DH
JZ OK
CMP AL ,'0'
JB GET
CMP AL,'9'
JA GET
MOV AH,0EH
INT 10H
AND AX ,0FH
XCHG BP,AX
MOV BX,10
MUL BX
ADD BP,AX
LOOP GET
OK:
CMP CX,3
JNZ OK 1
MOV AX,0E30H
INT 10H
OK 1: RET
TIPS DB 9,9,'JIA FA LIAN XI',0DH,0AH,'$'
YES DB' Correct!$'
NO DB ' Error!',0DH,0AH,'$'
MSG DB DH,0AH,' Continue(R) or Exit(Q)?',0DH,0AH'$'
EXIT DB 0DH ,0AH,' Press any key to quit...$'
SUM DW 0
CODE ENDS
END START
七、实施结果
程序运行之后,随机给出百位数以内的加法算式,并提示输入答案;若答案正确,则给出正确提示;若答案错误,则给出错误提示,并提示输入答案;按R键则继续下一题,按Q键则返回DOS系统。
八、小组成员及贡献
小组成员:薛小禹、应佳捷、张德正、张美萍、张念琦
我(张德正)主要负责用RANDOM的随机种子的子程式,其实是伪随机过程,指定一个算法,根据该子程式输出的结果来产生随机的加法算式。产生一个被加数N1,产生一个加数N2。
RANDOM:
XOR AX,AX AX清零
OUT 43H,AL
IN AL,40H
MOV AH,AL
IN AL,40H
XCHG AL,AH
XOR DX,DX
MOV BX,99
DIV BX
MOV AX,DX ; 余数为随机数
RET 返回断点处
九、设计体会
总的来说,在整个设计的过程中,对文件的知识有了相当程度的了解掌握,基本上学会了对图的操作等。在对文件的自学过程中也认识 ,在学习的过程中要灵活的把所学的知识运用到实践当中,并且还要巩固练习和运用,这样才可以牢牢的记住。试验也对数据结构的知识进行了复习,尤其是结构体的定义、地址与引用的合理使用以及记录指针的使用也认识到数据结构在实践运用中的重要性,在对程序不断的修改和逐步改进提升的过程中,积累了不少经验,为在以后的学习和实践应用奠定了一定的基础。
做过很多课程设计,但完成了微机原理的课程设计后,我才感觉这门还是真正需要些技术含量的。需要我们同学深入的去思考,去学习查资料,我在这一周的时间里收获也是很大的,对汇编语言由略知皮毛到能运用它独立做一些小程序。这种技能都是课堂上学不到的,但对未来却有很大的帮助。当我面对一个难题,从一筹莫展到逐渐清晰明朗,调试调试再调试,而后最终完成任务。只有亲身经历过,才能感受其中的艰辛与快乐。更重要的是我们对汇编有了更进一步的理解。有了实际应用的体会,知识更加的融会贯通了。不管是从知识上还是从思维方式上,我们都得到了很大的进步。
第一天的任务便是熟悉编程环境,掌握编程的步骤,然后编写一个范例小程序。当天便遇到了问题,怎样正确运用DOS的各个功能调用,因为课堂上讲的关于这方面的知识都很不系统,只是勉强记住其对应的功能而却不知道实际运用的方法。然后我就对照着书上的例子和指导书上的范例程序,把各个功能都调试运行了一遍。并且着重学习了一下经常用到的几个功能,像09号功能、0A号功能等。其中我发现了以前编程只知道往上写却不知道起作用的语句都在调试的过程中慢慢清晰了。
接下来的几次实验,我们针对平时讲课比较抽象的内容进行测试,当然,一开始总是会出现或多或少、或大或小的问题,但经过努力,终于可以克服这些困难,能够独立的设计程序。而且我们平时遇到的困难,如果不能独立解决,首先我会先从书中寻找答案,如果找不到再问同学或者老师求解,或者从网上寻找答案,最后通过这个困难学到了之前不懂的东西,并进行运用和掌握。
在最后的课程设计中,老师给我们规定了题目,然后我们在组内进行了分工,每个人负责一个部分,最后在汇总调试。虽然设计的程序中有些许差错,最终经过修正,可以完成了最初的实验目的。
十、参考资料
朱金钧、麻新旗:《微型计算机原理及应用技术》 机械工业出版社
张弥左、王兆月、邢立军:《微型计算机接口技术》机械工业出版社
第二篇:微型计算机原理课设
《微型计算机原理》
课程设计题目:竞赛抢答器设计
姓 名:赵浩淞
学 号:40850020
班 级:电081
指导教师:董洁
日 期:2010.12
前 言
本次课程设计的内容是设计一个6路抢答器,并对抢答成功、抢答犯规、响铃提示等实际情况进行软硬件模拟。设计过程中,主要用到的芯片有可编程中断控制器8259A、可编程并行接口芯片8255A、可编程定时器/计数器芯片8253等。硬件方面,原理图的设计是基于Labcenter electronics公司出版的Proteus,它强大的仿真能力让我赞叹不已的同时,也受益匪浅。软件方面,程序的设计是基于8086/8088汇编语言在轻松汇编软件上进行编写和调试,它小巧方便且功能齐全。反复推敲的设计思路,充满艰辛而又饶有趣味的设计过程,成功的软、硬件结合,再加上日复一日的努力奋斗,才有了今日之设计成果。在要求的基础之上,我还加入了一些自主创新的东西。设计完成之时,本人激动的心情,溢于言表。虽然,我知道,我的设计成果之中一定还存在很多不足之处,很多可以优化的地方,甚至,有可能还会有一些漏洞。但是,整个过程我的的确确努力了,并全身心投入于其中了。我尽量做到了我所能做到的最好。
下面,我将对我的设计思路、设计过程、设计心得等逐一进行详细的阐释。烦请老师审阅。
特此感谢董洁老师一学期悉心的教导。
目录
第一章 课程设计任务书。。。。。。。。。。。。。。。。。。。4
第二章 设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。5
2.1 设计思路。。。。。。。。。。。。。。。。。。。。。。。。。。。 5
2.2 硬件设计。。。。。。。。。。。。。。。。。。。。。。。。。。。 6
2.3 软件设计。。。。。。。。。。。。。。。。。。。。。。。。。。。 7
第三章 小结及参考文献。。。。。。。。。。。。。。。。。。。 10
第四章 课程设计图纸。。。。。。。。。。。。。。。。。。。。。 11
第五章 程序清单。。。。。。。。。。。。。。。。。。。。。。。。。。12
第一章 设计要求
设计一个具有4(6)路抢答的抢答器,启动计算机,计算机自动为系统各芯片进行初始化,抢答器开始工作。
比赛开始,在主持人按下开始键,绿灯亮后,选手才可开始抢答,否则违规。利用并行接口和开关键。逻辑开关K0——K3(5)代表抢答按钮,当某个逻辑开关闭合时,相当于抢答按钮按下。若选手抢答成功,黄灯亮,七段数码管显示选手号码,扬声器鸣叫。若选手抢答违规(主持人未按开始键),七段数码管显示违规选手号码,红灯亮,扬声器报警。
若系统提示某号选手抢答违规,主持人仍未按开始键,此时该号选手又按下抢答键,七段数码管显示该选手的号码。本系统开机后,若主持人既未按复位键又未按开始键,此时有选手按下抢答键,系统提示红灯亮,并报警。
注:
1)抢答成功,扬声器的鸣叫声音频率为1KHz(1.5KHz)。
2)抢答失败,扬声器的鸣叫声音频率为0.5KHz(1KHz)。
3)抢答计时时间到,扬声器的鸣叫声音频率为0.75KHz(1.25KHz)。
4)扬声器鸣叫或报警的时间为12s(10s)。
第二章设计
2.1设计思路
由于本次实验需要用到数码显示、中断控制、倒计时等功能,股初步分析,需要8255、8259、8253等芯片。
经过分析,实验要点在于判断最先抢答者并锁存,同时不理睬其他信号。因此,可将6个抢答按钮通过并行输入口接至微机。当主持人启动抢答过程后,微机对6个口循环采样。若有一组发出信号,则立刻停止,并记录组号。
为了对抢答后回答时间进行控制,可以用8253计时,先置初值再计时,时间到后亮灯并提示音。
本实验要设置一个启动键,如果在启动按钮未按下前抢答,则视为犯规,二极管发光并提示音。
2.2硬件设计
1. 所需器件:8088、8259A、8255、8253、74138、黄红绿二极管、扬声器、led显示器、8个按键
2. 内存编址:8259A:20H、21H
8255A:80H、81H、82H、83H
8253:40H、41H、42H、43H
下面具体说明各个芯片和主要元件的功能。
1.8088CPU
8088CPU采用最小工作方式,它的地址/数据复用总线(A0~A16)通过3片地址锁存器8282和2片数据收发器8286连到各个主控芯片上,以向其发出地址信号,从而确定其端口地址和中断类型号等。同时,负责接受芯片传送来的数据和向芯片发送数据。
2. 可编程定时器/计数器芯片8253
芯片的端口地址为0CH~0FH。计数器0为工,方式3,采用二进制计数;计数器1,方式2,只写入低8位,二进制计数;设置计数器二,方式3,二进制计数。
(1)计数器0作定时器使用,具体定时时间(10s或30s)由计时子程序提供计数初值而决定。CLK0接5KHz时钟源。GATE0由U3的PC7端口控制。OUT0接到U4的IR1端口产生中断。
(2)计数器1作定时刷新装置,每2ms内刷新DRAM一次。CLK1接1.19MHz时钟源。GATE1接高电平。OUT1接D触发器的时钟端。
(3)计数器2用于控制扬声器的鸣叫频率。具体的鸣叫频率在响铃子程序中给计数器2赋初值决定。CLK2接15KHz时钟源。GATE2由U3的PB6端口控制。OUT2输出和PB7通过与门控制扬声器发生,即当PB6和PB7均为高电平时,扬声器才能发生。扬声器由一个共射放大电路控制,进行信号放大。
3. 可编程并行接口芯片8255A
PA,PB,PC口均工作于方式0,输出方式。芯片的端口地址为10H~13H。PA0~PA6口控制显示抢搭成功选手号码的数码管。PB0~PB5口控制选手抢搭成功时,代表选手的黄灯亮起(16~21号灯分别对应1~6号选手)。PC0~PC6口控制显示抢答犯规选手号码的数码管。
4. 8259A中断控制器
通过初始化编程向8259A写入相应的初始化命令ICW,可以使芯片处于一个规定的基本工作方式,并在此方式下进行工作。8259A的初始化命令字共有4个ICW1-ICW4,进行初始化时要求ICW1-ICW4按一定的顺序写入。
5.译码器74LS138
用于对地址总线传来的地址进行译码,以唯一确定各芯片端口的地址。
2.3软件设计
第三章小结
通过这次为期一周的微机原理和接口技术课程设计,扎实了我们的理论,培养了我们的实际动手能力。一周的设计,让我们更深入的理解了选用可编程并行接口芯片8255A和可编程计时/定时器8254的工作原理和工作方式,知道了数码管的显示方法,了解了计算机主板构成、接口技术及其应用编程方法。这次设计也培养了我的做事认真细致有耐心的品质,锻炼了我的分析问题、解决问题的综合能力,为我们今后的学习和工作奠定了基础,让我们受益匪浅。
我在设计中遇到很多苦难,大都是芯片和应用还不熟练,还需更加努力更加深入的了解微机系统及功能。
由于我能力有限,且未通过硬件实现,设计中难免有问题有待改进。
参考文献
1、 王忠民·《微型计算机原理》【M】西安电子科技大学出版社
2、 仁向民·《微机接口技术实用教程》【M】清华大学出版社
3、 阎石·《数字电子技术基础》【M】高等教育出版社
第四章课程设计图纸
第五章程序清单
DATA SEGMENT
TAB DB 06H,5BH,4FH,66H,6DH,7CH,07H,7FH,67H ;1~9字型码
BZ DB 00H
DATA ENDS
STACK SEGMENT PARA STACK'stack'
DB 100H DUP(?)
STCK ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
;8259初始化
MOV AL,13H ;ICW1
OUT 20H,AL
MOV AL,08H ;ICW2
OUT 21H,AL
MOV AL,0DH ;ICW4
OUT 21H,AL
MOV AL,98H ;8255 初始化
OUT 83H,AL
MOV AL,00001101 ;PC6置1
OUT 80H,AL
MOV AL,73H ;8253计数器1
OUT 43H,AL
MOV AL,0B7H ;计数器2
OUT 43H,AL
MOV AH,25H ;建立抢答中断向量表
MOV AL,0AH
MOV BX,SEG KEYINT
MOV DS,BX
MOV DX,OFFSET KEYINT
INT 21H
STI ;IF置1,开放中断
LOPM: IN AL,82H ;检测开始键
TEST AL,20H ;检测PC5
JZ LOP2 ;开始键未按下
LOP1: IN AL,82H
TEST AL,20H
JNZ LOP1 ;开始键没弹起重新检测
MOV AL,00H ;关LED显示
OUT 81H,AL ; 绿灯亮
MOV BZ,0FFH ;送C口
MOV AL,1000 ;响铃 1KHZ
OUT 42H,AL
STI
LOP2: IN AL,82H ;检测复位键
TEST AL,10H ;检测PC4
JZ LOPM ;未按下
LOP3: IN AL,82H
TEST AL,10H
JNZ LOP3 ;检测是否按下
MOV AL,00H ;关显示,灯
OUT 81H,AL
OUT 82H,AL
MOV BZ,00H
STI
JMP LOPM
KEYINT PROC FAR
PUSH AX
PUSH BX
PUSH DX
PUSH DS
CLI ;IF置0
IN AL,80H ;从A口获取选手信息
MOV CX,6 ;计六次
LOP4: SHR AL,1
LOOPNZ LOP4
MOV AX,CX ;选手号给AX
MOV BX,OFFSET TAB
XLAT ;选手号转换成LED字型码
OUT 81H,AL
TEST BZ,0FFH
JZ LOP5
MOV AL,00H
OUT 42H,AL
MOV AL,10H
OUT 42H,AL
MOV AL,03H ;黄灯亮
OUT 82H,AL
MOV AL,666 ;响铃 1.5KHZ
OUT 42H,AL
MOV DX, 40H
MOV AL, 64H
OUT DX,AL ;写8253计数初值,定时12秒
MOV AL,00h
OUT DX,AL
MOV DX, 41H
MOV AL, 3EH
OUT DX,AL
MOV AL,03h
OUT DX,AL
JZ LOP5
JNZ KKK
LOP5: MOV AL,00H
OUT 42H,AL
MOV AL,20H
OUT 42H,AL
MOV AL,05H ;红灯亮
OUT 82H,AL
MOV AL,800 ;响铃 1.25KHZ
OUT 42H,AL
KKK: MOV AL,20H
OUT 20H,AL
POP AX
POP BX
POP DX
POP DS
IRET
KEYINT ENDP
CODE ENDS
END START