单片机原理及接口技术电子秒表课程设计.docx

上传人:b****4 文档编号:3445006 上传时间:2022-11-23 格式:DOCX 页数:21 大小:431.13KB
下载 相关 举报
单片机原理及接口技术电子秒表课程设计.docx_第1页
第1页 / 共21页
单片机原理及接口技术电子秒表课程设计.docx_第2页
第2页 / 共21页
单片机原理及接口技术电子秒表课程设计.docx_第3页
第3页 / 共21页
单片机原理及接口技术电子秒表课程设计.docx_第4页
第4页 / 共21页
单片机原理及接口技术电子秒表课程设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

单片机原理及接口技术电子秒表课程设计.docx

《单片机原理及接口技术电子秒表课程设计.docx》由会员分享,可在线阅读,更多相关《单片机原理及接口技术电子秒表课程设计.docx(21页珍藏版)》请在冰豆网上搜索。

单片机原理及接口技术电子秒表课程设计.docx

单片机原理及接口技术电子秒表课程设计

《单片机原理及接口技术》课程设计

——单片机秒表的设计

学院:

机电工程学院

专业班级:

10级电气工程二班

姓名:

姚杜村

学号:

1002120208

指导教师:

宋东亚杨坤漓

时间:

2012年11月20日―2013年01月05日

目录

序言0

第一章绪论1

1.1概述1

1.2设计任务2

1.3设计目的2

第二章设计任务及内容2

2.1设计题目2

2.2设计内容2

2.3功能分析2

第三章总体设计及核心器件简介3

3.1硬件设计3

3.1.189C51单片机3

3.1.2晶体振荡电路4

3.1.3复位电路5

3.1.4按键电路5

3.1.5显示电路6

3.2软件设计6

3.2.1程序设计思想6

3.2.2系统资源的分配6

3.2.3主程序设计7

3.2.4中断程序设计7

第四章数字电子秒表的调试9

4.1软件的仿真与调试9

4.2硬件的调试10

4.2.1晶振电路的测试10

4.2.2复位电路的测试10

4.3程序设计11

4.3.1秒表的初始化11

4.3.2开始计时11

4.3.3计时程序11

4.3.4暂停计时11

4.3.5秒表清零11

心得体会14

附录A秒表仿真电路图15

附录B源程序15

参考文献18

 

序言

随着电子技术的发展,电子技术在各个领域的运用也越来越广泛,人对它的认识也逐步加深。

作为一个学习电气专业的当代大学生来说,我们不但要有扎实的基础知识、课本知识,还应有较强的动手能力。

现实也要求我们既精通电子技术理论,更要掌握电子电路设计、实验研究和调试技术。

秒表计时器秒表计时器常常用于体育竞赛及各种其他要求有较精确时间的各领域中。

其中启/停开关的使用方法与传统的机械计时器相同,即按一下启/停开关,启动计时器开始计时,再按一下启/停开关计时终止。

而复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时应立即终止,并对计时器清零。

本设计就是利用所学到的电子元器件将脉冲源用数码管显示出来,以制承诺简易的秒表。

电子秒表是重要的计时工具,广泛应用于各行各业。

可以用来测量物体的速度和加速度,可以用来验证牛顿第二定律和机械能守恒等物理实验。

相对其他计时工具具有便捷、准确、可比性高等优点。

减少工作人员的负担,降低错误率。

姚杜村

第一章绪论

1.1概述

单片微型计算机简称单片机,又称微控制器,是微型计算机的一个重要分支。

单片机是20世纪七十年代中期发展起来的一种大规模集成电路芯片,是集CPU、RAM、ROM、I/O接口和终端系统与同一硅片的器件。

20世纪八十年代以来单片机发展迅速各类新产品不断涌现出现许多新产品,出现了许多高性能新型机种现已成为工业控制和各控制领域的支柱产业之一。

