微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 面向对象技术在单片机系统设计中的应用

面向对象技术在单片机系统设计中的应用

时间:03-22 来源:互联网 点击:

通常的单片机系统设计都是先根据实际问题选用单片机芯片,然后决定所需接口的单元电路及芯片等硬件,再根据此硬件来设计软件,因此这种设计方法下的单片机系统开发人员很难继承他人的工作,而必须从同一个起点做起,进行重复工作。面向对象的设计方法和技术与单片机系统设计相结合就产生了面向对象的单片机系统设计,其主要思路是把单片机系统的每个接口电路都看成了一个一个的对象。单片机系统设计的任务也就变成了各接口模块对象的组合,这样单片机系统开发者就可以把精力更多地用在系统设计上,特别是软件的设计。本系统所采用的设计方法即是面向对象的单片机系统设计方法,例如:在本系统中,将A/D转换芯片及一些扩展接口封装成一个模块,成为一个对象,因此单片机系统的的设计任务就是根据具体的情况选用不同的对象组合起来,加载对应的驱动程序完成单片机系统的设计。

1、面向对象的单片机系统设计方法

1.1 对象和类

对象可以是有形的实体或一个事件等,对象的具体状态通常用数据来描述。在本系统中,芯片、电路和相关数据都封装在对象的统一体中,实现了数据、操作、芯片的结合。

类是对一组具有共同的属性特征和行为特征的对象的抽象,是一种对象类型,描述了该类型的相同的性质,其本质是将芯片、数据结构及对数据的操作都封装在一起,实现了类的外部的特性与内部的隔离。同一类的对象的接口方式和内部操作都是相同的。例如,在本系统中,A/D转换模块对象的接口方式和内部操作实现如下:(1)硬件方面:系统板提供了20个引脚的IDC接口来和A/D板进行交换数据,这样无论A/D板上的A/D处理芯片是八位还是十二位,都可以使用这个统一的接口;(2)软件方面:由A/D转换允许函数void adchangeallow()、判断A/D转换是否完成函数int adchangeendif()和读取A/D转换后的值函数 int adchangeresult()实现对A/D模块的操作,然后根据不同的A/D转换芯片来决定是否在继承这三个操作的基础上增加新的操作(即函数)。

1.2 方法和消息

属于同一个类的对象具有的行为是相同的,当某个行为作用在对象时,我们就称对象执行了一个方法。消息是用来请求某个对象执行某一处理或某一行为的信息,实现了对象与外界或其他对象之间的交互。消息相互作用主要包括两方面的内容:(1)消息与特定方法的联接;(2)传送消息。

2、系统设计

2.1 电源设计

由于本系统以AT89C51单片机为核心,而且包含了A/D和D/A模块,所以本系统的电源部分采用了集成稳压器7805、7905、7812和7912分别输出±5V和±12V。原理框图如图1所示:


图1 电源原理框图

2.2 单片机系统的类的定义

2.2.1 单片机类

把单片机、晶体振荡器、复位芯片、存储器和译码器等封装在一起组成单片机模块对象。在本系统中它包含AT89C51单片机(内含4Kflash存储器)、 64KRAM和64KROM等资源。单片机系统的三总线(数据总线、地址总线和控制总线)通过双向总线隔离/驱动芯片74HC245增加了驱动能力。

2.2.2 输入通道类

输入通道类包括模拟量输入子类、键盘接口子类、中断输入子类。该类的特点是将外部的数据送入到单片类中。在本系统中,模拟量输入子类根据转换的位数使用的对象有8位的A/D和12位的A/D,根据转换速度使用的对象有低速A/D、中速A/D和高速A/D,该类可独立地完成A/D转换,并将转换结果交单片机来处理。键盘接口子类包含单键至16键的对象。中断输入子类包含了八个中断输入对象。

2.2.3 输出通道类

输出通道类包括模拟量输出子类和LCD显示器类。该类的特点是接受单片机类的数据。在本系统中,模拟量输出子类使用的对象只有8位的,该类能独立完成 D/A的转换,将转换后的数据送到外围设备中。LCD显示器类包括字符型液晶显示器和点阵式液晶显示器,本系统可以支持4行16字的字符型的液晶显示器,也可以支持320×240的点阵式液晶显示器。

2.2.4 双向通道类

双向通道类包括串行通信类和预留的I/O类。该类可以和单片机类相互交换数据。本系统的串行通信类是RS-232接口,主要由MAX232芯片来完成该项功能。由于单片机的I/O资源有限,所以在单片机类设计中,留出了RAM的0FF00H~0FFFFH的256字节的地址空间做I/O口,供用户扩展使用。

2.3消息驱动在本系统的实现

在某个事件发生时,监控程序将设置该事件相对应的消息标志,监控程序对这些标志进行判断来决定执行请求处理的事件。如外部中断0请求处理中断的事件的处理:当外部中断0请求处理时,监控程序暂停当前任务,判断当前任务数,如果当前任务数大于等于MAX_TASK(系

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top