本章学习目标 :...

Post on 12-Jan-2016

130 Views

Category:

Documents

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

第 9 章 综合设计实例. 本章学习目标 : 本章介绍了单片机的选型及应用系统的设计过程。通过一个综合实例,完整地介绍了 89C51 与外围电路的硬件接口及软件设计。通过对本章的学习,读者应达到以下目标: 能熟悉单片机系统设计的基本要求及研发过程 学会正确选择单片机的型号 能看懂设计实例,并尝试对具体课题进行总体设计. 9.1 单片机应用系统设计过程. 9.1.1 单片机系统设计的基本要求. 1 .可靠性要高 ● 应选用可靠性高的元器件,以防止器件的损坏影响系统的可靠运行; ● 选用典型电路,排除电路的不稳定因素; - PowerPoint PPT Presentation

TRANSCRIPT

本章学习目标 : 本章介绍了单片机的选型及应用系统的设计过程。通过一个综合实例,完整地介绍了 89C51 与外围电路的硬件接口及软件设计。通过对本章的学习,读者应达到以下目标:

能熟悉单片机系统设计的基本要求及研发过程学会正确选择单片机的型号能看懂设计实例,并尝试对具体课题进行总体设计

第第 99 章章 综合设计实例综合设计实例

9.1 单片机应用系统设计过程9.1.1 单片机系统设计的基本要求1.可靠性要高 ● 应选用可靠性高的元器件,以防止器件的损坏影响系统的可靠运行;

● 选用典型电路,排除电路的不稳定因素;

● 采用必要的冗余设计或增加系统的故障自检测和自处理功能;

● 采取必要的抗干扰措施,以防止环境干扰。

2.操作维修要方便 ●系统结构要规范化、模块化; ●系统的控制开关不能太多,不能太复杂; ● 操作顺序简单明了,操作功能简明直观; ●易于查找故障和排除故障。

3.性能价格比要高 优化系统设计,简化外围硬件电路,或采用硬件软化技术提高系统的性能价格比。

4.具有自我保护意识 应考虑软件具有加密功能,使固化到单片机内的用户程序不能被非法读出或复制。

9.1.2 单片机应用系统的组成 任何单片机应用系统都由硬件和软件两大部分组成。1.硬件组成

硬件由单片机、存储器、若干 I/O接口及外围设备等组成,如图 9—1所示。

图 9—1 单片机系统硬件组成示意图

( 1)单片机 是整个系统的核心部件,能运行程序和处理数据。( 2)存储器 用于存储单片机程序(程序存储器)及数据(数据存储器)。( 3) I/O 接口 是单片机与外部被控对象的信息交换通道。包括以下几部分: 数字量(频率、脉冲等) I/O接口

开关量(继电器开关、无触点开关、电磁阀等) I/O

接口   模拟量 I/O接口( A/D或 D/A转换电路)

( 4 )通用外部设备 是进行人—机对话的联系纽带。包括以下几部分:

●键盘 用于输入数据及修改系统参数等。

●显示器 用于显示控制系统工作状态及各种被测参数。

●打印机 用于打印各种待分析及处理的数据或图表。 ( 5 )检测与执行机构

检测单元 用于将各种被测参数转变成电量信号,供计算机处理。一般采用传感器实现。

执行机构 用于驱动外部被控对象,一般有电动、气动和液压等驱动方式。

2.软件组成

软件主要由应用软件和开发软件两大类构成。( 1 )应用软件 是由软件设计者提供的、针对不同单片机控制系统功能所编写的软件,专门用于对整个单片机系统的管理和控制。( 2 )开发软件 是指在开发、调试控制系统时使用的软件,如汇编程序、编译程序、调试和仿真程序、固化程序等。

9.1.3 应用系统的研制开发过程1.确定总体设计方案

开 始

用户需求分析及方案调研

确定功能指标

选机型,划分软硬件

系统扩展方案设计

外围电路、接口电路方案设计

系统硬件电路设计

硬件电路检查

按功能确定软件模块

软件结构设计

模块化软件编制

汇编

硬件系统诊断

测试软件

硬件合格?

模块化软件调试

模块化软件合 格? 软件修改

所有模块化软件均调试完?

N

Y

Y

N

N

Y

接开发装置

所有模块化软件链接

运行调试程序

合格? 软件修改

程序固化到 EPROM

脱机运行

