1、 -1-课程教案课程教案第六章:单片机应用实例第六章:单片机应用实例 -2-主要内容主要内容6.1 单片机应用系统设计的基本准则6.2 单片机应用系统的设计方法6.3 数码管时钟电路的设计 -3-6.1.1 可靠性 高可靠性是单片机系统应用的前提,在系统设计的每一个环节,都应该将可靠性作为首要的设计准则。提高系统的可靠性通常从以下几个方面考虑:1.使用可靠性高的元器件 2.采用双机系统 3.设计电路板时布线和接地要合理,严格安装硬件设备及电路6.1 单片机应用系统设计的基本准则 -4-4.对供电电源采用抗干扰措施 5.输入输出通道抗干扰措施 6.进行软硬件滤波 7.系统自诊断功能6.1.2 操
2、作维护方便操作维护方便6.1.3 性价比性价比6.1.4 设计周期短设计周期短。-5-6.2.1 系统总体设计 系统总体设计是单片机系统设计的前提,合理的总体设计是系统成败的关键。总体设计关键在于对系统功能和性能的认识和合理分析,系统单片机及关键芯片的选型,系统基本结构的确立和软、硬件功能的划分 6.2 单片机应用系统的设计方法 -6-开始明确任务选机型及外围主要芯片划分软、硬件功能硬件设计软件设计联机仿真调试排除故障、修改软件固化程序,独立运行系统研制完成图11.1 单片机系统研制过程单片机系统的研制过程图 -7-1.明确系统的功能与性能2.系统单片机选型3.划分系统软、硬件功能 4.确定系
3、统结构组成 -8-1.程序存储器 2.数据存储器 3.I/O接口 4.译码电路 5.总线驱动器 6.抗干扰电路 6.2.2 硬件设计硬件设计 -9-开始系统定义软件结构设计建立数学模型绘制程序流程图编写程序汇编在线仿真调试程序有错否?修改程序固化到EPROM结束YN11.3 软件设计流程图6.2.3 软件设计 软件设计流程 -10-软件设计通常分作系统定义、软件结构设计和程序设计等三个步骤(见上图)。1.系统定义 定义说明各输入/输出口的功能,确定信息交换的方式、与系统接口方式、所占口地址、读取和输出方式等。在程序存储器和数据存储器区域中,合理分配存储空间,其中包括系统主程序、常数表格、数据暂
4、存区域、堆栈区域和入口地址等。对面板控制开关、按键等输入量以及显示、打印等输出量也必须给予定义,以此作为编程依据。针对可能出现的由干扰引起的错误进行容错设计,给出错误处理方案,以达到提高软件可靠性的目的。明确所设计的用户程序应达到的精度、速度指标。-11-2.软件结构设计3.程序设计用户实时监控程序模块1模块2模块n模块1.1模块2.1模块n.1模块n.2模块n.2.1调度调用图 6.4 -12-系统调试包括硬件调试、软件调试和软、硬件联调。根据调试环境不同,系统调试又分为模拟调试与现场调试。各种调试所起的作用是不同的,它们所处的时间段也不一样,不过它们的目的都是为了查出用户系统中存在的错误或
5、缺陷。系统调试的一般过程如图6.5。6.2.4 系统总体调试系统总体调试 -13-系 统 调 试 开 始硬 件 调 试软 件 调 试系 统 联 调现 场 调 试调 试 结 束模拟调试图 6.5 -14-1.单片机应用系统调试工具 (1)单片机开发系统 (2)万用表 (3)逻辑笔 (4)逻辑脉冲发生器与模拟信号发生器 (5)示波器 (6)逻辑分析仪 -15-2.单片机应用系统的一般调试方法单片机应用系统的一般调试方法 (1)硬件调试硬件调试 静态调试 动态调试 (2)(2)软件调试软件调试 先独立后联机 先分块后组合 先单步后连续 -16-(3)(3)系统联调系统联调 软、硬件能否按预定要求配合
6、工作。系统运行中是否有潜在的设计时难以预料的错误。系统的动态性能指标(包括精度、速度参数)是否 满足设计要求。(4)(4)现场调试现场调试 -17-6.3 数码管时钟电路的设计数码管时钟电路的设计6.3.1 系统设计引言 LED数码管时钟电路采用24 h计时方式,时、分、秒用六位数码管显示。该电路采用AT89C2051单片机,使用3 V电池供电。6.3.2 系统设计原理以AT89C2051单片机来实现时钟计时显示有如下几个要点:1.计算计数初值 时钟计时的关键问题是秒的产生,因为秒是最小时钟单位,但使用MCS-51的定时器/计数器进行定时,即使按工作方式1,其最大定时时间也只能达到131ms,
7、离1s还差很远。为此,我们把秒计时用硬件定时和软件计数相结合的方法实现,即:把定时器的定时时间定为125ms,这样计数溢出8次就可得到1s,而8次计数可用软件方法实现。-18-为得到125ms定时,我们可使用定时器/计数器0,以工作方式1进行,假定单片机为6MHZ晶振,设计数初值为X,则有如下等式:(216 X)2=125000 计算得计数初值X=3036,二进制表示为110011011100B,十六进制表示为0CDCH。2.设定定时器定时方式 定时器采用中断定时方式完成,以便于通过中断服务程序进行溢出次数(每次125ms)的累计,计满8次即得到秒计时。-19-3.实现方法 通过在程序中的数值
8、累加和数值比较来实现从秒到分和从分到时的计时。4.设置时钟显示及显示缓冲区 假定时钟时间在6位LED数码管上进行显示(时、分、秒各占两位)。为此,要在内部RAM中设置显示缓冲区,共6个单元,与数码管对应关系如图6.12所示。显示缓冲区从左向右依次存放时、分、秒的数值。LED5LED4LED3LED2LED1LED07EH7DH7CH7BH7AH79H图6.12 LED显示器的缓冲单位 -20-6.3.3 系统硬件设计 数码管时钟电路如图6.13所示,其采用AT89C2051单片机最小化应用设计,LED显示用动态扫描方式实现,P1口输出段码数据,P3.0P3.5口作扫描输出,P3.7接按钮开关。
9、了提供LED数码管的驱动电流,用三极管9012作电源驱动输出。为了提高秒计时的精确度,本设计中的计时采用定时器T0中断完成,其余状态循环调用显示子程序,当P3.7端口开关按下时,转入调时功能程序。-21-图6.13 采用AT89C2051的六位时钟电路 供阳低电平有效低电平导通 -22-6.3.4 系统软件设计1.主程序(MAIN)主程序的主要功能是进行定时器计数器的初始化编程,然后通过反复调用显示子程序的方法,等待125ms定时中断的到来。系统主程序流程图如图6.14所示。-23-调用显示子程序设置循环次数开中断定时开始计数初值定时器0工作方式1显示缓冲区单元清0定义堆栈区MAIN等待定时中
10、断请求图 6.14 主程序流程 -24-ORG0000H;程序执行开始地址 LJMPSTART;跳到标号START执行 ORG000BH;定时器0中断程序入口 LJMPINTTO;跳到标号INTTO执行 ORG 0030H START:MOVSP,#60H;确立堆栈区 MOVR0,#79H;显示缓冲区首地址 MOVR7,#06H;显示位数ML1:MOVR0,#00H;显示缓冲单元清0 INCR0 DJNZR7,ML1 主程序清单如下主程序清单如下:-25-MOVTMOD,#01H;设置定时器0为方式1 MOVTL0,#0DCH;装计数器初值 MOVTH0,#0CH SETBEA;总中断开放 S
11、ETBET0;允许T0中断 SETBTR0;开启T0定时器 MOV30H,#08H;计数溢出次数ML0:LCALLDISPLAY;调用显示子程序 JNBP3.7 SETMM1;调整程序 SJMPML0 SETMM1:LJMP SETMM;转到调整程序 -26-2.加加1子程序子程序(DAADl)加1子程序用于完成对秒、分和时的加1操作,中断服务程序中在秒、分、时加1时共有三处调用此子程序。加l操作共包括以下三项内容:加1子程序清单:DAA1:MOVA,R0;加1子程序,十位送A DECR0 SWAP A;十位数占高4位 ORLA,R0;个位数占低4位 ADDA,#01H;加1 -27-DAA;
12、十进制调整 MOVR2,A;全值暂存R2中 ANLA,#0FH;屏蔽十位数,取个位数 MOVR0,A;个位值送显示缓冲单元 MOVA,R2 INCR0 ANLA,#0F0H;屏蔽个位数取出十位数 SWAP A;使十位数占低4位 MOVR0,A;十位数送显示缓冲单元 RET;返回 -28-十位数送缓冲单元把十位数交换到低半字节个位数送缓冲单元十进制调整加1取个位数,并占A低半字节使十位数占A高半字节取十位数DISPLAY图 6.5 加1子程序流程 -29-3.中断服务程序(PITO)中断服务程序的主要功能是进行计时操作。程序开始先判断计数溢出是否满了8次,不满8次表明还没达到最小计时单位秒,中断
13、返回;如满8次则表明已达到最小计时单位秒,程序继续向下执行,进行计时操作。中断服务程序流程如图11.16所示。中断子程序清单:INTT0:PUSHACC;现场保护 PUSHPSW SETBPSW.3;选1组通用寄存器 MOVTL0,#0DCH;计数器重新加载 MOVTH0,#0CH -30-MOV A,30H;循环次数减1 DEC A MOV 30H,A JNZ RET0;不满8次转移 MOV 30H,#08H;满8次开始计时 MOV R0,#7AH;秒显示缓冲单元 ACALL DAAD1;秒加1 MOVA,R2;加1后秒值在R2 XRL A,#60H;判是否到60秒 JNZ RET0;不到转
14、移 ACALL CLR0;到60S显示单元清0 MOV R0,#7CH;分显示缓冲单元地址 ACALLDAAD1;分加1 MOVA,R2 -31-XRLA,#60H;判是否到60分 JNZRET0 ACALLCLR0;到60分显示单元清0 MOVR0,#7EH;时显示缓冲单元地址 ACALLDAAD1;时加1 MOVA,R2 XRLA,#24H;判是否24小时 JNZRET0 ACALLCLR0;到24小时清缓冲单元RET0:POPACC;现场恢复 POPPSW RET1;中断返回 -32-CLR0:CLRA;清缓冲单元子程序 MOVR0,A;十位数缓冲单元清0 DECR0 MOVR0,A;个
15、位数缓冲单元清0 RET;返回4 4、清缓冲单元子程序清缓冲单元子程序:-33-秒显示缓冲单元清0秒加1循环次数减1计数器重新加载现场保护PITO是否满8次是否60秒时显示缓冲单元清0是否24小时是否60分分值加1现场恢复时值加1分显示缓冲单元清0返回图 11.16 中断服务程序流程 -34-5.显示子程序显示子程序 数码管显示的数据存放在内存单元79H一7EH中,其中79H7AH存放秒数据,7BH7CH存放分数据,7DH7EH存放时数据,每一地址单元内均为十进制BCD码。由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中。显示时,先取出79H7EH某一地
16、址中的数据,然后查得对应的显示用段码从P1口输出。P3口将对应的数码管选中,就能显示该地址单元的数据值。-35-DISPLAY:MOVR0,#79H;建立显示缓冲区首址 MOVR3,#FEH;从右数第一位显示 MOVA,R3;扫描字放入ALD0:MOVP3,A;从P3口输出 MOVA,R0;取显示数据到A MOVDPTR,#TAB;取段码表地址 MOVCA,A+DPTR;查显示数据对应段码 MOVP1,A;段码放P1口 ACALLDL1MS;延时1ms INCR0;指向下一地址 -36-MOVA,R3 JBACC.5 LD1;ACC.5=0一次显示结束 RLA;A中数据循环左移 MOVR3,A;将位控码送R3保存 AJMPLD0;继续扫描LD1:RET TAB:DBC0H;字形代码表0 DB F9H;1 DBA4H;2 DBB0H;3 DB99H;4 -37-Thank You!