第 10 章 单片机应用系统的设计

45
第 10 第 第第第第第第 第第第 第第第第 第第第第第第第第第第第第第第第 第第第第第第第第第第第第第 第第第第第第第第第第第第 第第第 第第第第 第第第第第第第第第第第第第第 第第第第第第第第第第第第第第第 第第第第第第第第 第第

description

第 10 章 单片机应用系统的设计. ● 教学目标 介绍单片机应用程序软件设计步骤 介绍单片机硬件电路设计步骤 介绍单片机应用程序设计的一个实例 ● 学习要求 熟悉单片机硬件和软件设计步骤 掌握单片机硬件和软件的调试方法 了解单片机应用系统模式. 由于单片机的特殊结构,使之具有小巧、低功耗、成本低、控制功能强、易于产品化、抗干扰能力强以及便于实现多机和分布式通信控制等特点,其应用范围十分广泛,如智能家电、智能仪表、计算机外设、工业测控系统等。通过前面的学习,我们懂得了单片机的工作原理和应用基础,本章讲述如何设计及调试单片机应用系统。. - PowerPoint PPT Presentation

Transcript of 第 10 章 单片机应用系统的设计

Page 1: 第 10 章 单片机应用系统的设计

第 10 章 单片机应用系统的设计 ● 教学目标介绍单片机应用程序软件设计步骤介绍单片机硬件电路设计步骤 介绍单片机应用程序设计的一个实例 ● 学习要求熟悉单片机硬件和软件设计步骤 掌握单片机硬件和软件的调试方法 了解单片机应用系统模式

Page 2: 第 10 章 单片机应用系统的设计

由于单片机的特殊结构,使之具有小巧、低功耗、成本低、控制功能强、易于产品化、抗干扰能力强以及便于实现多机和分布式通信控制等特点,其应用范围十分广泛,如智能家电、智能仪表、计算机外设、工业测控系统等。通过前面的学习,我们懂得了单片机的工作原理和应用基础,本章讲述如何设计及调试单片机应用系统。

Page 3: 第 10 章 单片机应用系统的设计

10.1 系统设计的原则与步骤 10.1.1 单片机应用系统分类 按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统和典型应用系统等。 一、最小应用系统 最小应用系统是指能维持单片机运行的最简单配置的系统。这种系统成本低廉、结构简单,常构成一些简单的控制系统,如开关状态的输入 / 输出控制等。 对于片内有 ROM/EPROM/FLASH RAM 的单片机,构成最小应用系统时,只要将单片机接上时钟电路、复位电路和电源即可,如图 10-1(a) 所示;对于片内无 ROM/E

PROM/FLASH RAM 的单片机,其最小系统除了外部配置时钟电路、复位电路和电源外,还应在片外扩展 EPROM 、EEPROM 作为程序存储器用,如图 10-1(b) 所示。

Page 4: 第 10 章 单片机应用系统的设计

XTAL1 P0

P1

XTAL2 P2

P3

RST 8051 8751

EA

XTAL1

P2.7~2.0

XTAL2

8031

RST ALE P0.7~0.0

PSEN

EA

地址锁存 EPROM+5V

+5V

+5V

图 10-1 MCS-51 单片机最小应用系统 (a) (b)

Page 5: 第 10 章 单片机应用系统的设计

二 、最小功耗应用系统 最小功耗应用系统是指为了保证正常运行,系统的功率消耗最小。这是单片机应用系统中的一个引人入目的构成方式。在单片机芯片结构设计时,一般为构成最小功耗应用系统提供了必要条件,例如,各种系列的单片机都有 CMOS 工艺类型,而且在这类单片机中都设置了低功耗运行的 WAIT 和 STOP 方式。 设计最小功耗应用系统时,必须使系统内的所有器件、外设都有最小的功耗,而且能充分运用 WAIT 和 STOP 方式运行。 最小功耗应用系统常用在一些袖珍式智能仪表、野外工作仪表以及在无源网络、接口中的单片机工作子站。

Page 6: 第 10 章 单片机应用系统的设计

三、典型应用系统 典型应用系统是指单片机要完成工业测、控功能所必须具备的硬件结构系统。 由于单片机主要用于工业测、控,因此,其典型应用系统应具备用于测、控目的的前向传感器通道、后向伺服控制通道以及基本的人机对话手段。它包括了系统扩展与系统配置两部分内容。 系统扩展是指在单片机中的 ROM 、 RAM 及 I/O口等片内部件不能满足系统要求时,在片外扩展相应的部分。扩展多少视需要选择。 系统配置是指单片机为满足应用要求时,应配置的基本外部设备,如键盘、显示器等。 单片机的典型应用系统如图 10-2 所示。整个系统包括基本部分和测、控增强部分以及外设增强部分。

Page 7: 第 10 章 单片机应用系统的设计

I/O

I/O

扩展

光电隔离

A/D

光电隔离

光电隔离

D/A

单片机

EPROM

RAM

显示器

键盘

I/O 通用外设

数字量检测 模 拟 量 检 测 开关量检测  开关量控制  伺服驱动控制

图 10-2 单片机典型应用系统

Page 8: 第 10 章 单片机应用系统的设计

现在我们知道单片机的应用范围和应用方式,但如何才能研制出一个较完整的单片机产品是我们下一步所关心的问题。简单地说,必须经过以下几步工作: ⑴系统硬件电路设计、组装、调试; ⑵系统应用软件的编制、调试; ⑶系统应用软件的链接调试、固化、脱机 (脱离开发装置 ) 运行。 下面介绍单片机应用系统软、硬件开发的有关问题。