完成设计

N

Y

(1) 用户需求分析与方案调研 目的:通过对市场及用户的了解明确应用系统的设计目标及技术指标。 内容主要: ①对国内外同类系统的状态分析; ②明确被控、被测参数的形式(电量,非电量,模拟量,数字量等)、被测控参数的范围、性能指标、系统功能、显示、报警及打印要求; ③确定课题的软、硬件技术难度及主攻方向等。( 2 )可行性分析 目的:对系统开发研制的必要性及可行性做出明确的判断并决定开发工作是否继续。

( 3 )系统方案设计 目的:为整个系统设计建立一个逻辑模型。 主要内容:  ● 进行必要的理论分析和计算,确定合理的控制算法;  ● 选择机型;  ● 划分系统软、硬件的功能,合理搭配软、硬件比重; ● 确定系统的硬件配置,包括系统的扩展方案、外围电路的配置及接口电路方案的确定,并画出各部分的功能框图; ●确定系统软件功能模块的划分及各功能模块的程序实现方法,并画出流程图; ● 估计系统的软、硬件资源并进行存储空间的分配。

2.系统的详细设计与制作 包括硬件设计与软件设计两大部分。

( 1 )硬件设计

① 任务:根据总体设计要求,设计系统的硬件电路原理图,并初步设计印制电路板等。

② 主要内容:单片机系统扩展(如存储器扩展、 I/O 接口扩展、中

断系统扩展等);系统配置(如键盘、显示器、打印机、 A/D 或 D/A

转换等)

③ 单片机系统扩展及配置应遵循的原则:

● 尽量选用典型通用的电路;

● 系统扩展及配置应留有余地,以便于今后的系统扩充;

● 硬件结构应结合软件考虑,尽可能用软件代替硬件,简化硬件结构;

  ● 应选用性能匹配且功耗低的器件;

  ● 适当考虑 CPU的总线驱动能力;

  ● 注意可靠性及抗干扰设计。

( 2 )软件设计

软件设计的思想见第 3章,软件设计的内容及步骤如图9—3所示。

① 系统定义 定义各输入 /输出端口地址及工作方式,分配主程序、中断程序、表格、堆栈等存储空间;

  ②软件结构设计 常用的程序设计方法有模块化程序设计(见第 3章)、自顶向下逐步求精程序设计、结构化程序设计三种。

③ 建立数学模型 用于描述各输入变量和输出变量之间的数学关系并确定算法。

④ 绘制程序流程图 根据系统功能、操作过程、软件结构及算法进行绘制。

⑤ 编写程序 依据流程图选择适合的语言来编写主程序及各功能模块程序。

⑥ 汇编与调试 将编写好的用户程序汇编成机器码,并利用仿真器进行调试和修改。

开 始

系统定义

软件结构设计

建立数学模型

绘制程序流程图

编写程序

汇 编

在线仿真调试

程序有错?

修改程序

固化到 EPROM

结 束

Y

N

图 9—3 软件设计步骤

硬件调试是利用开发系统、基本测试仪器(万用表、示波器等),通过执行开发系统有关命令或测试程序,检查用户系统硬件中存在的故障。它又可分为静态调试和动态调试两步: ● 静态调试即用户系统未工作时的一种硬件检查。一般采用目测、万用表测试、加电测试等方法对印制电路板及各芯片、器件进行检查。

● 动态调试是在用户系统工作时发现和排除硬件故障的一种硬件检查。其一般方法是先进行各单元电路调试再进行全系统调试。

什么是硬件调试?

3.仿真调试 仿真调试分硬件调试、软件调试和系统联调三个阶段。( 1 )硬件调试

( 2 )软件调试 软件调试是通过对用户程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。 软件调试的一般方法是先独立后联机、先分块后组合、先单步后连续。

什么是软件调试?( 3 )系统联调 系统联调是指让用户系统的软件在其硬件上实际运行,并进行软、硬件联合调试。

4.程序固化及独立运行5.文件编制阶段 文件应包括:

任务描述;设计的指导思想及设计方案论证;性能测定及现场试用报告与说明;使用指南;软件资料(流程图、子程序使用说明、地址分配、程序清单);硬件资料(电路原理图、元件布置图及接线图、接插件引脚图、印制线路板图、注意事项等)。

9.2 单片机的选型9.2.1 单片机的性能指标1.单片机的位数