由于单片机功能强、体积小、可靠性好、价格便宜等独特优点因而受到人们的高度重视并取到了一系列的科研成果,成为传统工业技术改造和新产品更新换代的理想机种,并具有广阔的发展前景。

本设计运用所学的单片机知识,将单片机与普通秒表相结合设计了电子秒表,具有显示直观、读取方便、精度高等优良特点,在计时中应用广泛。

1.2设计任务

以单片机为核心,设计一个秒表,具有计时功能,按键有启动计时、数据清零、停止、时间显示。

1.3设计目的

加强对51系列单片机的构造了解及应用,熟悉汇编语言或C语言编程,综合掌握和理解设计各部分的工作原理、设计过程、芯片器件的选择方法、模块化编程等多项知识。

(1)用单片机模拟实现具体应用使个人设计系统能够真正使用;

(2)把理论知识与实践知识相结合,充分发挥个人能力,并在实践中得到锻炼;

(3)提高利用已学的知识分析和解决问题的能力;

(4)提高动手实践能力。

第二章设计任务及内容

2.1设计题目

秒表的设计

2.2设计内容

(1)填写设计任务书;

(2)进行总体设计,画出设计原理图;

(3)用PROTEUS软件画出设计电路图;

(4)用Keil软件编写程序;

(5)在PROTEUS里模拟并调试程序达到期望功能。

2.3功能分析

采用3个LED数码管显示时间,计时范围设置为0~99.9秒,即精确到0.1秒,用按键控制秒表的“开始”、“暂停”、“复位”,按“开始”按键,开始计时;按“暂停”按键,系统暂停计时;再按“开始”键,系统继续计时;数码管显示当前计时值;按“复位”按键,系统清零。

第三章总体设计及核心器件简介

本实验利用单片机的定时器/计数器定时和计数的原理,通过采用Proteus仿真软件来模拟实现。

模拟AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计时的开启、暂停、继续、与复位。

其中有三个数码管来显示数据,两个数码管显示秒(两位),另一个数码管显示十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒得数码管的个位加一,并且十分之一秒显示清零重新从零计数。

同理当个位满十进一后个位也清零重新计数,当计时超过范围(即超过99.9秒)后,所有数码管全部清零重新计数。

3.1硬件设计

3.1.189C51单片机

MCS-51系列单片机是8位单片机产品,89C51是其中的典型代表,基本模块包括以下几个部分:

(1)CPU:

89C51的CPU是8位的,另外89C51内部有1个位处理器

(2)R0M:

4KB的片内程序存储器,存放开发调试完成的应用程序

(3)RAM:

256B的片内数据存储器,容量小,但作用大

(4)I/O口:

P0-P3,共4个口32条双向且可位寻址的I/O口线

(5)中断系统:

共5个中断源,3个内部中断,2个外部中断

(6)定时器/计数器:

2个16位的可编程定时器/计数器

(7)通用串行口:

全双工通用异步接收器/发送器

(8)振荡器:

89C51的外接晶振与内部时钟振荡器为CPU提供时钟信号

(9)总线控制:

89C51对外提供若干控制总线,便于系统扩展

89C51的引脚如下图:

89C51单片机引脚图

 

3.1.2晶体振荡电路

89C51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反相振荡放大器的输入及内部时钟工作电路的输入和来自反相振荡器的输出,该反相放大器可以配置为片内振荡器。

这里选用51单片机12MHZ的内部振荡方式,电路如下:

C2、C3起稳定振荡频率、快速起振的作用

晶振电路

3.1.3复位电路

采用上电复位,上电后,由于电容充电,使RST持续一段时间的高电平,从而实现上电复位操作。

这不仅能使单片机复位,还能是单片机的外围设备同时复位,当程序出现错误时,可以随时使电路复位。

电路图如下:

复位电路

3.1.4按键电路

当按键被按下时,相应的引脚被拉低,经扫描后,获得键值,并执行键功能程序,因此按下不同的按键,将执行不同的功能程序。

电路图如下:

按键电路

3.1.5显示电路

