面向对象技术在单片机系统设计中的应用
扫描二维码
随时随地手机看文章
通常的单片机系统设计都是先根据实际问题选用单片机芯片,然后决定所需接口的单元电路及芯片等硬件,再根据此硬件来设计软件,因此这种设计方法下的单片机系统开发人员很难继承他人的工作,而必须从同一个起点做起,进行重复工作。面向对象的设计方法和技术与单片机系统设计相结合就产生了面向对象的单片机系统设计,其主要思路是把单片机系统的每个接口电路都看成了一个一个的对象。单片机系统设计的任务也就变成了各接口模块对象的组合,这样单片机系统开发者就可以把精力更多地用在系统设计上,特别是软件的设计。本系统所采用的设计方法即是面向对象的单片机系统设计方法,例如:在本系统中,将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(系统所允许的最大任务数),删除优先级最小的任务(优先级的级数从0~MAX_TASK-1共有MAX_TASK个,所以不存在优先级相同的任务,其中优先级级数为0的优先级最高),然后针对 INT0的请求设置消息标志(修改消息队列),并判断它的优先级与当前任务优先级的高低,以决定是否继续当前任务。消息驱动的实现如图2所示:
图2 消息驱动的实现示意图
2.4 系统设计
我们将单片机系统类对象化,即组合成了一个通用板,提供了如下资源:64K的RAM和64K的ROM存储器、4K的flash存储器、A/D转换芯片 AD574A和ADC0809的接口、D/A转换芯片DAC0832的接口、一个16键的键盘接口、8个外部中断接口、256个I/O口、一个4行16字的字符型液晶显示器接口、一个320×240点阵式液晶显示器接口和一个RS-232串行通讯口。原理框图如图3所示:
图3 系统原理框图
2.5 监控程序设计
当外部设备象单片机对象发送信号时,监控程序必须对键盘操作进行解释,然后调用相应的功能模块,完成预定的任务,并通过显示等方式给出执行的结果。
系统投入运行的最初时刻,应对系统进行自检和初始化。开机自检在系统初始化之前执行,如果自检无误,则对系统进行正常初始化,通常包括硬件初始化和软件初始化两个方面。硬件初始化工作是对系统中的各种硬件资源设定明确的初始状态,如对各种可编程芯片进行编程、对各I/O端口设定初始状态和为单片机的硬件资源分配任务等。软件初始化包括对中断的安排、对堆栈的安排、状态变量的初始化、各种软件标志的初始化、系统时钟的初始化和各种变量存储单元的初始化等。除自检和初始化之外,监控程序的任务还有:处理键盘命令、处理接口命令、处理条件触发、及时启动输出和显示功能等。
一般来说,监控程序的基本结构分为两部分:一部分为初始化部分;另一部分为监控循环实体。本系统把监控实体放在了定时中断子程序中,分析如下:(1)定时中断发生后,首先进行例行操作,即保护现场、重装定时器、调整系统时钟和执行定时作业等;(2)键盘查询和外围设备的信号输入:通过访问键盘获得有效的键盘操作信息或接受到外围设备的有效信号,根据实际情况分别处理;(3)刷新显示:单片机执行了一些功能模块,系统的状态和某些参数即发生了变化,本模块则将这些变化从显示屏上反映过来。(4)中断返回:恢复现场,返回主程序。
把监控实体放在了定时中断子程序中,当主程序在完成自检和初始化之后没有监控任务,便有了进入睡眠状态的条件,这样有利于节电和抗干扰。其流程图如图3所示。
图4 监控实体流程图
3、结束语
本系统的设计采用了面向对象的分析技术,为同一类型的外部设备提供了统一的硬件和软件接口,可作为单片机系统的通用平台。在使用本系统时,用户可以根据需要选择加载某些模块对象(如A/D模块对象)和相应的驱动,并可以通过该系统自带的编程环境来编写自己的程序,大大并且缩短了单片机系统设计的时间,提高了单片机系统设计的效率。
参考文献
[1] 陈维兴.C++面向对象程序设计教程 [M].北京:清华大学出版社,2000 .
[2] 周航慈.单片机应用程序设计技术 [M].北京:北京航空航天大学出版社,2002 .