单片机的位数由其内核 CPU的位数决定。位数越多,单片机处理数据的能力就越强。目前以 8位机应用居多。

2 .运行速度

单片机的运行速度取决于外部晶振或外部时钟信号的频率。如 89C51 的外部时钟频率可达 24MHz 。单片机运行速度高则执行速度快,但功耗也会相应地增加,同时要注意其外围接口芯片与工作速度的配合。

3.存储器容量

通常指片内 ROM 、 RAM的配置情况。

4.中断及定时器 基本型单片机与增强型单片机所拥有的中断源及定时/ 计数器个数不一样。5.输入 /输出端口 输入 /输出端口有输入口、输出口及双向口几种类型; 有些输入 /输出口还同时具备了总线的功能。一些专用的单片机上还带有特殊功能的端口,如大电流驱动口、 SPI串行口、 I2C串行口、 A/D输入口、 D/A输出口、红外发射接收口、 PWM输出口等。

6.功耗、封装及环境温度 功耗:在一些自动监测仪表及电池供电的产品中,低功耗是主要的技术指标,通常采用 HCMOS工艺的单片机在低电压下工作。

封装:单片机的封装一般有 DIP、 QFP、 PLCC等类型,应从印制板的尺寸、加工手段、购买途径及成本等方面综合考虑。

环境温度:根据工作环境温度的不同可将单片机分为商业级( 0℃~70℃)、工业级( -40℃~85℃)、汽车级( -

40℃~125℃)和军用级( -55℃~125℃)。

7.极限参数 极限参数主要指:

最高使用电压、最低使用电压最高使用温度、最低使用温度最大功耗最大电流端口最大输入电压端口最大输出电流最高焊接温度最长焊接时间

9.2.2 单片机的选型原则1.单片机的系统适应性 所谓系统适应性是指能否用这个单片机完成对应用系统的控制任务。

主要考虑以下几点:

● 是否有所需的 I/O端口数

● 是否有所需的中断源及定时器

● 是否有所需的外围端口部件

● 是否有合适的计算处理能力

● 是否有足够的极限性能

2.单片机的可开发性( 1 )开发环境 包括汇编程序、编译、连接程序。

( 2 )调试工具 包括在线仿真器、逻辑分析工具、调试监控程序。

( 3 )在线 BBS服务 包括实时执行、应用案例、缺陷故障报告、实用软件、样本源码。

( 4 )应用支持 包括是否存在专职的应用支持机构?是否存在应用工程师及销售人员的支持?支持人员的学识水平如何?是否有便利的通信工具,是否及时得到支持?

3.制造商历史及可购买性 ● 产品的性价比以及是否可靠?

● 购买途径是否顺畅?

● 供货量是否充足稳定?

● 是否停产?

● 是否在改进之中?

总结依据上述三个原则进行单片机的选型,应可以选择出最能适用于具体应用系统的单片机,同时可以保证应用系统具有高可靠性、高性价比、高使用寿命及可升级换代性。

9.3 设计实例:多功能数字钟9.3.1 设计要求

设计制作具有下列功能的数字钟:

    自动计时,由 6位 LED显示器显示时、分和秒;

具备校准功能,可以直接由 0-9 数字键设置当前时间;

    具备定时闹钟功能。

9.3.2 设计方案1. 计时方案

利用单片机内部的定时 /计数器进行中断定时,配合软件延时实现时、分和秒的计时。

2. 键盘 /显示方案

设计方案中采用 4×3键盘实现输入设置,采用动态显示方式实现 LED显示,如图所示。

3、控制方案

( 1 )时间显示

上电后系统自动进入时钟显示,从 00: 00: 00开始计时,此时可以设定当前时间。

( 2 )时间调整

按下 C/R键(时间设定 /启动计时键),系统停止计时,进入时间设定状态,系统保持原有显示,等待键入当前时间,按下 0~9数字键可以顺序设置时、分和秒,并在相应的 LED上显示设置值, 6位设置完毕后系统将从设定后的时间开始计时显示。

( 3 )闹钟设置

按下 ALM键(闹钟设置 /启闹 /停闹键),系统继续计时,显示 00: 00: 00,进入闹钟设置状态,等待键入启闹时间,按下 0-9数字键可以顺序进行相应的时间设置,并在相应的 LED上显示设置值, 6位设置完毕后系统启动定时启闹功能,并恢复时间显示。定时时间到,蜂鸣器鸣叫,直至重新按下 ALM键停闹,并取消闹钟设置。