采用3个LED数码管,LED是七段显示器,内部有7个条形发光二极管和1个小圆点发光二极管,根据各管的亮暗组成字符。

在用数码管显示时,有静态和动态两种选择,这里采用LED动态显示,用P0、P1、P2口驱动显示,由于P0口没有上拉电阻,因此P0口需要外接上拉电阻才能输出高电平,这里使用8个4.7k的电阻作为上拉电阻。

电路图如下:

显示电路3.1.5

3.2软件设计

3.2.1程序设计思想

结合电路,程序的总体思路如图3.1.5。

3.2.2系统资源的分配

本设计系统所用到的单片机端口数比较多,所以在这里将对数字电子秒表的硬件资源的大概分配加以说明。

片内RAM的分配、各功能键的定义以及各端口的分配安排如表3.3所示。

表3.3端口的分配安排表

名称

功能描述

初始化值

7BH-7DH

0.1s-10s位显示寄存区

00H

R3-R5

0.1s-10s位溢出计数区

定时器T0

控制秒表的最小精度

3CB0H

外部中断INT0

停止中断信号入口

外部中断INT1

开始中断信号入口

3.2.3主程序设计

本系统程序主要模块由主程序、定时中断服务程序、外部中断INT0服务程序和外部中断INT1服务程序组成。

其中主程序是整个程序的主体。

可以对各个中断程序进行调用,协调各个子程序之间的联系。

系统(上电)复位后,进入主程序,主程序流程图如图3.11。

首先对系统进行初始化,包括设置各入口地址、中断的开启、对各个数据缓存区清“0”、赋定时器初值,初始化完毕后,就进入数码管显示程序。

数码管显示程序对显示缓存区内的数值进行调用并在数码管上进行动态显示。

显示一次就对P3.4进行一次扫描,查询启动键P3.4是否按下,当启动键按下后,数码管全零显示,没有按下则返回开始,重新循环显示数字8。

在主程序中还进行了赋寄存区的初始值、设置定时器初值以及开启外部中断等操作,当定时时间到后就转去执行定时中断程序。

当外部中断有请求则去执行外部中断服务程序,并在执行完后返回主程序。

3.2.4中断程序设计

现在方案中采用了两个中断,外部中断INT0,INT1。

CPU在响应中断时,先处理高级中断,在处理低级中断,若有多个同级中断时,则按自然优先顺序处理。

例如当CPU正在处理一个中断申请时,有出现了另一个优先级比它高的中断请求,这是,CPU就暂停终止对当前优先级较低的中断源的服务,转去响应优先级比它高的中断请求,并为其服务。

待服务结束,再继续执行原来较低级的中断服务程序。

而当CPU为级别高的终端服务程序服务时,如果级别低的中断发出中断请求,此时CPU是不会响应的,所以为了避免开始和暂停两个按键中的一个出现没有响应的情况,在进行程序编辑时要注意对中断的使用,避免出现中断的嵌套。

,合理分配中断对本设计的实现是至关重要的。

80C51的自然优先级顺序排列如下:

中断源最高

外部中断INT0

定时/计数器T0溢出中断

外部中断INT1

定时/计数器T1溢出中断

串行口中断最低

数字式秒表中的两个按键采用了中断实现功能。

开始采用外部中断INT0,停止采用外部中断INT1。

另外程序中还用到了定时/计数器0溢出中断进行计时。

依据设计要求,停止的外部中断INT1中断级别最高,计时的定时/计数器0溢出中断次之,开始的外部中断INT0级别最低。

(1)外部中断INT0服务程序

外部中断INT0服务程序结合外部P3.2开始键实现数字电子秒表的计时开始功能,具体流程图如图2.12。

当按下P3.2开始键按下向CPU发出外部中断请求,CPU转向外部中断0服务程序执行,启动定时器T0。

主程序流程图

第四章数字电子秒表的调试

4.1软件的仿真与调试

ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件,它可以仿真、分析(SPICE)各种模拟器件和集成电路。

