微机原理课设电子钟程序设计.docx

上传人:b****6 文档编号:6615594 上传时间:2023-01-08 格式:DOCX 页数:15 大小:100.23KB
下载 相关 举报
微机原理课设电子钟程序设计.docx_第1页
第1页 / 共15页
微机原理课设电子钟程序设计.docx_第2页
第2页 / 共15页
微机原理课设电子钟程序设计.docx_第3页
第3页 / 共15页
微机原理课设电子钟程序设计.docx_第4页
第4页 / 共15页
微机原理课设电子钟程序设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

微机原理课设电子钟程序设计.docx

《微机原理课设电子钟程序设计.docx》由会员分享,可在线阅读,更多相关《微机原理课设电子钟程序设计.docx(15页珍藏版)》请在冰豆网上搜索。

微机原理课设电子钟程序设计.docx

微机原理课设电子钟程序设计

成绩

南京工程学院

通信工程学院

课程设计说明书(论文)

 

题目电子钟程序设计

课程名称微机原理课程设计

专业

班级

学生姓名

学号

设计地点

指导教师

 

设计起止时间:

2010年12月23日至2010年12月26日

 

目录

 

一.系统设计的目的和意义…………………………………2

二.课程设计要求及内容……………………………………2

三.总体设计…………………………………………………4

1.硬件设计……………………………………………4

2.软件设计………………………………………………5

3.源程序清单………………………………………………6

四.调试现象…………………………………………………10

五.课程设计总结……………………………………………10

六.参考文献…………………………………………………11

 

一、系统设计的目的和意义:

1、巩固所学理论知识、使理论与实际相结合的重要实践环节。

2、以汇编语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作。

3、进一步掌握面汇编语言程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。

4、提高自我分析问题、解决问题的能力。

二、课程设计要求及内容:

1.设计要求

利用8253可编程定时/计数器、8259中断控制器、8255可编程并行接口芯片和七段数码管设计一个电子钟的电路,并编写一段程序使得该电子钟能正常运行。

选用8253的计数器2进行100MS的定时,其输出OUT2与8259的IRQ0相连,当定时到100MS时产生一个中断信号,在中断服务程序中进行天数、时、分、秒的计数,并送入相应的存储单元;8255的A口接七段数码管的位选信号,B口接数码管的段选信号,天数、时、分、秒的数值通过对8255的编程可送到七段数码管上显示。

2.设计原理说明

(1).显示模块

显示模块是将显示缓冲区的数值送到LED显示的功能模块,显示缓冲区是由八个字节构成,分别保存小时的高位和低位,分钟的高位和低位,秒钟的高位和低位,一个横杠和一位天数的显示。

硬件上主要涉及到的是8255。

定义8255控制字为89H,其在方式0下工作,A,B输出,C输入的工作方式。

8255的A口接七段数码管的位选信号,B口接数码管的段选信号,用排线接好。

软件上主要是对时、分、秒、天的扫描显示,主要是在DISPLAYLED函数里体现出来:

首先将10000000B送至OUTBIT端口,即确定LED的哪一位显示,再把BX中存储在内存中的翻译好的显示码送至OUTSEG短口,来确定显示什么字符。

依次将BX加1而CL减一,直至CL为0跳转而字符的译码则是在STSRT函数中的LP中完成的,以小时HOUR为例,将HOUR存入AH中再DIV以10,按“余高商低”的规则,AH中存的是小时的个位AL中村的是小时的十位,将AL转换成显示码,并存入显示缓冲区。

其他分、秒、天类似。

(2).计数模块

计数模块的主要芯片是8253,8253控制字10100110H,表示选用计数器2,对高字节读写,方式3。

因为选用的是计数器2,则OUT的端口即选用OUT2,连至8259的IR端口,CLK2端口接来自实验箱的62.5KHz的时钟频率。

将82500HZ的频率转化为10HZ的频率,即题目要求的100MS。

每隔100MS送出一个信号至8259,配合中断程序的实现。

(3).中断模块

控制终端模块的主要芯片是8259。

IINIT函数是专为初始化8259。

初始化9258的命令字ICW1为00010011B,即中断请求是边沿触发,用于8086系统,需要设置ICW4。

ICW2为00001000B,ICW2是设置中断类型号的初始化命令字。

ICW4为00001001B,ICW4叫中断结束方式初始化。

OCW1为11111110B即表示只有M0允许中断,故接线时8253的OUT2,连至8259的IR0端口.。

软件上包括初始化8259的命令字和操作命令字,中断服务程序,中断服务子程序。