9.3.3 硬件原理

数字钟电路由单片机、可编程 I/O接口芯片 8155、4×3键盘输入电路、 6位 LED显示输出电路及蜂鸣器启闹电路组成,如图9—5所示为系统电路原理图。

1.单片机:选用 89C51可满足要求。

2 . I/O 接口电路:

采用 8155作为键盘 /显示接口电路,其中 8155的A口作为 6位 LED显示的位选口(低电平有效), B

口作为段选口(高电平有效), C口的低 3位为键盘输入口,对应 0~2行, A口同时用做键盘的列扫描口。由系统电路原理图可知:

8155的地址分配如下:

● 控制寄存器: 8000H,定义为 PORT

● A口: 8001H,定义为 PORTA

● B口: 8002H,定义为 PORTB

● C口: 8003H,定义为 PORTC

3 . 4×3 键盘输入电路: 采用 4×3键盘,包括 0~9十个数字键(键号为 00H~0

9H )、 C/R 键(时间设定 / 启动计时键,键号为 0A

H)和 ALM键(闹钟设置 /启闹 /停闹键,键号为 0B

H)。

4 . LED数码显示电路: 采用共阴极数码管实现时钟显示, 6位 LED从左到右依次显示时、分和秒,采用 24小时计时。

5 .蜂鸣器启闹电路: 由 89C51的 P1.0控制驱动蜂鸣器(低电平有效)。

图 9—5 数字钟硬件电路图

9.3.4 程序设计1.系统资源分配

定时器 T0按照定时方式 1工作,片内 RAM及标志位的分配与定义见表 9—1。

地 址 功 能 名 称 初始值

30H-35H显示缓冲区,时、分、秒

(高位在前) DISP0-DISP5 00H

3CH-3FH计时缓冲区,时、分、秒、

100msHOUR,MIN, SEC,MSEC

00H

40H-42H闹钟值寄存区,时、分、

秒AHOUR, AMI

N, ASECFFH

50H-7FH 堆栈区

PSW.5计时显示允许位( 1:禁止, 0:允许) F0 0

PSW.1闹钟标志位( 1:正在闹响, 0:未闹响) F1 0

表9—1

片内R

AM

及标志位的

分配

2.主要程序设计( 1 )主程序

实现初始化与键盘监控,流程图如图 9—6所示。

( 2 )定时器 T0中断服务程序

实现计时功能,同时刷新计时缓冲区。流程图如图 9—7所示。

定时器 T0每隔 100 ms溢出中断一次(设系统使用 6 MHz晶振,定时器 T0工作在方式 1的定时器初值为 3CB0H,即 TH0=3CH, TL0=0B0H),每循环中断 10次则延时时间为 1s,重复 60次为 1分,分计时 60次为 1小时,小时计时 24次则时间重新回到 00: 00: 00。

开 始

定义堆栈区

8155、定时器T0数据缓冲区

闹钟标志位初始化

调用定时比较子程序

调用键扫描子程序

是C/R键吗?

是ALM键吗?

闹钟标志位=1吗?

停闹清零闹钟标志

地址指针指向计时缓冲区

调用时间设置/闹钟定时程序

地址指针指向闹钟值寄存区

N

N

N

Y

Y

Y

图 9—6 主程序流程图

保护现场

秒单元清零

循环次数减1

恢复现场

返 回

Y

N

时间校正

重装定时器T0初值

满10次否?

秒单元加1

60s到否?

分单元加1

分单元清零

60min到否?

小时单元加1

小时单元清零

24小时到否?

Y

Y

Y

N

N

N

图 9—7 计时流程图

保护现场

恢复现场

返 回

调用合字子程序

调用键盘设置子程序

( 3 )时间设置与闹钟设置子程序 实现当前时间及定时启闹时间的键盘输入设置。流程图如图 9—8 所示。

图 9—8 时间设置 / 闹钟定时流程图

其功能是用键盘设置子程序将键入的6位时间值送入键盘设置缓冲区,用合字子程序将键盘设置缓冲区中的 6位 B

CD码合并为 3位压缩 BCD码,送入计时缓冲区或闹钟值寄存区。若键盘输入的小时值大于 23 ,分和秒值大于 59 ,则不合法,将取消本次设置,清零重新开始计时。