该软件的主要特点总结后有以下四点:

①实现了单片机仿真和SPICE电路仿真相结合的功能。

②支持目前主流单片机系统的仿真。

③提供了软件调试功能,并可以与WAVE联合仿真调试。

④具有强大的原理图绘制功能。

总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。

在电子领域中也起到了很大的作用,它的出现仿真不需要先焊接电路,可以先仿真调试通过后在焊电路,节省了不少在硬件调试上所花的时间。

ProteusISIS的工作界面是一种标准的Windows界面。

它包括标题栏、主菜单、状态栏、标准工具栏、绘图工具栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口等十几个工具,方便了使用者的使用。

ProteusSISI绘制原理图的操作与Protel99se绘制原理图的操作基本相同,在这里就不再作赘述。

下面拿本设计中的一个仿真例子作简述说明。

运行ProteusSISI后,绘制病床呼叫系统的原理图。

首先打开已经画好的proteusDSN文件,双击图中的80C51芯片,就弹出一个窗口,在ProgramFile项中通过路径选择在WAVE中生成的HEX文件,双击选中后确定,这样仿真图中的80C51芯片就已经读取了本设计中的HEX文件。

单击“三角形按钮”进行仿真。

通过对仿真结果的观察来对程序进行修改,最终使程序到达设计要求。

4.2硬件的调试

按照之前设计好的数字电子秒表原理图,检测电路中是否存在短路。

因为系统采用的是共阴极数码管作为显示电路,必须确保数码管的公共端接的是低电平。

4.2.1晶振电路的测试

在单片机正常运行的必要条件是单片机系统的时钟稳定正常。

实际中,因为各种原因导致系统时钟不正常而出现系统无法正常运行,因此系统时钟是否振动是通电检查的首要环节。

4.2.2复位电路的测试

复位不正常也会导致系统不能工作。

如果复位引脚始终为高电平,系统将始终处于复位状态;如果始终为低电平,不能产生复位所需的高电平信号脉冲,则系统也可能无法正常工作。

单片机正常工作时,RST复位引脚应为0V,按下复位按键时,复位引脚为高电平5V左右。

4.3程序设计

程序的各个组成模块及工作流程描述:

4.3.1秒表的初始化

根据程序流程图,先进行秒表的初始化,即:

①将I/O口P3全写一,为秒表的控制输入做好准备;②将数码管全部置零,使其处于秒表计时的初始状态;③将工作寄存器R0~R2以及30H初始化,留待后面的计时程序备用;④将定时器0置于工作方式1,并为其装入计时预置数D8FE(因为程序运行过程中占用的时间会导致一定误差,此为经实物测试之后的修正值),即将定时器定为每10ms溢出;⑤开总中断允许和定时器0中断允许。

初始化完成后,即进入之后的按键扫描程序。

4.3.2开始计时

若确认“开始计时”键被按下,则跳转至程序标号“RUN”处,将定时器0计时允许控制位TR0置位,则定时器开始运行。

此动作完成后,返回按键检测程序,等待操作者的下一次指令。

4.3.3计时程序

定时器0计时至10ms,溢出,引发中断,程序跳转至定时器0中断服务程序入口000BH处执行。

程序跳转至中断服务程序TIME0。

由于秒表的最小计时单位是0.1s,即100ms,因此需加入软件计时,使定时器0溢出10次之后才改变数码管的显示状态。

因此每来一次中断就将30H中的数加1,若30H中的数没有到10,则给定时器0重新装入预置数,之后中断返回并继续等待中断;到10了,才进入显示程序,改变数码管的显示状态,执行完毕之后中断返回并继续等待中断。

4.3.4暂停计时

若确认“暂停计时”键被按下,则跳转至程序标号“PAUSE”处,将定时器0计时允许控制位TR0置零,则定时器暂停运行。

此动作完成后,返回按键检测程序,等待操作者的下一次指令。

4.3.5秒表清零