Page 9: 第 10 章 单片机应用系统的设计

10.1.2 系统设计的原则 单片机应用系统包括其硬件系统和软件系统两大部分,设计时应遵循相应准则。 一、硬件系统设计原则 系统的扩展和配置设计应遵循下列原则: ⑴尽可能选用典型电路,并符合单片机的常规用法。为硬件系统的标准化、模块化打下良好的基础。 ⑵系统的扩展与外围设备配置的水平应充分满足应用系统的功能要求,并留有适当的余地,以便进行二次开发。 ⑶硬件结构应结合应用软件方案一并考察。硬件结构与软件方案会产生相互影响,考虑的原则是:软件能实现的功能尽可能由软件实现,以简化硬件结构。 ⑷整个系统中的相关器件要尽可能做到性能匹配,如选用 CMOS 芯片单片机构成低功耗系统时,系统中的所有芯片都应该选择低功耗的产品。 ⑸可靠性及抗干扰设计是硬件系统设计不可缺少的一部分,它包括芯片、器件的选择、去耦滤波、印刷电路板布线、通道隔离等。

Page 10: 第 10 章 单片机应用系统的设计

二、应用软件设计原则 单片机应用系统中的应用软件是根据系统功能要求设计的,应可靠地实现系统的各种功能。应用系统种类繁多,应用软件各不相同,但一个优秀的应用系统的软件应具有下列特点: ⑴软件结构清晰、简洁、流程合理。 ⑵各种功能程序实现模块化、子程序化。这样,既便于调试、链接,又便于移植、修改。 ⑶程序存储区、数据存储区规划合理,既能节约内存容量,又使操作方便。 ⑷运行状态实现标志化管理。各个功能程序运行状态、运行结果以及运行要求都设置状态标志以便查询,程序的转移、运行、控制都可状态标志条件来控制。 ⑸经过调试修改后的程序应进行规范化,除去修改“痕迹”。规范化的程序便于交流、借鉴,也为今后的软件模块化、标准化打下基础。 ⑹实现全面软件抗干扰设计。软件抗干扰是计算机应用系统提高可靠性的有力措施。 ⑺为了提高运行的可靠性,在应用软件中设置自诊断程序,在系统工作运行前先运行自诊断程序,用以检查系统各特征状态参数是否正常。

Page 11: 第 10 章 单片机应用系统的设计

10.1.3 系统设计的步骤 对于一般的应用系统而言,大都要经历如下几个步骤: ⑴提出问题、了解现场、明确指标。 ⑵进行可行性论证,提出初步方案。 ⑶提出各分课题的设计方案。 ⑷设计、调试、修改并完成各分课题的任务。 ⑸将各分课题组成整体应用系统,并对系统进行总体调试、修改、完善。

Page 12: 第 10 章 单片机应用系统的设计

10.2 系统设计举例 前面讲述了设计一个单片机应用系统的基本方法和步骤,下面以设计一个波形发生器为例来进一步说明。 10.2.1 问题的提出 在教学、科研和生产的许多实验场合,需要有临时的信号源如正弦波、方波、三角波和锯齿波等。市场上现成的信号发生器相对较贵 (尤其是对于规模较小的单位或经费较少的项目 ) ,而且不一定很合适。在这种情况下,往往是实验人员自行设计,比如设计一个能产生一路正弦波、方波、三角波或锯齿波的波形发生器,要求输出波形幅度为 0~10V ,并可调整;输出波形频率在 0~20kHz 范围内可调整。

Page 13: 第 10 章 单片机应用系统的设计

10.2.2 总体方案设计 根据题意,可采用单片机程序产生以上四种波形,并通过一片 D/A转换器输出。另外,采用一片 D/A转换器来控制前一片 D

/A转换器的参考电压,从而可以改变输出波形幅值。见图 10-3所示。通过外接键盘来设定波形的类型、幅值和频率,并在扩展的七段 LED 显示器上显示响应的波形的类型、幅值和频率。

单片机 P0

D/A转换器

D/A转换器 运算放大器

运算放大器键盘

显示器

输出参考电压

图 10-3 波形发生器原理框图

Page 14: 第 10 章 单片机应用系统的设计

以产生正弦波为例,采用定点法来生成波形,即将一个周期的正弦波按 360o 等分为若干点,计算出各点的正弦函数值,并转化相应的 D/A转换器输入数值,这样得到一个正弦函数表。通过程序将该表存于单片机的程序存储器中,利用单片机的定时器来产生定时,每当定时时间到时,查表得到该点对应的输出值,然后通过 D/A转换得到该点的对应电压值。如此,周而复始地查表输出,就得到所要的正弦波。由于一个周期正弦波的点数固定,改变定时器的定时值,就改变相邻两点的间隔时间,从而改变正弦波的频率。 三角波和锯齿波的产生方法与正弦波类似。方波的产生较简单,只要交替地将最大值和最小值输出给

D/A进行转换即可,它们的延续时间为周期的一半。

Page 15: 第 10 章 单片机应用系统的设计

10.2.3 具体电路设计 按照总体方案设计的硬件电路如图 10-4 所示,它主要包括单片机最小系统、两片 D/A转换器组成的波形输出部分、键盘扩展部分和七段 LED 显示器部分等。

1 2 3 4 5 6 7 8

A

B

C

D

87654321

D

C

B

A

Title

Number RevisionSize

A3

Date: 19-Feb-2002 Sheet of File: D:\½Ì²Ä±àд\²¨ÐÎͼ.DDB Drawn By:

EA/VP31

X119

X218

RESET9

RD17

WR16

INT012 INT113

T014 T115

P101

P112

P123

P134

P145

P156

P167

P178

P00 39

P01 38

P02 37

P03 36

P04 35

P05 34

P06 33

P07 32

P20 21

P21 22

P22 23

P23 24

P24 25

P25 26

P26 27

P27 28

PSEN 29ALE/P 30TXD 11RXD 10

IC1AT89C51

D03 Q0 2

D14 Q1 5

D27 Q2 6

D38 Q3 9

D413 Q4 12

D514 Q5 15

D617 Q6 16

D718 Q7 19

OE1

LE11IC274HC373

Vcc

20

Iout1 11lsbDI07

Iout2 12DI16

DI25

Rfb 9DI34

DI416

Vref 8DI515

DI614

msbDI713

ILE 19

WR2 18CS1

WR1 2Xfer17IC4DAC0832

Vcc

20

Iout1 11lsbDI07

Iout2 12DI16

DI25

Rfb 9DI34

DI416

Vref 8DI515

DI614

msbDI713

ILE 19

WR2 18CS1

WR1 2Xfer17

IC3DAC0832

RDWR

+5

D0D1D2D3D4D5D6D7

D0D1D2D3D4D5D6D7

A0A1A2A3A4A5A6A7

D0D1D2D3D4D5D6D7

D0D1D2D3D4D5D6D7

+5

¡£

1234

8765

IC5

1234

8765

IC7

+-

-V

+VOUT

LM356

+-

-V

+VOUT

LM356

1 2 3 Freqency

4 5 6

Enter

7 8 9

Clear

Wave

Amplitude

0

P10P11P12P13P14P15P16P17

¸´Î»¼üRST

R1

10K

+5

C133pF

C233pF

12 RXDTXD

1234

8765

IC8LM356

OUT+V

-V

-+

+5

+5

WR

WR

A1

B2

Q0

3

Q1

4

Q2

5

Q3

6

Q4

10

Q5

11

Q6

12

Q7

13

CL

K8

MR

9

IC1574HC164

A1

B2

Q0

3

Q1

4

Q2

5

Q3

6

Q4

10

Q5

11

Q6

12

Q7

13

CL

K8

MR

9

IC974HC164

A1

B2

Q0

3

Q1

4

Q2

5

Q3

6

Q4

10

Q5

11

Q6

12

Q7

13

CL

K8

MR

9

IC1074HC164

A1

B2

Q0

3

Q1

4

Q2

5

Q3

6

Q4

10

Q5

11

Q6

12

Q7

13

CL

K8

MR

9

IC1174HC164

A1

B2

Q0

3

Q1

4

Q2

5

Q3

6

Q4

10

Q5

11

Q6

12

Q7

13

CL

K8

MR

9

IC1274HC164

A1

B2

Q0

3

Q1

4

Q2

5

Q3

6

Q4

10

Q5

11

Q6

12

Q7

13

CL

K8

MR

9

IC1374HC164

A1

B2

Q0

3

Q1

4

Q2

5

Q3

6

Q4

10

Q5

11

Q6

12

Q7

13

CL

K8

MR

9

IC1474HC164

g10

f9

Vss

8

a7

b6

dp5

c4

Vss

3d

2e

1

L17LED g

10

f9

Vss

8

a7

b6

dp5

c4

Vss

3d

2e

1

L27LED

g10

f9

Vss

8

a7

b6

dp5

c4

Vss

3d

2e

1

L37LED

g10

f9

Vss

8

a7

b6

dp5

c4

Vss

3d

2e

1

L47LED

g10

f9

Vss

8

a7

b6

dp5

c4

Vss

3d

2e

1

L57LED

g10

f9

Vss

8

a7

b6

dp5

c4

Vss

3d

2e

1

L67LED

g10

f9

Vss

8

a7

b6

dp5

c4

Vss

3d

2e

1

L77LED

VCC

RXD

TXD

-12

+12

R4

5k

R6

10K R5

10k

+5

-12

+12

+5

OUT

+12

-12

R7

200

R8

200

R9

200

R10

200

R11

200

R12

200

R13

200

Vin2

GN

D1

-12V 3

V5

7912

Vin1

GN

D2

+12V 3

V67812

C72200uF

C62200uF

AC1

AC2

+ 3

- 4Z1

+12

-12

C810

0uF

C9

100u

F

R16

10KR17

10KR18

10KR19

10K +5

P17

P16 P15 P14

P13 P13 P13 P13

P12 P12

P11 P11 P11

P10 P10 P10

P12

P11

P10

+5

R3

10KR2

10K

-12

P12

Vin1

GN

D3

+5V 2

V8

7805

C4

2200uF

C5100uF

+5

AC1

AC2

+ 3

- 4Z2

2A

9V~

INT0

R15

330

+5

INT1

T1T0

Vref

A1

B2

Q0

3

Q1

4

Q2

5

Q3

6

Q4

10

Q5

11

Q6

12

Q7

13

CL

K8

MR

9

IC1674HC164

g10

f9

Vss

8

a7

b6

dp5

c4

Vss

3d

2e

1

L87LED

VCC

R14

200

A0

A1

1234

8765

IC6

+-

-V

+VOUT

LM356 +12

C310uF

15V~

15V~

图 10-4 波形发生器的硬件电路图

Page 16: 第 10 章 单片机应用系统的设计