( 4 )键盘扫描子程序

扫描键盘

有键按下吗?

调用显示子程序

有键按下吗?

求取键号

返 回

调用显示程序调用定时比较程序

调用显示程序调用定时比较程序

N

N

Y

Y

图 9—9 键盘扫描程序流程图

作用 :

判断是否有键按下,无键按下则循环等待,有键按下则求取键号后返回。流程图 如 图 9—9 所示。

保护现场

允许显示计时时间吗?

动态扫描显示

调用拆字程序

返 回

Y

N

图 9—10 显示程序流程图

( 5 )显示子程序

实现显示缓冲区的 6位 BCD码的动态扫描方式显示。

保护现场

闹钟值与计时值秒单元相等

闹钟值与计时值分单元相等

闹钟值与计时值小时单元相等

启闹标志置位

恢复现场

返 回

N

N

N

Y

Y

Y

( 6 )定时比较子程序 实现当前时间(计时缓冲区的值)与预设的启闹时间(闹钟设置寄存区的值)的比较,若二者完全相同时,启动蜂鸣器鸣叫并置位闹钟标志位 。当重新按下ALM键时,停闹并清零闹钟标志。流程图如右图所示。

( 7 )其它辅助功能子程序

●键盘设置子程序:将键入的 6位时间值送入键盘设置缓冲区,流程图见图9—12所示。

● 拆字子程序:将 3字节计时缓冲区中时、分和秒压缩 BCD码拆分为 6字节 BCD码并刷新显示缓冲区。

● 合字子程序:将键盘设置缓冲区中 6位 BCD码合并为 3位压缩 BCD码,送入计时缓冲区或闹钟值寄存区,同时检测时间值的合法性。

保护现场

显示缓冲区首地址送R0键盘输入次数送R7

调用键盘扫描程序

键号送@R0

显示缓冲区地址加1

循环次数减1

循环次数到否?

恢复现场

返 回

Y

N

图 9—12 键盘设置子程序流程图

3 .源程序清单主程序:ORG 0000HAJMP MAINORG 000BHAJMP CLOCKORG 0030HPORT EQU 8000HPORTA EQU 8001HPORTB EQU 8002HPORTC EQU 8003H DISP0 EQU 30HDISP1 EQU 31H

DISP2 EQU 32HDISP3 EQU 33HDISP4 EQU 34HDISP5 EQU 35HHOUR EQU 3CHMIN EQU 3DHSEC EQU 3EHMSEC EQU 3FHAHOUR EQU 40HAMIN EQU 41HASEC EQU 42HF1 BIT PSW.1

MAIN:MOV SP, #50H ;设置堆栈区 MOVX DPTR, #PORT ; 8155 初始化

MOV A, #03H MOVX @DPTR, A CLR F1 ;清零闹钟标志位 CLR F0 ;允许计时显示 MOV AHOUR, #0FFH ;闹钟值寄存区置初值 MOV AMIN, #0FFH MOV ASEC, #0FFH MOV R7 , #10H ;显示缓冲区、计时缓冲区清零 MOV R0, #DISP0 CLR A

LOOP: MOV @R0, A INC R0 DJNZ R7 , LOOP

MOV TMOD, #01H ;定时器 T0初始化 MOV TL0, #0B0H

MOV TH0 , #3CH

SETB TR0 ;启动定时器 SETB EA ;开中断 SETB ET0

BEGIN : ACALL ALARM ;调用定时比较 ACALL KEYSCAN ;调用键盘扫描 CJNE A , #0AH , NEXT1 ;是 C/R 键否? CLR TR0 ;暂时停止计时

MOV R1 , #HOUR ;地址指针指向计时 缓冲区首地址 AJMP MOD

NEXT1 : CJNE A, #0BH, BEGIN ;是 ALM键否? JBF1 , NEXT2 ;闹钟正在闹响否? MOV R1 , #AHOUR ;地址指针指向闹钟值寄存区 首地址MOD: SETB F0 ;禁止显示计时时间

ACALL MODIFY ;调用时间设置 /闹钟定时程序

SETB TR0 ;重新开始计时 CLR F0 ;恢复显示计时时间 AJMP BEGIN

NEXT2 : SETB P1.0 ;闹钟正在闹响,停闹 CLR F1 ;清零闹钟标志