若确认“秒表清零”键被按下,则跳转至程序标号“STOP”处,将TR0置零,关闭定时器0运行。

并且将数码管、工作寄存器、定时器0预置数全部重置,使其处于秒表计时的初始状态。

此动作完成后,返回按键检测程序,等待操作者的下一次指令。

程序清单如下:

ORG0000H;程序开始

AJMPSTART;跳转到主程序START

ORG000BH;定时器0中断的地址入口

AJMPTIME0;定时器0溢出,跳转到中断程序TIME0

START:

;主程序

MOVP3,#0FFH;输入端口P3全写1

MOVP0,#3FH;

MOVP1,#3FH;

MOVP2,#0BFH;数码管初始化

MOV30H,#00H;

MOVR0,#00H;

MOVR1,#0AH;

MOVR2,#00H;工作寄存器初始化

MOVTMOD,#01H;定时器0工作于方式1

MOVTH0,#0D8H;

MOVTL0,#0FEH;定时器0预置数(D8FEH=55550D)

SETBEA;开总中断允许

SETBET0;开定时器0中断允许

READ:

;读键程序

L1:

JBP3.2,L2;

LCALLDELAY;按键延时防抖

JBP3.2,L1;

AJMPRUN;确认计时键被按下,开始/继续计时

L2:

JBP3.3,L3;

LCALLDELAY;按键延时防抖

JBP3.3,L2;

AJMPPAUSE;确认暂停键被按下,暂停计时

L3:

JBP3.4,L1;

LCALLDELAY;按键延时防抖

JBP3.4,L3;

AJMPSTOP;确认清零键被按下,秒表重置

RUN:

;计时键按下,跳转至此

SETBTR0;定时器0开始/继续运行

AJMPREAD;

PAUSE:

;暂停键按下,跳转至此

CLRTR0;

AJMPREAD;

TIME0:

;定时器0溢出,中断,跳转至此

INC30H;

MOVA,30H;

CJNEA,#0AH,TIME1;30H单元中的值到10了吗?