设一个变量CNT,每次调用中断服务程序则CNT加一,在判断CNT能不能被10整除,若能,则秒加一;不能,跳出中断程序。

若秒满60,则分加一,秒数清零,依次类推。

3.功能说明

除要求的电子钟的基本功能外,添加了天数的计数功能,星期一显示“1”,星期二显示“2”,周日显示“7”即1~7循环。

三、总体设计

1.硬件设计

硬件设计主要是将所用的各个芯片与CPU进行有效连接,也包括芯片与芯片之间的必要的信号连接线。

首先将各芯片的片选端与对应的CPU的CS端口进行连接。

再将对应的A0,A1对应连上。

为保证中断模块的正常运行,将8259的INT、INTA与ES8688的INTR、INTA连接,IRO与8253的OUT2连接。

为保证显示模块的正常运行,将5255的AB口与LED的CB口连好。

为保证计数模块的正常运行,将62.5K频率接到8253的CLK2。

A3区:

A0、A1

——

B3、B4、C5区:

A0、A1

A3区:

CS3

——

B3区:

CS

A3区:

CS4

——

C5区:

CS

A3区:

CS8

——

B4区:

CS

B3区:

INT、INTA

——

ES8688:

INTR、INTA

B3区:

IRO

——

C5区:

OUT2

频率输出:

62.5k

——

C5区:

CLK2

B4区:

A、B

——

LED区:

C、B数据线

引脚接线说明

 

连线实物图

2.软件设计

1.设计思路

(1)在主程序中要分别对8253、8259、8255进行初始化编程,8253的计数器2可在方式2下工作。

(2)8255的A口、B口都设为方式0,为基本的输入输出的方式

(3)在中断服务程序中对中断次数进行统计,当满10次时就进行一次时、分、秒的处理。

时、分、秒,分别对应6个存储单元,分别存放时、分、秒的十位和个位。

当中断次数满10次时,将秒的个位加1,判断是否到10,如到了则十位加1,个位清零;再判断十位是否到6,如到了则十位清零,分的个位加1,同时对分、时作相应处理。

(4)七段数码管显示作为子程序,将时、分、秒对应存储单元的内容分别取出并转换成相应的段码,从8255的B口输出,A口输出对应位的位选信号,延时后进行下一位的显示

(a)主程序流程图(b)中断服务程序流程图

2.源程序清单

CONTROLEQU0C003H;8253控制口

COUNT0EQU0C000H

COUNT1EQU0C001H

COUNT2EQU0C002H

MD8255EQU89H;8255控制字10001001H,A输出,B输出,C输入

PA8255EQU8000H

CTL8255EQU8003H

OUTBITEQU08000H;位控制口

OUTSEGEQU08001H;段控制口

CS8259AEQU0D000H;8259地址

CS8259BEQU0D001H

DATASEGMENT

CNTDB0

LEDBUFDB8DUP(?

);显示缓冲

NUMDB1DUP(?

);显示的数据