一、单元电路设计 1. 单片机最小系统 考虑到电路的简单和成本等因素,选用 ATMEL公司的 AT

89C51 单片机作为微处理器,它内含 4KB快闪程序存储器,其编程和擦除完全用电实现;其时钟频率为 0~24KHz ;并且价格低廉,批量价在 10元以内。用 AT89C51 、 74HC373加上相应的时钟和复位电路就组成了最小系统,见图 10-8 中相应部分。 2. 波形输出电路 波形输出电路主要由两片 8 位 D/A转换器 DAC0832 和相应运算放大器组成,见图 10-4 中相应部分: 其中一片 DAC0832(IC4) 和两个单运算放大器 (IC7 和 IC8)组成波形的输出部分,它采用双极性输出方式,这样给 DA08

32 输入不同的数码,不难分析其输出电压范围为 -Vref~+Vref ,见表 10-1 所示, Vref 为该片 D/A转换器的参考电压。

Page 17: 第 10 章 单片机应用系统的设计

表 10-1 输入数字量与输出电压的关系

另一片 DAC0832(IC3) 的参考电压接到 +5V 电源上,它和两个单运算放大器 (IC5 和 IC6)组成的单极性 D/A转换电路,其输出电压加到前一片 DAC0832 的参考电压端 Vref 。当此片 DAC0832 输入 0~255 数字时,输出为 0~+5V ,从而调节前一片 DAC0832 的输出电压为 -5V~+5V ,达到改变输出波形幅值的目的。这两片 DAC0832 都接成单缓冲器输入方式。

输入码 模拟输出电压MSB LSB

1 1 1 1 1 1 1 1 +(127/128)Vref

1 0 0 0 0 0 0 1 +(1/128)Vref

1 0 0 0 0 0 0 0 0

0 1 1 1 1 1 1 1 -(1/128)Vref

0 0 0 0 0 0 0 1 -(127/128)Vref

0 0 0 0 0 0 0 0 -(128/128)Vref

Page 18: 第 10 章 单片机应用系统的设计

3. 键盘扩展电路 输出波形种类、幅值、频率的设定由键盘输入。由于单片机的 P1 口不作它用,可用它扩展一个 4 行×4 列键盘。键盘的 4根行线接到单片机的 P1.0~P1.3 口线, 4根列线接P1.4~P1.7 口线。 16 个按键分别定义为数字 0~9 和功能键 Enter(确认键 ) 、 Clear(清除键 ) 、 Wave(波形选择键 ) 、 Freqency(改变频率键 ) 、 Amplitude(改变幅值键 ) 和 .( 小数点键 ) 。

4. 显示电路 当前输出波形的种类、幅值和频率需要显示出来。由于单片机的串行口不作它用,可用它接 8 片串入并出移位寄存器来扩展 8 位 7 段 LED 显示器, L1~L4 用于显示输出波形的频率; L5~L7 用于显示输出波形的幅值, L5 的小数点接 +5V ,常亮,则可显示 0.0V到 10.0V ; L8 用于显示波形的种类, 1 表示正弦波, 2 表示方波, 3 表示三角波, 4 表示锯齿波。

Page 19: 第 10 章 单片机应用系统的设计

二、单元电路调试 对于本波形法发生器,其硬件电路的调试可以按如下步骤进行: ㈠硬件电路的总体检查 在一块电路试验板上,焊接好电路,按实际电路图插好元器件,连好线。在接上电源之前,用万用表粗略检查电路的正确性,尤其是要检查电源和地之间的电阻。对于本波形发生器来讲,电源和地之间的电阻应为 1KΩ以上,若太小,应检查电源和地之间是否有短路现象或电源接错现象或有不良元器件。确保电源和地无故障之后,再通电,然后检查各电源 +5V、 +12V和 -12V电压数值的正确性。排除可能出现的故障后,再进行各单元电路调试。 ㈡单元电路调试 ⒈单片机最小系统调试 按照前面设计的单片机最小系统和电源,焊接并插上相应的元器件,连好线,检查正确无误后,接上电源,用示波器测试单片机的时钟波形。若时钟波形和频率正确,则进行下一步检查。 切断电源,空出单片机 AT89C51 的位置,并在此位置上插入仿真器的 40芯仿真头。连好相应线,检查正确无误后,接上电源,然后启动仿真器,检查地址锁存等电路的正确性。

Page 20: 第 10 章 单片机应用系统的设计

⒉ 波形输出电路调试 按图 10-8 电路接线方法,我们可以知道 D/A转换器 IC3 和 I

C4 的地址分别为 0FDH 和 0FEH ,向这两个地址分别写入相应的数据后,若电路正确就启动了它们的 D/A转换,若这时运放 IC6和 IC8 输出的电压值和表 10-1 相符,则说明波形输出电路正确。 ⒊ 键盘扩展电路调试 断开电源,焊接好键盘,并将键盘接到 P1 口,然后接通电源,用仿真器使

AT89C51 的 P1 口输出为 0F0H ,即将键盘的 4根行线 P1.0~P1.3 置为低电平,4根列线接 P1.4~P1.7 口线置为高电平。接下来,依次按下各键,并用万用表测量对应 P1 口的 P1.4~P1.7 口线,若所测的相应口线为低电平,则表示该键有效。例如,按下键 0 ,则应测的口线 P1.4 为低电平,说明键 0 有效。测试所有 16 个键都有效,则说明该键盘扩展电路正确。 ⒋ 显示电路调试

