中南大学微机原理课程设计报告.docx
- 文档编号:709912
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:34
- 大小:1.65MB
中南大学微机原理课程设计报告.docx
《中南大学微机原理课程设计报告.docx》由会员分享,可在线阅读,更多相关《中南大学微机原理课程设计报告.docx(34页珍藏版)》请在冰点文库上搜索。
中南大学
微机原理课程设计实验报告
题 目 设计电子万年历 学生姓名
学 号
指导教师
学 院 信息科学与工程学院
专业班级 通信工程
一、设计目的及要求
(1)设计任务:
通过本次课程设计,使学生巩固和加深微型计算机原理理论知识,通过过实践进一步加强学生独立分析问题和解决问题的能力、综合设计及创新能力的培养,同时注意培养学生实事求是、严肃认真的科学作风和良好的实验习惯,为今后工作打下良好的基础。
计算机原理与接口课程课程设计结合教学内容,从应用的角度出发,进行三类课程设计,分别分为:
汇编语言程序设计、微机标准接口课程设计和接口技术课程设计。
(1)通过设计电子万年历,掌握中断的使用方法。
(2)掌握基本的显存读写技术。
(3)学会在屏幕上以七段数码管的形式显示本机时间的方法。
(4)学会用汇编语言编写一个完整的程序,提高自己的动手操作能力。
(5)学习程序设计的基本思路和方法,培养分析问题、解决问题的能力。
汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
因而,对程序的空间和时间的要求很高的场合,汇编语言的应用是必不可少的。
至于很多需要直
接控制硬件的应用场合,则更是非用汇编语言不可了。
随着科学技术迅速发展,理工科大学生不仅需要掌握计算机方面的基本理论知识,而且还需要掌握基本
的实验技能及一定的科学研究能力。
通过课程设计,使学生巩固和加深微型计算机原理理论知识,通过实践进一步加强学生独立分析问题和解决问题的能力、综合设计及创新能力的培养,同时注意培养学生实事求是、严肃认真的科学作风和良好的实验习惯,为今后工作打下良好的基础。
鉴于汇编语言的广泛用途及其在当代计算机界的重要作用,本人利用学的知识,在同学门的帮助下,花费大量时间,完成了关于电子万年历的系统设计。
这个系统是应用于电脑中的小应用程序,可是显示电脑中的时间。
很多地方都会有个时钟显示,其中大多是应用了类似这样的方法。
关键词:
汇编语言 微机原理 接口技术 时钟显示 键盘输入一次性初始化六位
7
(二)设计功能:
1.电子万年历,具有年、月、日、时、分、秒24小时制的运行,并可以在
8位数码管上显示;
2.电子万年历具有启动键、蜂鸣、整点报时、暂停、初始化年、月、日、时、分、秒。
(三)课程设计方式与基本要求:
【1】实验方式:
微机原理与接口技术课程设计共2周,要求学生做出设计方案(硬件线路图、程序框图)并提交指导教师检查确认。
然后进行硬件连接、软件调试、得出结果,由指导教师检查是否达到设计要求,最后撰写报告。
根据通信工程专业学生的
实际情况,课程设计的指导思想是:
对于学习成绩好、动手能力强的学生,让他们有充分发挥的余地;对于大多数学生务必完成设计要求;对于少数学习稍差的学生只需完成基本要求。
基于这一原则给出了3~5个题目,每一个题目的大小、难易可以伸缩,由学生自选。
【2】基本要求:
电子万年历(三星)
设计任务:
1.正常计时并显示,默认状态下用8个7段LED数码管作为显示设备,显示:
时——分——秒,每秒刷新显示;
2.通过按键,可以切换显示:
年(后两位)——月——日;
3.通过按键,可以调整时间;
4.实习整点定时闹铃功能,整点定时输出为音乐信号或语音信号。
扩展:
可通过串口通讯来获取电子万年历的时间。
其他功能(创新部分)
。
(四)设计所用元件
设备是武汉恒科电子教学仪器有限公司的超想—3000TB综合实验/仿真系统。
配合PC机构成实验环境。
8253 定时器:
用于产生秒脉冲,计数器2的输出信号作为中断请示信号送
IRQ3。
以及计数器0作为蜂鸣器的输入脉冲使用。
8279接口芯片:
实现键盘输入和显示输出。
8259中断控制器:
用于产生中断。
8255并行控制器:
触发蜂鸣器扬声。
数码管:
八个 LED 用于显示年、月、日,时、分、秒。
以格式00-00-00
输出值。
蜂鸣器:
扬声报时。
二、 设计题目及思想
(一)设计原理:
计算机原理与接口技术是通信工程专业的一门专业基础课程,学生需要掌握RAM扩充、8253计数器/定时器、8255并行口、8251串行口、8259中断控制器、D/A数模转换、A/D模数转换、DMA、LED显示等各个器件的性能和使用方法。
课程设计的目地是综合这些基础知识,就具体问题让学生做出软、硬件解决方案并付诸实施,以培养解决实际问题的能力。
本程序的主要设计原理是用主程序完成键盘按键的扫描,实现计时结果的数码管显示,实现时分秒与年月日之间的转换。
通过判断键盘按键调用相应功能程序段以实现相应功能,即实现了初始化年月日、初始化时分秒、显示年月日、显示时分秒等功能。
通过实验板上的键盘实现一次性对年月日的六位数字或者时分秒的六位数字同时进行初始化的手动设置功能,在本次实验的所有班级中只有我们一组是通过这种方式进行的初始化,这也是我们组的特色所在。
利用8253的定时器功能。
8253的四个端口地址为48H,49H,4AH,4BH,
本实验采用8253的计数器2,工作在方式3(方波发生器方式)输入CLK2为
1MHZ。
先给8253的初始值0C350H,循环记数。
即一次记数完后,自动装入初始值。
输出OUT2作为8259的输入脉冲。
8259有两个口地址,本实验为20H和21H,其中20H用来写ICW1,21H用来写ICW2、ICW4,本实验中8259为单片,边沿触发,采用3号中断源,即IR3和8253输出口OUT2相连,每过1/20秒接收到一个中断,向8259发出中断请求信号,如果电平信号不符合要求,则自动转到7号中断,显示"ERR",CPU响应后,在中断处理程序中,对中断次数进行记数,记满20次,把时间缓冲区中的时间加1,并将其输入到显示缓冲区,这
样便实现了产生一秒钟长短的时间间隔,以作为程序的主要时钟。
计数初值的计算:
X=1M/2=50000D=0C350H(用1MHZ信号产生1/20秒方波)。
(二)主要模块:
【1】系统总体设计:
本系统设计的电子钟以8088微处理器作为CPU,8253做定时计数器产生一秒钟的时间间隔用作程序的主要时钟频率,8279做可编程并行接口显示时钟和键盘电路,8259做中断控制器产生中断。
在此系统中,
8253的功能是定时,接入8253的CLK信号为周期性时钟信号。
8253采用计数器0和计数器2。
计数器2:
工作于方式3,使8253的OUT0端输出周期性的负脉冲信号,即每隔20ms,8253的OUT0端就会输出一个负脉冲的信号,此信号接8259的IR2,当中断到50次数后,CPU即处理,使液晶显示器上的时间发生变化。
计数器0:
工作于方式3,使8253的OUT2作为蜂鸣器的输入信号,使蜂鸣器产生闹铃。
8255的PB0口与
8253的GATE0相连,8255的PB0受程序里面的函数控制,当需要闹铃的时候置1,否则置0。
程序由以下模块组成:
系统共有 6 个功能模块,分别为,主控模块,显示模块,定时模块,闹钟模块,中断模块,初始化模块。
【2】主控模块:
主控模块是系的核心模块,对8253、8255、8279进行初始化,设置中断向量,主要由软件实现。
再由主控模块进入程序菜单,程序菜单的主要功能是调用其它模块对系统工作进行协调,它的主要功能是读小键盘输入键值并执行要做的工作,每当进入菜单就会先调用显示模块SHOW1,显示58-58-58,表示成功进入了菜单。
接下来读键值选择相应的功能,如果键值为F则初始化年月日并置入相应的内存,成功后返回主控模块。
如果键值为 D则初始化时分秒并置入相应的内存,成功后返回主控模块。
如果键值为B则显示年月日内存中的值,成功后等待下次有键输入后返回主控程序。
如果健值为9则显示时分秒内存中的值,成功后等待下次有键输入后返回主控程序。
并调用显示模块显示。
【3】定时模块:
定时模块是为8259提供中断请求信号的。
由一片8253实现,选用定时器0#,工作在方式3,由于时钟应该1秒走动一次,所以输出值应为1S,其输出信号可作为8259的中断请求信号。
【4】中断处理模块:
中断模块实现动态显示的,硬件为一片8259,由于中断请求信号为每秒一次,中断程序该为时间按秒增加,并显示,只要开中断,便可实现每秒显示时间增加一秒,从而达到动态显示的效果。
【5】并行模块:
并行模块是8255是数据在多根传输线上一次以8位为单位进行传输。
8255
由数据总线缓冲器,读/写控制逻辑、A组和B 组控制电路以及3个数据端口
(A 口、B口和C口)等组成。
【6】显示模块:
显示模块是将显示缓冲区的数值送到LED显示的功能模块,显示缓冲区是由六个字节构成,分别保存小时的高位和低位,分钟的高位和低位,秒钟的高位和低位。
硬件上由六个LED构成,软件上由扫描显示的方法实现。
(三)芯片初始化:
【1】8253A定时/计数:
8253A既可作定时器又可作计数器:
(1)计数:
计数器装入初值后,当GATE为高电平时,可用外部事件作为
CLK脉冲对计数值进行减1计数,每来一个脉冲减1,当计数值减至0时,由
OUT端输出一个标志信号。
(2)定时:
计数器装入初值后,当GATE为高电平时,由CLK脉冲触发开始自动计数,当计数到零时,发计数结束定时信号。
除上述典型应用外,8253A还可作频率发生器、分频器、实时钟、单脉冲发生器等。
8253A控制字
7
6
5
4
3
2
1
0
00选计数器0 数制控制:
0=二进制,1=BCD
01选计数器1
10选计数器2 工作方式选择:
000方式0
11非法 001方式1
×10方式2
00计数器锁存命令 ×11方式3
01只读/写低8位,高8位自动置0 100方式4
10只读/写高8位,低8位自动置0 101方式5
11先写低8位,后写高8位
(3)以上为8253计数器2的初始化过程,计数器0的初始化过程类似,只是计数初值不再为053C而改为02,表示把输入的时钟频率二分频,以达到可以使蜂鸣器报警的效果。
【2】8259单级中断控制:
8259A编程及初始化写初始化命令字
写初始化命令字ICW1(A0=0),以确定中断请求信号类型,清除中断屏蔽寄存器,中断优先级排队和确定系统用单片还是多片。
中断优先级排队和确定系统用单片还是多片。
A7
A6
A5
1
7 6 5 4 3 2 1 0
下为0)
0=不需写ICW4;1=需要写ICW4
0=多片8259级连;1=只一片8259
0=中断向量地址间距8;1=地址间距4(8088模式
0=上升沿触发;1=高电平触发
为1,ICW1标志位 8
【3】8279显示接口:
8279A的控制命令
(1)键盘显示器方式设置命令
*RESET后,设定为该种方式。
(2)扫描频率控制命令
【4】8255并行:
8255A控制字
(1)方式选择控制字
7
6
5
4
3
2
1
0
PC3~0:
1=输入,0=输出
PB口:
1=输入,0=输出 B组方式选择:
0=方式0,1=方式1
PC7~4:
1=输入,0=输出9
PA口:
1=输入,0=输出
方式选择:
00=方式0 A组
01=方式1
01×=方式2
是否IRQ3
10
关中断
STI
开中断,读中断
方式标志:
1=有效
(四)程序流程图:
【1】主程序流程图:
中断次数
20?
中断次数+1
把DATAPORT存放的数码管对应的状态显示到数码管
是否=00分
闹钟开
闹钟关
秒=00
是否=59秒
秒数+1
是否=59分
秒=00
是否=24时
时=00
分=00
分数+1
时数+1
年数+1
11
是否=99年
年=00
历主控程序:
等待输入一个键值
WAITING
进入相应的模块
是否=13月
月=00
日数+1
月数+1
是否=31日
日=00
将对应的年月日时分秒值放至
DATA11/DATA12/DATA13
DATA21/DATA22/DATA23中供以后输出查询
【2】电子万年
一系列的初始化
SHOW1(58-58-58)
菜单选择
判断
33
程序本轮跑完
五)硬件接线图:
实验线路连接:
1.8253A芯片的CLK2引出插孔连分频输出插孔T1(1MHZ)。
2.8259A的IRQ3插孔和8253A的OUT2插孔相连。
3.将8279接口模块上的插座DU(JB51)(a-h)用8芯线连接至数码管模块插座DU(a-h),8279接口模块上插座BIT(JB53)连接至数码管模块插座BIT。
4.8255的片选CS插孔和8253A的Y2插孔相连,PB0和8253的GATE0相连。
5.1KHz和8253的CLK0相连,8253的OUT0与蜂鸣器相连。
三 实验调试结果
打开汇编软件DVCC实验系统,设置正确的接口并且联机进入程序汇编界面。
按照电子万年历设计的硬件图把线路一一连接正确。
(下图为正常运行情况下电子万年历的状态)
.
.
.
按照正确接线之后,将实验台与计算机进行联机,再把程序通过DVCC汇编
写进去,编译再次链接,然后调试无误,点击运行。
数码管会显示初始命令等待58-58-58状态,然后至到下次正确的键入键盘上的值,如果键值为 F 则初始化年月日并置入相应的内存,成功后返回主控模块。
如果键值为 D则初始化时分秒并置入相应的内存,成功后返回主控模块。
如果键值为B则显示年月日内存中的值,成功后等待下次有键输入后返回主控程序。
如果健值为9则显示时分秒内存中的值,成功后等待下次有键输入后返回主控程序。
并调用显示模块显示。
每当程序运行到XX-00-XX的时候(XX代表任意数值),蜂鸣器响起,整点报时实现。
四、 课程设计总结
(一)遇到问题及解决方案:
在本次设计中我们遇到不少的难题:
我们一开始按照指导书接线,并先导入计算机上本身附带的程序后没有得到相应的效果,这让我十分的疑惑,也认真检查了硬件的接线线路,后来得知是不一定每一个的仪器都能顺利与主机链接上,后来经过多次的多部机子调试后得到能成功运行代码的平台。
然后我们在之前的程序中加入了其他的功能:
整点报时、键盘初始化等。
在改进设计方案中,加入数字键盘进行时间校对的过程确实遇到了不小的
麻烦。
在运行原先实验指导书中的CALL KEY(主要功能是从键盘上读入键入的
值)函数,在我的程序中总是不能得到正确的键值,这个问题困扰了我们小组很久,于是我们进行了断点调试,在CALL KEY函数中不断的加入8255并行接口的初始化程序,将当前程序运行中的计算结果通过8255输出到小灯上,再通过观察小灯的亮灭状态判断当前断点程序是否正常的在运行。
这样,我们调试了整整一天,终于发现了问题,并且解决了问题。
本小组发现实验所用的编译软件存在着缺陷。
当数据段的代码过长的时候,程序不能正常的找到数据段的起始地址,CALL KEY函数中的查表指令无法正常进行。
我们的改进方案是将原先写在数据段的表写进代码段,通过赋初值给一片内存区域,这样又在程序开头将代码段的初始地址赋给数据段的初始地址,由于程序中代码段的初始地址与数据段的初始地址是相同的所以这次寻找代码段的初始地址便能成功查表,于是也就解决了CALLKEY函数的运行问题。
在整点报时上,融入了8255,8255由DATA22的数值决定跳转哪种状态,当分钟大于等于0分钟,则是给8253的GATE0高电平,从而使OUT0选通,将一定频率的信号传给蜂鸣器;当分钟小于等于0分钟,则是给8253的GATE0低电平,从而使OUT0不通,不能将一定频率的信号传给蜂鸣器,从而达到整点报时的效果。
还有在我的代码程序里面有通过8279判断是否有键盘输入的部分,如下:
MOV DX,PORT1
IN AL,DX
AND AL,07H
(详情请参考8279的初始化过程)
这个函数若返回AL=0,则无键盘输入。
我将这个函数写在了一个程序的循环之中,并作为循环判断条件,若无键盘输入则循环继续运行,若有键盘输入则跳出循环,但是我发现实际运行的时候它却不停的跳出循环,查了很久的
代码还是没有发现原因,最后突然想到有可能是中断返回的时候将AL的改变了,于是便将程序做了如下修改:
CLI
MOV DX,PORT1
IN AL,DX
AND AL,07HSTI
这次的运行结果才是正确的。
对于其他的部分,我们的实验结果完全正确。
(二)课程设计心得体会
这次的课程设计我深刻的体会到了基础语言编程的不容易,相较于C++来说,汇编语言几乎无封装性可言,也无多态性。
这些特点使得我们编程的时候必须逻辑清晰,稍有差错,程序就不知道会跑到什么地方去了。
同时汇编语言语法上来说是十分容易的,但是又由于逻辑上要求十分严谨,这就造成了查错过程难以进行,因为通过编译几乎是不可能报错的,但是实际运行的时候程序也许就和你预期的完全不同,逻辑错误若不细究程序是难以查出的。
同时,我也体会到了程序的模块化真的对于程序的调试有着很大的便利,我也更加熟悉了分模块分段的调试方法,这对于我以后的编程道路也是一次宝贵的经历。
在课程设计过程中,我深刻地体会到:
《微机原理与接口技术》这门课程对于我们的要求不仅限于对书本知识的理解,更重要的是对书本知识的运用。
除此之外,我们应该在学习过程中充分发挥自己的想象力和创新意识,将对书本知识的理解与我们的创新意识相结合,设计出实用且功能良好的实物。
通过本次课程设计,也提高了我们的编程能力、协作能力和创新能力,为以后的学习打下了良好的基础。
另外,我深感能找到一台运行正常的机子对实验的进行真的至关重要!
参考文献
[1]梁健武,《微机原理与接口技术》中国铁道出版社
附录:
电子万年历软件代码及注释
CODE SEGMENTASSUME CS:
CODEINTPORT1 EQU 0020HINTPORT2 EQU 0021H
INTQ3 EQU INTERUPT3
INTQ7 EQU INTERUPT7DATAPORTEQU 00DEHCONTPORTEQU 00DFH
PORT0 EQU 00DEH ;8279DATAPORTPORT1 EQU 00DFH ;8279CTRLPORT
DATA1
EQU
0500H
DATA2
EQU
0508H
DATA3
EQU
0518H
DATA4
EQU
0520H
DATA5
EQU
0528H
DATA6
EQU
0529H
DATA7
EQU
052AH
DATA8
EQU
052BH
DATA9
EQU
052CH
DATA10
EQU
052EH
DATA11
EQU
0530H
DATA12
EQU
0531H
DATA13
EQU
0532H
DATA21
EQU
0533H
DATA22
EQU
0534H
DATA23
EQU
0535H
DATA31
EQU
0536H
DATA32
EQU
0537H
DATA33
EQU
0538H
CTRL
EQU
0073H
PORTB
EQU
0071H
CNT
DB
06H
TEMP
DB
00H
BUFER
DB
0H
KEYDATA
EQU
0400H
ORG 1800HSTART:
MOV AX,0H
MOV DS,AX
MOV BX,0H
MOV BYTEPTRDS:
[BX+KEYDATA],23HADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],2BHADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],33HADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],3BHADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],22HADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],2AH
ADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],32HADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],3AHADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],21HADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],29HADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],31HADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],39HADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],20HADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],28HADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],30HADD BX,01H
MOV BYTEPTRDS:
[BX+KEYDATA],38H
JMP TINT1
TINT1:
CLI
CALL FORMAT
MOV DX,CONTPORT
MOV AL,00H
OUT DX,AL ;KEYBORD
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中南 大学 微机 原理 课程设计 报告