AJMP BEGIN 定时器 T0中断服务子程序:CLOCK: PUSHPSW

PUSHACC ;保护现场MOV TL0, #0B7H

MOV TH0, #3CH ;重装初值,时间校正 INC MSEC

MOV A,MSECCJNE A, #0AH, DONEMOV MSEC, #00H

MOV A, SEC INC A DA A ;二—十进制转换 MOV SEC, A CJNE A, #60H, DONE MOV SEC, #00H MOV A,MIN INC A DA A MOV MIN, A CJNE A, #60H, DONE

MOV MIN , #00HMOV A , HOURINC ADA AMOV HOUR , ACJNE A , #24H , DONEMOV HOUR , #00H

DONE : POP ACCPOP PSW

RETI

时间设置 /闹钟定时子程序:MODIFY: ACALL KEYIN ;调用键盘设置子程序 ACALL COMB ;调用合字子程序 RET键盘设置子程序: KEYIN: PUSH PSW ;保护现场

PUSH ACC SETB RS1 MOV R0, #DISP0 ; R0指向显示 MOV R7 , #06H ;设置键盘输入次数 L1 : CLR RS1 ACALL KEYSCAN ;调用键盘扫描程序取按下键号 SETB RS1

CJNEA , #0AH , L2 ;键入数合法性检测(是否大于9 )L2 : JNC L1 ;大于 9 ,重新键入 MOV @R0 , A ;键号送显示缓冲区 INC R0

DJNZ R7 , L1 ; 6位时间输入完否?未完继续 CLR RS1 ;恢复现场 POP ACC POP PSW RET

键盘扫描子程序:KEYSCAN: ACALL TEST ;调判按键是否按下子程序 TEST JNZ REMOV ;有键按下调消抖延时 ACALL DISPLAY ACALL ALARM AJMP KEYSCAN ;无键按下继续判是否按键

REMOV: ACALL DISPLAY ;调用显示子程序延时消抖 ACALL TEST ;再判是否有键按下 JNZ LIST ;有键按下转逐列扫描 ACALL DISPLAY ACALL ALARM AJMP KEYSCAN ;无键按下继续判是否按键 LIST : MOV R2, #0FEH ;首列扫描字送 R2 MOV R3, #00H ;首列键号送 R3

LINE0: MOV DPTR, #PORTA ; DPTR指针指向 ; 8155 的 A口 MOV A, R2 ;首列扫描字送R2 MOVX @DPTR, A ;首列扫描字送 8155 的 A口 MOV DPTR, #PORTC ; DPTR指针指向 8155 的 C口 MOVX A,@DPTR ;读入C口的行状态 JB ACC.0, LINE1 ;第 0行键无键按下,转第 1 行 MOV A, #00H ;第 0行有键按下,行首键号送A AJMP TRYK ;求键号LINE1 : JB ACC.1, LINE2 ;第 1行键无键按下,转第 2行 MOV A , #04H ;第 1行有键按下,行首键号送 A AJMP TRYK ;求键号LINE2 : JB ACC.2, NEXT ;第 2行键无键按下,转下一列 MOV A, #08H ;第 2行有键按下,行首键号送 A

AJMP TRYK ;求键号NEXT: INC R3 ;扫描下一列 MOV A, R2 ;列扫描字送A JNB ACC.3 , EXIT ; 4列扫描完,重新进行下一轮扫描 RL A ; 4列未扫描完,扫描字左移扫描下一列 MOV R2 , A ;扫描字送A AJMP LINE0 ;转向扫描下一列 EXIT: AJMP KEYSCAN ;等待下一次按键TRYK: ADD A, R3 ;按公式计算键码,求得键号 PUSH ACC ;键号入栈保护LETK: ACALL TEST ;等待按键释放 JNZ LETK ;按键未释放,继续等待 POP ACC ;按键释放,键号出栈 RET

TEST: MOVDPTR, #PORTA ; DPTR指针指向 8155 的A口 MOV A, #00H MOVX @DPTR, A ;全扫描字 00H送 8155 的 A口 MOV DPTR, #PORTC ; DPTR指针指向 8155 的C口 MOVX A,@DPTR ;读入C口行状态 CPL A ; A 取反,以高电平表示有键按下 ANL A, #07H ;屏蔽高 5位 RET

显示子程序:DISPLAY: JB F0, DISP ;允许时间显示标志 F0=1 转 DISP