断开电源,焊接好相应电路,并插上器件 IC9~IC16 和 L1~L8 ,然后再接上电源。用仿真器编写一段测试程序(参见后面显示模块软件)让 8 个 7 段 LED(L1~L8) 分别显示数字 1 、 2 、 3 、 4 、5 、 6 、 7 、 8 。再在仿真器上汇编该程序,并执行,若显示的结果一致,则说明显示电路是正确的。

Page 21: 第 10 章 单片机应用系统的设计

10.2.4 应用软件设计 一、各软件模块设计 按照波形发生器的功能,其应用程序必须有初始化、波形产生、键盘管理和显示等几部分,现将各主要软件模块介绍如下: ㈠初始化模块 初始化程序模块主要进行设置定时器、串行口的工作方式,设置波形的类型幅值和频率,并在显示器上显示提示字符 12345678 等工作。这部分程序如下: MOV TMOD , #02H ; 设置定时器 0 为方式 2 工作 MOV TL0,#7FH ; 置初值 MOV TH0,#7FH CLR TR0 ; 不启动 MOV SCON, #00H ; 将串行口初始化为方式 0 MOV DPTR,#0FFFDH ;IC3 的地址送DPTR MOV A,#0FFH MOVX @DPTR,A ; 输出波形的幅值初始化为 10V MOV DPTR,#0FFFEH ;IC4 的地址送DPTR MOV A,#80H MOVX @DPTR,A ; 输出设定为 0 MOV WAVKD,#01H ;波形类型初始化为 1, 即正弦波。

Page 22: 第 10 章 单片机应用系统的设计

㈡波形产生模块 前面讲过,采用定点法产生波形,将所要输出的波形按一个周期分成若干点,正弦波和三角波各 72 点、按所需频率计算出两点间的时间间隔,用定时器 0 工作于方式0来定时该时间间隔。每当定时时间到时,查表输出下一个波形数据,如此循环执行即可。锯齿波的产生,只要从00H 开始,每隔一定时间加 1 ,在 00H到 0FFH 之间循环输出 D/A转换器 IC4 即可。方波只要每隔每半个周期交替输出 00H 和 0FFH 即可。 ⒈ 正弦波产生程序 由于正弦波的对称性,可将其分为四个相同部分,在这里称为四个象限。只要做第一个象限的数据表即可,第二象限的数据表与第一象限相同,但输出时要反向查表;第三、四象限输出只要将第一象限和第二象限查表得的数据取反即可。产生正弦波的程序流程图见图 10-5 所示。

Page 23: 第 10 章 单片机应用系统的设计

   

 

N N 

Y Y  

N N 

Y Y   

N N 

Y Y  

N N 

Y Y 

开始

查表输出

指向下一个点

时间到吗 ?

第一象限输出完?

反向查表输出

指向下一个点

时间到吗 ?

第二象限输出完?

查表取反输出

指向下一个点

时间到吗 ?

第三象限输出完?

反向查表取反输出

指向下一个点

时间到吗 ?

第四象限输出完?

 

图 10-5 正弦波产生程序流程图

Page 24: 第 10 章 单片机应用系统的设计

程序清单如下: SETB TR0

SINWAV:MOV R0,#00H ;查表指针初始化为 0SINLP1: MOV DPTR,#SINTAB ; 正弦波函数表地址送 DPTR MOV A,R0 MOVC A,@A+DPTR ;查表 MOV DPTR,#0FFFEH ;IC4 地址送 DPTR MOVX @DPTR,A; 输出数据给 D/A SINLP2: JNB TF0,SINLP2 ; 由定时器控制频率 CLR TF0 INC R0 CJNE R0,#13H,SINLP1 ;第一象限输出完了吗?SINLP3: MOV DPTR,#SINTAB ; 正弦波函数表地址送 DPTR MOV A,R0 MOVC A,@A+DPTR ;查表 MOV DPTR,#0FFFEH ;IC4 地址送 DPTR MOVX @DPTR,A

Page 25: 第 10 章 单片机应用系统的设计

SINLP4: JNB TF0 ,SINLP4 ; 由定时器控制频率 CLR TF0 DEC R0 CJNE R0,#00H,SINLP3 ;第二象限输出完了吗? SINLP5: MOV DPTR,#SINTAB ; 正弦波函数表地址送 DPTR MOV A,R0 MOVC A,@A+DPTR ;查表 CPL A ;取反 MOV DPTR,#0FFFEH ;IC4 地址送 DPTR MOVX @DPTR,A ; 输出数据给 D/ASINLP6: JNB TF0,SINLP6 ; 由定时器控制频率 CLR TF0 INC R0 CJNE R0,#13H,SINLP6 ;第三象限输出完了吗?SINLP7: MOV DPTR,#SINTAB ; 正弦波函数表地址送 DPTR MOV A,R0

Page 26: 第 10 章 单片机应用系统的设计

MOVC A,@A+DPTR ;查表 CPL A ;取反 MOV DPTR,#0FFFEH ;IC4 地址送 DPTR MOVX @DPTR,ASINLP8: JNB TF0 ,SINLP8 ; 由定时器控制频率 CLR TF0 DEC R0 CJNE R0,#00H,SINLP7 ;第四象限输出完了吗?

SJMP SINWAV ; 输出下一个周期SINTAB:

DB 7FH,89H,94H,9FH,0AAH,0B4H,0BEH,0C8H,0D1H,0D9H

DB 0E0H,0E7H,0EDH,0F2H,0F7H,0FAH,0FCH,0FEH,0FFH

Page 27: 第 10 章 单片机应用系统的设计

N

Y

N

Y

N

Y

N

