河南科技大学毕业论文
§4.1.1系统初始化
系统初始化是保证整个控制系统能够正常运行的重要条件。系统加电复位后,直接进入初始化程序完成系统的初始化。初始化过程主要是对一些控制寄存器、数据区和外部芯片进行初始参数设置和定义。本系统中的初始化主要指各接口芯片的检测、芯片内部设定参数的初始化及系统内部寄存器的初始化。
各接口芯片的检测主要检测各芯片是否己处于准备工作的就绪状态,有无硬件故障等,如检测各位LED是否正常显示系统设置开机时的界面,检测硬件时钟DS1302是处于更换芯片后初次使用为起振状态,还是处于备用电源供电振荡保持状态,即检测系统中控制时间表的有效性,检测人体传感器输出信号是否正常体现人体存在的信息,检测环境光是如何影响光采集电路输出的信号等。
系统内部寄存器初始化主要是指在数据缓冲区内,各用户定义的数据变量的初始化赋值及部分特殊功能寄存器SFR的复位初始化。 §4.1.2定时器中断处理
定时中断是利用单片机内部的定时器定时时间到或计数值已满引起的中断,内部定时器的计数器可以对内部时钟或从外部引线TO和TI输入的外部脉冲进行计数。计数器的溢出信号作为中断请求信号,去置位定时器溢出标志位,向单片机的CPU申请中断。
定时中断为周期性中断,每隔一定的时间会中断一次。本系统中设定的定时中断主要用来构造多任务操作系统,在系统响应中断后,无需对断点实施现场保护,可直接进行多任务时间的划分工作,使相应的操作任务进入就绪状态,即该中断可以启动有关的任务就绪。该定时中断处理程序框图如图4.1.2-1所示:
程序开始定时器中断Y中断任务启动N主程序下一步
图 4.1.2-1 定时中断处理程序框图
本系统还采用了外部中断,此外部中断主要用来判断是否有遥控器信号(或警
22
河南科技大学毕业论文
报信号),若有,就采集下来并加以处理;若无,则返回到主循环。 §4.1.3多任务操作系统的构建
多任务操作是将用户应用程序分成多个任务,在操作系统的管理下,以某种准则调度并分配任务由处理器去执行。多任务运行实现一般是靠CPU运行实时内核,对多任务进行分配和调度,使CPU不停地执行这些任务中的某一个任务,以至能最大限度地提高CPU的利用率,加快运行速度,各任务(程序)不被耽误运行。 本系统多任务的执行是对定时中断中设置的实时标志进行检测,通过标志位的状态决定各任务的调用。任务的执行在微观上是分时顺序进行的,但在宏观上认为是同时执行的。因此各任务在实时系统中的就会处于如下四种状态之一,这四种状态如图4.1.3-1所示:
运行等待休眠就绪
图 4.1.3-1
当某个任务获得CPU的执行权时,CPU执行该任务,此时任务处于运行状态。等待状态是指任务的执行需要等待某一事件发生,则由运行状态退出,进入等待状态。就绪状态是任务满足所有启动条件后所进入的状态。休眠状态是任务己执行完的状态。
§4.2数据采集模块
本系统中的数据采集对象为环境光信号及人体存在信号,在程序设计中对这两个数据的采集放置多任务模块中实施定时采集。 §4.2.1数据采集软件设计的实现
本系统考虑到环境观足够亮时,无论有否人体存在都不应该开灯:而环境光不够亮时,有人体存在才开灯,无人体存在不开灯。本系统逻辑定义为环境光亮时为二进制的“0”,暗时为“1”,人体存在为“1”,人体不存在为“0”,开灯为“1”,
23
河南科技大学毕业论文
关灯为“0”,那么环境光与人体存在可以有以下的逻辑关系表表示,如表4.2.1-1所列:
表4.2.1-1
环境光参数
0 0 1 1
人体存在参数
1 0 1 0
灯光状态
0 0 1 0
上表数据表明可将环境光参数与人体存在参数相与门操作,又由于继电器是低平驱动,所以要将采集处理后的信号进行非操作,才可以驱动继电器工作,即可得到教室灯的状态,其软件子程序为: hr_test(),具体内容会在附录中给出。
其流程图4.2.1-2如下所示:
开始系统初始化光照检测弱是否有人熄灭LED日光灯Y点亮LED日光灯N时间到否YN
图4.2.1-2 数据采集流程图
§4.3时钟模块
在系统启动自检初始化时,首先会对时钟芯片DS1302的运行状态进行判断,当检测到DS1302处于启动状态时才对其进行初始化启动时。实时时钟芯片DS1302的初始化及其读写程序设计的关键是要遵循其时序要求。
24
河南科技大学毕业论文
§4.3.1数据输入输出
在对DS1302进行的各种操作之前,必须先对其初始化,即需要把复位输入RST端置为高电平,如果RST输入为低电平,那么所有的数据传送中止,且I/0引脚变为高阻抗状态。在数据读/写完后,RST端应置成低电平,以防止外部干扰对DS1302内部时钟的影响。
同时,为了防止复位输入端受到外部的干扰,要求上电时,在主电源引脚 Vcc2>2.5V之前,RST必须为逻辑0。无论是读操作还是写操作,都必须在开头的8个时钟周期把提供地址和命令信息的8位数据装入到DS1302的移位寄存器。地址/命令子节用于指明40个寄存器中的哪个进行何种操作。数据在SCLK的上升沿串行输入,在开始的8个时钟周期把命令字装入移位寄存器之后,若跟随的是写命令字节,则在下8个SCLK周期的上升沿输入数据字节,若跟随在读命令字节的8个SCLK周期之后,在下8个SCLK周期的下降沿输出数据字节。 §4.3.2时钟内部寄存器的使用
DS1302有控制寄存器和年、月、日、周、时、分、秒等工作寄存器组成。本系统中只用到工作寄存器中的时分秒及控制寄存器,所应用的各寄存器地址(命令)及数据寄存器分配情况如表4.3.2-1所示:
表4.3.2-1 DS1302内部寄存器
寄存器名 命令字 取值写操作 SEC MIN HR CONTROL CHARGER CLOCK BURST 80H 82H 84H 8EH 90H BEH 读操范围 作 81H 83H 85H 8FH 91H BFH 00~59 00~59 CH 0 0 0 TCS 0 TCS 10SEC 10MIN 10 A/P 0 TCS 0 DS 0 DS SEC MIN HR 0 RS 0 RS 7 6 5 4 3 2 1 0 各位内容 01~02 或 12/24 00~23 WP TCS
25
河南科技大学毕业论文
说明:
(1) 上表中,时钟寄存器内的数据是以BCD码的形式存在的。其中秒寄存器的位7定义为时钟暂停位,当此位设置为逻辑1时,时钟振荡器停止,DS1302进入低功耗的备份状态;当把此位置为0时,时钟将启动。
(2) 小时寄存器的位7定义为12或24小时方式选择位。当为低电平时,选择24小时方式,本系统在设计中采用的就为24小时方式。
(3) 写保护寄存器的位7是写保护位,在对时钟进行些操作之前,位7应先置为0,当它是高电平时,写保护防止对任何其它寄存器进行写操作。 §4.3.3时钟程序设计
对DS1302进行读写的程序流程图如图4.3.3-1所示:
开始将DS1302写保护参数初始化RST一端送高电平去除写保护写入DS1302读地址RST一端送高电平将该地址数据读出写DS1302地址完成读数据写数据暂存读出数据并显示完成数据写入结束 图4.3.3-1 DS1302操作流程图
针对DS1302时钟芯片的操作,在程序中我们单独以头文件的方式给出,其头文名称件程序为ds1302.h,具体内容会在附录中给出。
§4.4数码管显示模块
系统运行过程中的数据显示是人机交互对话的一个重要通道。通过系统数据的显示,我们才可以更好的了解系统运行的状态,从而便于对整个系统进行必要的操作。
26