DELAYTDB1DUP(?

ZHOUDB1

HOURDB0

MINUTEDB0

SECONDDB0

LEDMAP:

;八段管显示码

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H

DB7FH,6FH,77H,7CH,39H,5EH,79H,71H

DATAENDS

SSEGSEGMENTSTACK

DB1000DUP(?

SSEGENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

SSEG

IINITPROCNEAR;初始化8259的命令字和操作命令字

MOVDX,CS8259A

MOVAL,13H

OUTDX,AL

MOVDX,CS8259B

MOVAL,08H

OUTDX,AL

MOVAL,09H

OUTDX,AL

MOVAL,0FEH

OUTDX,AL

RET

IINITENDP

WRIINTVERPROCNEAR;中断程序子程序

PUSHES

MOVAX,0

MOVES,AX

MOVDI,20H

LEAAX,IENTER

STOSW

MOVAX,CS

STOSW

POPES

RET

WRIINTVERENDP

IENTERPROC;中断服务程序

PUSHAX

PUSHDX

INCCNT

CMPCNT,10

JNEEXIT

MOVCNT,0

INCSECOND;秒加1

MOVAL,SECOND

CMPAL,60;秒数与60比较

JNEEXIT

MOVSECOND,0;秒清零

INCMINUTE;分加1

MOVAL,MINUTE

CMPAL,60;分数与60比较

JNEEXIT

MOVMINUTE,0;分清零

INCHOUR;时加1

MOVAL,HOUR

CMPAL,24;时数与24比较

JNEEXIT

MOVHOUR,0;时清零

INCZHOU

MOVAL,ZHOU

CMPAL,8

JNEEXIT

MOVZHOU,1

EXIT:

MOVDX,CS8259A

MOVAL,20H

OUTDX,AL;结束本次中断

POPDX

POPAX

IRET

IENTERENDP

DISPLAYLEDPROCNEAR;显示程序,从左到右显示字符

MOVBX,OFFSETLEDBUF

MOVCL,8;共8个八段管

MOVAH,10000000B;从左边开始显示

DLOOP:

MOVDX,OUTBIT

NOTAH

MOVAL,AH

OUTDX,AL

MOVAL,[BX]

MOVDX,OUTSEG

OUTDX,AL;显示一位八段管

PUSHAX

MOVAH,1

CALLDELAY;调用延时程序

POPAX

NOTAH

SHRAH,1

INCBX

DECCL

JNZDLOOP

MOVDX,OUTBIT

MOVAL,0

OUTDX,AL;关所有八段管

RET

DISPLAYLEDENDP

DELAYPROCNEAR;延时子程序

PUSHAX

PUSHCX

MOVAL,0

MOVCX,AX

LOOP$;

POPCX

POPAX

RET

DELAYENDP

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

NOP

CLI;关中断

CALLIINIT;调用中断程序,检查是否要进位

CALLWRIINTVER

MOVAL,0B6H;8253控制字10100110H

MOVDX,CONTROL

OUTDX,AL

MOVAX,625;利用8253计数器

MOVDX,COUNT2

OUTDX,AL

MOVAL,AH

OUTDX,AL

MOVAL,MD8255;8255控制字

MOVDX,CTL8255

OUTDX,AL

MOVCNT,0;计数值初始为0

MOVAL,CNT

MOVDX,PA8255

OUTDX,AL

STI;开中断

LP:

MOVAL,HOUR

MOVAH,0

MOVCL,10

DIVCL

MOVCH,AH

MOVAH,0

MOVBX,OFFSETLEDMAP

ADDBX,AX

MOVAL,[BX];时的十位转换成显示码

MOVLEDBUF,AL;显示码存入显示缓冲区

MOVBX,OFFSETLEDMAP

MOVAL,CH

MOVAH,0

ADDBX,AX

MOVAL,[BX];时的个位转换成显示码

ORAL,80H

MOVLEDBUF+1,AL;显示码存入后一位显示缓冲区

MOVAL,MINUTE

MOVAH,0

MOVCL,10

DIVCL

MOVCH,AH

MOVAH,0

MOVBX,OFFSETLEDMAP

ADDBX,AX

MOVAL,[BX];分的十位转换成显示码

MOVLEDBUF+2,AL

MOVBX,OFFSETLEDMAP

MOVAL,CH

MOVAH,0

ADDBX,AX

MOVAL,[BX];分的个位转换成显示码

ORAL,80H

MOVLEDBUF+3,AL

MOVAL,SECOND

MOVAH,0

MOVCL,10

DIVCL

MOVCH,AH

MOVAH,0

MOVBX,OFFSETLEDMAP

ADDBX,AX

MOVAL,[BX];秒的十位转换成显示码

MOVLEDBUF+4,AL

MOVBX,OFFSETLEDMAP

MOVAL,CH

MOVAH,0

ADDBX,AX

MOVAL,[BX];分的个位转换成显示码

MOVLEDBUF+5,AL

MOVLEDBUF+6,01000000B;显示横杠

MOVAL,ZHOU;周的显示

MOVBX,OFFSETLEDMAP

ADDBX,AX

MOVAL,[BX]

MOVLEDBUF+7,AL

CALLDISPLAYLED;调用显示程序

JMPLP

CODEENDS

ENDSTART

四.调试现象:

刚开始时,找到的一段参考程序,但是又很多问题。

第一个就是没有在伪代码中定义堆栈段,这个很容易解决。

第二个问题是程序在LP子程序中无限循环,根本没运行中断子程序。

这个问题废了我们很大的功夫。

只好仔细研究中断的含义,必要的条件。

之后尝试改变程序的架构,又添加了几段必要的辅助程序,程序就可以运行了,并且在硬件上得到了正确的结果。

五.心得体会:

这次微机原理课程设计历时一个星期,在整整一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。

但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。

因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。

其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。

同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!

同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

六.参考文献

1.李干林,李升.微机原理及接口技术实验指导书.北京:

北京大学出版社.

2.李继灿.新编16/32位微型计算机原理及应用(第4版).北京:

清华大学出版社.

3.周荷琴,吴秀清.微型计算机原理与接口技术.合肥:

中国科学技术大学出版社.

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1