Y Y

N

N

Y

N

Y

N

⒉ 三角波产生程序三角波的产生程序和正弦波类似,其程序流程图见图 10-

6 所示。

 

图 10-6 三角波产生程序流程图

开始

查表输出

指向下一个点

时间到吗 ?

第一象限输出完?

反向查表输出

指向下一个点

时间到吗 ?

第二象限输出完?

查表取反输出

指向下一个点

时间到吗 ?

第三象限输出完?

反向查表取反输出

指向下一个点

时间到吗 ?

第四象限输出完?

Y

Page 28: 第 10 章 单片机应用系统的设计

程序清单如下:SETB TR0

TRIWAV:MOV R0,#00H ;查表指针初始化为 0TRILP1: MOV DPTR,#TRITAB ; 正弦波函数表地址送 DPTR MOV A,R0 MOVC A,@A+DPTR;查表 MOV DPTR,#0FFFEH ;IC4 地址送 DPTR MOVX @DPTR,A ; 输出数据给 D/A TRILP2: JNB TF0,TRILP2 ; 由定时器控制频率 CLR TF0 INC R0 CJNE R0,#13H,TRILP1 ;第一象限输出完了吗?TRILP3: MOV DPTR,#TRITAB ; 正弦波函数表地址送 DPTR MOV A,R0 MOVC A,@A+DPTR;查表 MOV DPTR,#0FFFEH ;IC4 地址送 DPTR MOVX @DPTR,ATRILP4: JNB TF0 ,TRILP4 ; 由定时器控制频率 CLR TF0 DEC R0 CJNE R0,#00H,TRILP3 ;第二象限输出完了吗?

Page 29: 第 10 章 单片机应用系统的设计

TRILP5: MOV DPTR,#TRITAB ; 正弦波函数表地址送 DPTR MOV A,R0 MOVC A,@A+DPTR;查表 CPL A ;取反 MOV DPTR,#0FFFEH ;IC4 地址送DPTR MOVX @DPTR,A ; 输出数据给D/ATRILP6: JNB TF0,TRILP6 ; 由定时器控制频率 CLR TF0 INC R0 CJNE R0,#13H,TRILP6 ;第三象限输出完了吗?TRILP7: MOV DPTR,#TRITAB ; 正弦波函数表地址送DPTR MOV A,R0 MOVC A,@A+DPTR;查表 CPL A ;取反 MOV DPTR,#0FFFEH ;IC4 地址送DPTR MOVX @DPTR,ATRILP8: JNB TF0 ,TRILP8 ; 由定时器控制频率 CLR TF0 DEC R0 CJNE R0,#00H,TRILP7 ;第四象限输出完了吗?

SJMP TRIWAV ; 输出下一个周期TRITAB: DB 7FH,86H,8DH,94H,9BH,0A2H,0A9H,0B0H,0B7H,0BEH DB 0C5H,0CCH,0D3H,0DAH,0E1H,0E8H,0EFH,0F6H,0FDH

Page 30: 第 10 章 单片机应用系统的设计

⒊ 锯齿波产生程序锯齿波的产生原理前面已讲过,其程序流程图见图 10-7 所示。

图 10-7 锯齿波产生程序流程图 图 10-8 方波产生程序流程图

开始

R0=00H

R0加 1

时间到吗 ?

R0送 D/A

开始

0FFH送 D/A

00H送 D/A

时间到吗 ?

时间到吗 ?Y

Y

Y

N

N

Page 31: 第 10 章 单片机应用系统的设计

程序清单如下: SETB TR0SOWWAV:MOV DPTR,#0FFFEH ;IC4 地址送 DPTR MOV R0,#00H ;波形输出初值为 0SOWLP1: MOV A,R0 MOVX @DPTR,A ; 输出数据给 D/ASOWLP2: JNB TF0,SOWLP2 ; 由定时器控制频率 CLR TF0 INC R0 ;R0加 1 SJMP SOWLP1 ⒋ 方波产生程序按照前面方法,方波产生程序流程图见图 10-8 所示。其程序清单如下: SETB TR0BOXWAV:MOV DPTR,#0FFFEH; IC4 地址送 DPTRBOXLP1: MOV A,#0FFH;高脉冲 MOVX @DPTR,A ; 输出数据给 D/ABOXLP2: JNB TF0,BOXLP2 ; 由定时器控制频率 CLR TF0 MOV A,#00H ; 低脉冲

MOVX @DPTR,A ; 输出数据给 D/ABOXLP3: JNB TF0,BOXLP3 ; 由定时器控制频率 CLR TF0 SJMP BOXLP1

Page 32: 第 10 章 单片机应用系统的设计

㈢键盘管理模块 按前面硬件电路设计,可采用“行扫描”方法对键盘进行管理,首先对键盘进行“全盘扫描”,判断是否有键按下。若有键按下则对键盘进行“逐行扫描”,进行键译码,并将该键的键码读出来,然后按各命令键转到相应的程序进行处理。本波形发生器系统软件将键盘管理分成三部分: ⒈键盘全盘扫描部分 键盘的全盘扫描部分主要是判断是否有键按下,其工作原理参见第 8 章的 8.1节。该子程序清单如下:

Page 33: 第 10 章 单片机应用系统的设计