(计时到10毫秒了吗,也就是说,该向毫秒位送数了吗?

MOVDPTR,#TAB;30H中的值到10了,顺序执行

MOVA,R0;

INCR0;

CJNER0,#0AH,GET;R0中的值到10了吗?

(该向秒位进位了吗?

MOVR0,#00H;

LCALLSECOND;到了,R0清零,调用进位子程序SECOND,向秒位进位

GET:

;没到,跳过进位子程序

MOVCA,@A+DPTR;

MOVP1,A;查表并向数码管毫秒位送数

MOV30H,#00H;重置30H单元

TIME1:

MOVTH0,#0D8H;

MOVTL0,#0FEH;给定时器0重新预置数

RETI;中断返回

SECOND:

;秒位进位子程序

PUSHACC;

PUSHPSW;将ACC和PSW推入堆栈保护

MOVA,R1;

INCR1;

CJNER1,#14H,GET1;R1中的值到20了吗,也就是说,该向十秒位进位了吗?

MOVR1,#0AH;

LCALLSECOND1;到了。

R1重置,调用进位子程序SECOND1,向十秒位进位

GET1:

;没到,跳过进位子程序

MOVCA,@A+DPTR;

MOVP2,A;查表并向数码管秒位送数

POPPSW;

POPACC;PSW,ACC出栈

RET;子程序返回

SECOND1:

;十秒位进位子程序

PUSHACC;

PUSHPSW;将ACC和PSW推入堆栈保护

MOVA,R2;

INCR2;

CJNER2,#0AH,GET2;R2中的值到10了吗,也就是说,该将此位归零了吗?

MOVR2,#00H;到了,R2清零

GET2:

;没到,跳过清零程序

MOVCA,@A+DPTR;

MOVP0,A;查表并向数码管十秒位送数

POPPSW;

POPACC;PSW,ACC出栈

RET;子程序返回

STOP:

;清零键按下,跳转至此

MOVP3,#0FFH;

MOVP0,#3FH;

MOVP1,#3FH;

MOVP2,#0BFH;数码管清零

MOV30H,#00H;

MOVR0,#00H;

MOVR1,#0AH;

MOVR2,#00H;工作寄存器初始化

CLRTR0;计时器0停止计时

MOVTH0,#0D8H;

MOVTL0,#0FEH;定时器0预置数

AJMPREAD;

DELAY:

;延时10ms子程序

MOVR3,#50D;

D1:

MOVR4,#100D;

D2:

DJNZR4,D2;

DJNZR3,D1;

RET;子程序返回

TAB:

DB06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,3FH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH,0BFH;数码管段选码数表

END;程序结束

心得体会

在此次课程设计中,我主要承担程序设计的工作。

虽然秒表是一个非常简单的功能,但要在单片机中使用汇编语言来实现这个功能,仍然花了我不少心思。

首先是计时的问题,由于单片机计时器最大只能计时65.5ms,因此要实现毫秒位的变化,我采用了软件计时的方法,单片机只需计时10ms,然后用软件重复10次,即可达到计时100ms的目的。

显示方面,为了使编程简单,我使用了静态显示。

不过这使得占用I/O口线过多,而且连线复杂繁琐,为实物的制作带来了不便。

在以后的学习和应用中我会努力加深动态扫描显示的理解,争取熟练运用。

根据书本知识,我们一开始只给P0口加上了上拉电阻,但是实物做成后我们发现P1和P2口得输出显示非常暗,初步确定是驱动能力不足的问题后,我们给二者也加上了上拉电阻,结果使得显示正常了。

由此我们了解到,实践才是检验真理的唯一标准,有时候书本上的知识需要经过实践的改进,才能运用到实际中。

此次课程设计巩固了我的基础知识,提高了我的应用水平,锻炼了我的动手能力,使我受益匪浅。

然而,在吸取经验的同时,我也吃了不少教训。

在编程、仿真方面都走了不少弯路。

但是,学则要有所收获,经过此次的锻炼,我在很多方面都已经有所提高,知识也掌握得更加扎实了。

在今后的学习和实践中,我将继续努力钻研,提高自己,争取在学术和记忆上获得更大的进步。

 

附录A秒表仿真电路图

 

附录B源程序

ORG0000H;程序开始

AJMPSTART;跳转到主程序START

ORG000BH;定时器0中断的地址入口

AJMPTIME0;定时器0溢出,跳转到中断程序TIME0

START:

;主程序

MOVP3,#0FFH;输入端口P3全写1

MOVP0,#3FH;

MOVP1,#3FH;

MOVP2,#0BFH;数码管初始化

MOV30H,#00H;

MOVR0,#00H;

MOVR1,#0AH;

MOVR2,#00H;工作寄存器初始化

MOVTMOD,#01H;定时器0工作于方式1

MOVTH0,#0D8H;

MOVTL0,#0FEH;定时器0预置数(D8FEH=55550D)

SETBEA;开总中断允许

SETBET0;开定时器0中断允许

READ:

;读键程序

L1:

JBP3.2,L2;

LCALLDELAY;按键延时防抖

JBP3.2,L1;

AJMPRUN;确认计时键被按下,开始/继续计时

L2:

JBP3.3,L3;

LCALLDELAY;按键延时防抖

JBP3.3,L2;

AJMPPAUSE;确认暂停键被按下,暂停计时

L3:

JBP3.4,L1;

LCALLDELAY;按键延时防抖

JBP3.4,L3;

AJMPSTOP;确认清零键被按下,秒表重置

RUN:

;计时键按下,跳转至此

SETBTR0;定时器0开始/继续运行

AJMPREAD;

PAUSE:

;暂停键按下,跳转至此

CLRTR0;

AJMPREAD;

TIME0:

;定时器0溢出,中断,跳转至此

INC30H;

MOVA,30H;

CJNEA,#0AH

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

当前位置:首页 > 表格模板 > 合同协议

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

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