ACALL SEPA ;否则调用 SEPA刷新显示缓冲区 DISP: PUSH PSW ;动态扫描显示子程序 PUSH ACC SETB RS0 MOV DPTR, #PORTA ;关显示 MOV A, #0FFH MOVX @DPTR, A MOV R0, #DISP0 MOV R7, #00H MOV R6, #06H MOV R5, #0FEHDIS1 : MOV DPTR, #TAB

MOV A , @R0 MOVC A , @A+ DPTR MOV DPTR , # PORTB MOVX @DPTR , A MOV DPTR , # PORTA MOV A , R5 MOVX @DPTR , A HERE : DJNZ R7 , HERE INC R0

MOV A, R5 RL A MOV R5 , A DJNZ R6 , DIS1 CLR RS0 POP ACC POP PSW RETTAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H,71H;共阴极 字型码表

合字子程序:COMB: MOV R0, #DISP1 ; R0指向显示缓冲区小时低位

ACALL COMB1 ;合字 CJNE A, #24H, CHK

CHK: JNC EXIT1 ;大于 24 则取消本次设置,退出 MOV @R1 , A ;小时送计时小时单元 INC R1 MOV R0, #DISP3 ; R0指向显示缓冲区分低位 ACALL COMB1 CJNE A , #60H , CHKCHK1: JNC EXIT1 ;大于 60则取消本次设置,退出 MOV @R1, A INC R1

MOV R0, #DISP5 ; R0指向显示缓冲区秒低位 ACALL COMB1 CJNE A, #60H, CHK2CHK2 : JNC EXIT1 ;大于 60则取消本次设置,退出 MOV @R1 , A RETEXIT1 : AJMP MAIN ;输入不合法退出,重新清零计时COMB1 :MOV A,@R0

ANL A, #0FH ;取出低位 MOV 43H, A ;暂存于 43H单元 DEC R0 ;指向高位 MOV A,@R0

ANL A, #0FH

SWAP A ;高位送高 4位 ORL A, 43H ;高低位合并 RET

拆字子程序 SEPA:SEPA: PUSH PSW

PUSH ACCSETB RS0

MOV R0, #DISP5;指向显示缓冲区秒低位 MOV A, SEC ACALL SEPA1 MOV A,MIN ACALL SEPA1 MOV A, HOUR ACALL SEPA1

CLR RS0 POP ACC POP PSW RETSEPA1 : MOV 44H , A ;暂存 44H

ANL A , #0FH ;取出低位 MOV @R0 , A ;送显示缓冲区低位 DEC R0 ;指向显示缓冲区高位 MOV A , 44H

ANL A , #0F0H ;取出高位 SWAP A ;高位送往低 4位形成高位数据

MOV @R0 , A ;高位数据送显示缓冲区高位

RET

定时比较模块:ALARM: MOV A, ASEC

CJNE A, SEC, BACK ;秒单元相同则继续比较,否则返回 MOV A, AMIN

CJNE A,MIN, BACK ;分单元相同则继续比较,否则返回

MOV A, AHOUR CJNE A, HOUR, BACK ;小时单元相同定时时间到 CLR P1.0 ;启动闹钟鸣叫 SETB F1 ;置位闹钟标志 BACK: RET

本章小结 单片机应用系统设计的基本要求是可靠性要高、使用和维修要方便,并应该具有良好的性能价格比和必要的自我保护功能。单片机应用系统主要由硬件和软件两大部分组成。 单片机的研发过程主要分总体设计、详细设计、仿真调试、程序固化、文件编制五个阶段。

80C51单片机是 8位单片机的典型代表,在我国有着广阔的市场空间。除此之外,系统设计人员还要对当前流行单片机的主流机型有充分的了解,这样才能选择最为合适的机型。单片机的选型应从系统适应性及可开发性等方面综合考虑。 通过实例可知,模块化方式是单片机软硬件设计的较好方式 ,读者应力求掌握。

习题与思考

1.单片机应用系统的设计有哪些基本要求?

2.单片机应用系统有哪些部分组成?

3.单片机应用系统的设计有哪些步骤?

4.设计一个 8路模拟信号数值显示电路。

要求:可自动轮流显示 8路模拟信号的数值,最小分辨率为 0.02V,模拟量输入最大值为 5V,最大显示值为 255(输入为 5V时)。

top related