SCANKEY: MOV A,#0F0HMOV P1,A ;P1 口行线置为全 0 ,列线置为全 1MOV A,P1 ;读 P1 口ANL A,#0F0H ; 列信号在高 4 位XRL A,#0F0H ;判断有键合上否?JZ SCANKEY ; 无键合上再扫描检查LCALL DELAY ; 有键合上,调延时子程序去抖动MOV A,#0F0HMOV P1,A ;P1 口行线置为全 0 ,列线置为全 1MOV A,P1 ;读 P1 口ANL A,#0F0H ; 列信号在高 4 位XRL A,#0F0H ;判断有键合上否?JZ SCANKEY ; 无键合上再扫描检查RET

Page 34: 第 10 章 单片机应用系统的设计

⒉ 键盘逐行扫描部分 判断有键按下后,下一步是将判断具体是哪一个键按下,并将其键码读出。不难得到其他按键的特征码:

按照上述原理,本逐行扫描程序先逐行扫描获取合上键的行信号和列信号,并组合成特征码,然后按此特征码查表识别该合上键的含义。程序如下:

按键 0 1 2 3 4 5 6 7特征码 81H 82H 42H 22H 84H 44H 24H 88H按键 8 9 波形 幅值 频率 确认 清除 .特征码 48H 28H 18H 14H 12H 11H 21H 41H

Page 35: 第 10 章 单片机应用系统的设计

RDKEY:MOV LINECOD,#0FEH ;第一行线置位为低电平 , 为扫描作准备

KEYB1: MOVX A,LINCOD ;逐行扫描 MOV P1,A MOV A,P1 ;读列信号 ANL A,#0F0H ; 列信号再高 4 位 MOV ROWCOD,A ; 列信号暂存 ROWCOD CJNE A,#0F0H, KEYB2 ;该行有键合上,转键译码 MOV A,LINECOD RL A ; 为扫描下一行做准备 MOV LINECOD,A XRL A,#0EFH ; 检查是否各行都扫描了一次 JNZ KEYB1 ;未扫描完一次继续 SJMP KEYRT ;退出

Page 36: 第 10 章 单片机应用系统的设计

KEYB2:MOV A,LINECOD ANL A,#0FH ; 行信号在低 4 位 ORL A,ROWCOD ; 行、列信号拼装 CPL A ;取反获得特征码 MOV KEYCH,A ; 特征码暂存 KEYCH MOV KEYBCD,#00H ;查表得键值的初值 MOV DPTR,#KEYTBL ; 置查表起始地址KEYB3:CLR A MOVC A,@A+DPTR ;查表 , 得特征码 CJNE A,KEYCH,NEQ ;查表得的特征码和按键特征码不等? AJMP EQQ ; 相等 , 表示查到 ,转 EQQNEQ: INC KEYBCD ; 不等 , 表示未查到 , 为再查作准备 INC DPTR AJMP KEYB3EQQ: LCALL DEYAY ;延时 , 等待键释放 MOV A,#0F0H ;判断键是否释放 MOV P1,A MOV A,P1 ANL A,#0F0H XRL A,#0F0H JNZ EQQ ; 如果没有释放按键则等待释放KEYRT:RET ;已经释放 ,返回键值在 KEYBCD 中KEYTBL: DB 81H , 82H , 42H , 22H , 84H , 44H , 24H , 88H DB 48H , 28H , 18H , 14H , 12H , 11H , 21H , 41H

Page 37: 第 10 章 单片机应用系统的设计

⒊ 按键处理部分 由上面键盘逐行扫描得到按键的键值后,要进行相应的处理:由于本键盘只有 16 个键,所以键值最大为 0FH ,故首先要判断所得键值是否合法,若所得键值大于 0FH ,则为非法,应重新读键;由于本键盘是用于选择波形、输入幅值和频率的, 0~9 数字键是按了功能键 WAVE 、 AMPLITUDE 和 FREQUENCY 后才能输入,所以在判断按键合法后,若为数字键则丢弃重读,若为功能键则转入相应的程序进行处理。这部分程序流程见图 10-9 所示。

幅值改变处理 频率改变处理散转

波形选择处理

开始键值 >0FH?

退出键值 <0AH?

Y

N Y

N

图 10-9 按键处理程序流程图

Page 38: 第 10 章 单片机应用系统的设计

这部分程序清单如下:KEYPC: MOV A,KEYBCD ; 键值送A CLR C SUBB A,#10H JNC KEYBG1 ; 键值大于 0FH,转重新读键 SJMP KEYSL1KEYBG1:LJMP RRDKEYKEYSL1:MOV A,KEYBCD CLR C SUBB A,#0AH JNC KEYBG2 ; 键值大于 09H, 为功能键 LJMP RRDKEY ; 键值小于 0AH,转重新读键KEYBG2:RL A MOV DPTR,#FCTJMP;散转 JMP @A+DPTR ;转各功能键分支FCTJMP:AJMP WAVSL ;A:代表波形选择处理 AJMP AMPSL ;B:代表幅值设定处理 AJMP FRQSL ;C:代表频率设定处理 AJMP ENTNB ;D:代表数据确定处理 AJMP CLRNB ;E:代表数据清除处理 AJMP DOTNB ;F:代表小数点输入处理

Page 39: 第 10 章 单片机应用系统的设计

㈣显示模块 显示程序模块主要用于初始化显示、键入数据的显示,其中初始化显示程序在显示电路的调试部分已给出,这里不再重复。下面就键入数据的显示程序作一说明: 本显示器由 8 个 7 段 LED组成。其中, L1~L4四位用于显示频率; L5~L7三位用于显示幅值, L6 的小数点常亮,显示范围是 00.0V~99.9V ,满足本波形发生器的幅值要求; L8 用于显示波形类型, 1 为正弦波, 2 为方波, 3 为三角波, 4 为锯齿波。 输入数据通过查表转换为对应显示码,然后存于单片机内存

30H~37H 中。由于采用单片机的串口外接串入并出移位寄存器驱动显示,越早写入串口的数据移到离单片机越远的显示器。这样显示码的存储顺序应和显示器的次序刚好相反,即 L8 的显示码存于 30H 中, L7~L5 的显示码存于 31H~33H 中, L4~L1 的显示码存于 34H~37H 中。显示时,将 30H~37H 中的显示码依次取出,写入单片机的串口中即可。程序清单如下:

Page 40: 第 10 章 单片机应用系统的设计

DISP8: MOV R0,#30H ; 显示指针初始化为指向第 1 个数 MOV SCON, #00H ; 将串行口初始化为方式 0DISP80: MOV A,@R0 ; 显示码送 A MOV SBUF,A ; 由串行口发送到 7 段 LED 上显示DISP81: JNB TI,DISP81 ; 等待本次串行输出完成 ACALL DLAY1 ;延时一段时间 CLR TI ;清发送中断标志

INC R0 ;准备查下一个数 CJNE R0,#38H,LOOP ;8 个数已输出显示完?未显示完 ,则继续

RET ;已显示完,则退出 ㈤软件总流程图 对于一个复杂的软件,一定要有一个软件总流程图,以便反映各个软件子模块间的内在联系,表达各个子模块的功能。根据对软件任务的讨论,得到波形发生器的软件总流程图如图 10-10 所示。

Page 41: 第 10 章 单片机应用系统的设计

波形选择处理 频率改变处理

散转

幅值改变处理

开始

有键按下?

初始化

提示符显示

键盘全盘扫描

逐行扫描读键

有效键?

散转

三角波输出正弦波输出 锯齿波输出 方波输出

有键按下?

键盘全盘扫描

有键按下?

键盘全盘扫描

有键按下?

键盘全盘扫描

有键按下?

键盘全盘扫描

N

Y

N

Y

N

Y

N

Y

N

Y

N

Y

Page 42: 第 10 章 单片机应用系统的设计

二、各软件模块调试 首先,将源程序进行汇编,若汇编未通过,则汇编程序会提示出错类型,比如操作码错、缺少操作数、跳转出范围、符号未定义、缺少“ ,” 等常见错误。经过修改后再进行汇编,若这时提示汇编成功,保存目标文件,则说明源程序的指令使用没有错误。但并不表示程序没有错误,还必须经过仿真调试,仿真通过才说明程序设计正确。 接下来要进行实物仿真调试,在用户电路板上插好仿真头,接好通信电缆,接通电源,运行仿真软件。在进行实物仿真之前,要选择正确的仿真头、通信口、通信协议和波特率等,并设置用户程序空间和数据空间所处的位置(用户板上或仿真器上)。然后,装入前面的提示符显示程序,汇编并执行,若在用户板上的 8 个七段 LED 显示器上显示的结果是“ 123456768” ,则说明提提示符程序设计完全正确。其它软件模块的调试方法类似。

Page 43: 第 10 章 单片机应用系统的设计

10.2.5 系统整体调试 一、系统整体调试 在系统的硬件和软件分别调试成功后,可以进行系统的整体调试。先用仿真器进行调试,插好仿真头,接通电源,启动仿真器,将本波形发生器的系统软件装入仿真器中,并运行,调试系统的整体配合的正确性,直到满意为止。 二、 系统试运行及性能测试 将调试好程序的目标代码,通过编程器写入 AT89C51 中,并将

AT89C51插入用户板上,接通电源,显示器上应显示“ 12345678”这 8 个数字。然后通过键盘选择不同的波形、幅值和频率,用示波器观察到的输出信号应和所设定的若一致,则说明系统运行正常。 经过一段时间的考机试运行后,可以对系统的性能进行测试。对于本波形发生器来说,用示波器和万用表就可以测试其性能指标。按前面所述设计的波形发生器,能产生一路正弦波、三角波、锯齿波或方波信号,其幅度可在 0~10V 内变化,频率可调整,大致为方波频率为 0~100KHz ,锯齿波频率为 0~200KHz ,正弦波和三角波的频率为 0~1.5KHz 。

Page 44: 第 10 章 单片机应用系统的设计

小 结 按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统和典型应用系统等,其中最常见的是典型应用系统。 采用单片机解决实际应用时,一般要经历如下几个步骤: ⑴提出问题、了解现场、明确指标。 ⑵进行可行性论证,提出初步方案。 ⑶提出各分课题的设计方案。 ⑷设计、调试、修改并完成各分课题的任务。 ⑸将各分课题组成整体应用系统,并对系统进行总体调试、修改、完善。 而研制出一个较完整的单片机产品一般要经过以下几步工作: ⑴系统硬件电路设计、组装、调试; ⑵系统应用软件的编制、调试; ⑶系统应用软件的链接调试、固化、脱机 (脱离开发装置 ) 运行。

Page 45: 第 10 章 单片机应用系统的设计

思考题与习题十 1. 构成一个单片机应用系统大体要经过哪些步骤? 2. 所谓单片机应用系统的开发,其基本含义是什么? 3. 单片机应用系统的一般开发过程是怎样的? 4. 单片机开发系统包含哪些基本部分? 5. 常用的单片机开发系统有哪些类型?各有什么特点 ? 6.就你使用过的单片机开发系统,说说其结构原理和操作特点。 7. 按照本章所举例的方法,将该波形发生器的软件设计完成。