诠解单片机铃声控制系统设计

时间:2022-09-18 02:22:10

诠解单片机铃声控制系统设计

摘要:介绍一种以单片机为核心的铃声自动控制系统。该系统由单片机AT89C51和时钟芯片PCF8583组成,通过RS-485串口通信连接主机和各响铃从机,可完成时间的修改和定时响铃等功能。

关键词:单片机、时钟、RS-485通信

1引言

当今社会,计算机的应用已经渗透到人们生产、生活的各个领域。尤其是以单片机为代表的微型计算机的应用最为广泛,它们凭借其体积小、价格低、功能强、性价比高等优点,占有了计算机应用领域的半壁江山。本文笔者以单片微型计算机为核心,同时运用RS-485远程通信协议,设计出一款铃声控制系统,克服了以往打铃钟定时不准确,电路复杂,可靠性低,成本高等缺点,使用户可以随时对任意一点的铃声时刻进行修改和设定,而不影响走时,并且可以方便可靠的实现分布式远程控制。该铃声控制系统可以广泛的适用于学校、工厂、车站等不同场合的实时报时控制。

2系统简介

铃声控制系统整体由两部分组成:主控中心和终端电铃。主控中心以单片机为核心,包括控制电路、显示电路、监控电路和远程通信部分电路。用户可以通过控制电路操作主控中心,对远程电铃进行控制。终端电铃为响应控制设备,通过其自身的控制系统可以获得清晰、响亮的声响,另外还可以实现不同的时刻发出的铃声不同。同时主控中心和终端电铃都具有掉电保护的功能,极大的提高了整个系统的稳定性和可靠性,它们之间通过RS-485异步串行通信完成远程(1200米)数据交换。系统整体框图如图1所示。

3系统设计

主机硬件设计

主机作为整个系统的主控中心按系统要求需要完成的功能有:实时时钟的产生、用户控制输入、各类信息的显示、数据的存取以及远程通信。其主要包括:MCU,时钟产生模块,控制输入模块,数据存储模块及通信模块的选用。

3.1.1MCU的选用

按系统要求及现实条件,该系统选用的MCU是ATMEL公司的89C51,在实际设计中89C51主要完成智能化的控制、显示和通信等功能。

3.1.2时钟的产生

本系统采用外接时钟芯片(选用PCF8583时钟芯片),这样单片机对其控制就可以以获得稳定的时钟输出。

3.1.3键盘及显示电路

针对功能要求,本系统采用的是矩阵式键盘和普通的数码管显示电路。矩阵式键盘共设置了16个按键,由4*4矩阵式自制键盘构成,包括0到9十个数字键,以及6个功能键。

3.1.4数据存储

考虑到节省口线、稳定性等方面,本系统采用串行数据传输存储器。其容量计算如下:若以打铃次数较多的校园为例,每天按12节课计算,每节课打铃2次,再加上起床和熄灯的次数,打铃大约在30次左右。每次打铃的信息格式如图2。这样每个信息单元占8个字节,存储时均按照非压缩型BCD码存储,则需要存储空间大约在240个字节左右,选用256字节的存储器就能够满足容量的要求,故采用了ATMEL公司的24C02。根据硬件电路的设计可得24C02的I2C硬件地址为:0A2H/0A3H。

3.1.5监控电路

为保证系统的可靠性,本系统采用了看门狗芯片X5045,可直接与许多通用的微控制器的同步串行外设接口(SPI)连接。

3.1.6通信模块

按中远距离(1200米)通信要求,本系统采用异步串行通信的方式。从距离及稳定性方面考虑,本系统选用平衡传输方式的串行接口标准RS-485作为通信标准,在具体设计中,采用的通信接口芯片是MAX485。

从机作为整个控制中心的响应设备,主要完成的功能有:主机命令的接收、应答和响铃的控制。整个从机电路是以AT89C2051微处理器为核心,连接响铃控制电路。其电路连接如图所示。

3.3电源模块

在设计中根据系统要求(当突然断电时,系统整体仍能持续运行)选用了一个较大的电解电容,断电时其所放电量可以保证单片机及其器件(PCF8583、X5045、24C02)正常工作。但在实际测试过程中,如果还需对显示模块供电,则单片机就会由于电力不足而复位。为了解决以上问题,可以在显示供电部分的硬件电路中添加一个二极管,如图4所示,通过它的单向导电性来保证单片机系统

在突然断电时能够持续的工作。

4软件设计

该铃声控制系统的软件设计分为主机软件设计和从机软件设计。对于整个软件系统设计而言,系统监控程序的设计是关键,是单片机系统程序的框架。因此本系统主、从机软件设计都采用了一般结构模式,并综合考虑系统的结构合理性及运行稳定性,主机系统采用了状态顺序编码、监控模块在中断子程序中的设计风格,但鉴于该系统状态单一性,从机系统并未采用状态编码方式,而是由主程序和串口中断子程序构成。

4.1主机软件设计

主机软件设计主要由自检和初始化主程序、定时/计数器T0中断服务程序,以及键盘扫描、显示、状态获得、串口中断和延时等子程序构成。它实现了对硬件设备的检测、整个系统运行中的调度和实时监控以及对硬件和软件的初始化。

4.1.1主程序设计

系统通电复位后,程序随即进入主程序,完成对系统的自检。接着对系统进行正常的初始化,包括硬件和软件初始化。初始化结束,主程序进入等待方式。流程如图5所示。

系统自检包括按键、显示检测、时钟芯片PCF8583检测和E2PROM芯片24C02数据区检测。(1)按键、显示检测:检测前数码管处于全灭状态,随即显示提示输入按键(P)。若按下任意键,数码管显示该按键值,一秒后数码管全灭退出检测。按键功能与键值定义如下:数字键0-9,功能键A-F(A-修改时钟,B-修改时间表,C-通信检测,D-确定,E-取消,F-移位)。(2)时钟芯片PCF8583检测:首先初始化始终芯片为2003年12月31日,24时59分55秒。启动时钟并显示,直至时间显示为2004年1月1日,0时0分5秒。随后数码管全灭,检测退出。(3)E2PROM芯片24C02数据区检测:显示DATATEST,检测开始。24C02有256个字节的E2PROM,程序依次对每个字节读出保存数据。写入0,读出核对,如正确再写入0FFH,读出核对。核对无误把原数据恢复。若在检测过程中发现数据核对有误则显示出错(ERROR),并把该出错数据区地址显示出来。至此系统自检结束。

系统初始化包括定时/计数器T0,时钟时间表,串口相关硬件以及看门狗X5045初始化。(1)定时/计数器T0初始化:定时/计数器T0在该系统中作为监控程序的载体,其初始值须多方面考虑。设定为定时器,定时50ms,采用方式1(16位定时/计数器)。因单片机所用晶振为12MHz,故初值X可用如下公式计算:

50ms=(65536-X)结果X=15536

定时器T0的初始化程序如下:

MOVTMOD,#21H;设置定时器T0方式1

MOVTH0,#HIGH(15536);填定时器初值高字节

MOVTL0,#LOW(15536);填定时器初值低字节

SETBTR0;开定时器T0

SETBET0;允许T0中断

SETBEA;总中断允许

(2)时钟时间表的初始化:时钟芯片PCF8583的设置在本系统中需要对其内部9个寄存器进行初始化:控制状态寄存器(00H),计数寄存器百分之一秒单元(01H),秒单元(02H),分单元(03H),时单元(04H),年/日期单元(05H),星期和月份单元(06H),时钟起闹控制寄存器(08H),起闹定时器(0FH)。其中控制状态寄存器设置为32.768K计数方式。(3)串口初始化:包括波特率设置、串口方式设置和硬件MAX485设置。为了通信的稳定性与正确性,串口方式设置为方式3(9位通用异步接收器/发送器),即对串口控制寄存器SCON设值为0D0H。波特率设置方式为方式2(具有自动重装初值的8位定时/计数器),用定时/计数器T1作为波特率发生器。设置波特率为2400。其计算公式如下:

波特率=得定时器初值X=230(即0E6H)

MAX485设置:因MAX485为半双工方式,所以它的发送/接收需要对引脚/RE、DE按要求进行置位/复位设置。

(3)看门狗初始化:本系统使用了硬件看门狗X5045,考虑程序的运行时间选择了600ms的复位时间。

程序为:MOVA,#10H;X5045方式,看门狗600mLCALLWRSR写入

系统初始化结束后,主程序进入节电等待方式。该方式下,送往CPU的时钟信号被封锁,CPU进入等待状态,此时堆栈指针SP、程序计数器PC、程序状态字PSW、累加器A的状态均保持不变,I/O引脚保持以前的状态。等待方式可由中断或复位来退出。在本系统中主要是由定时中断T0来唤醒,之后进入监控循环。

3.1.2定时中断监控程序设计

定时中断服务程序是本系统程序的核心,由填定时器初值、喂狗模块,时间标志位、出错状态判断模块,键盘处理模块,显示闪烁判断及显示等模块构成。流程图如图6所示。状态0——初始状态,正常显示时钟;状态1——修改时钟状态;状态2——修改时间表状态;状态3——通信检测状态

(1)填定时器初值喂狗模块:主要为监控循环正常运行而设置,看门狗定时器复位使其继续监控系统运行。

(2)时间标志位、出错状态判断模块:为以下程序运行中的一些时间要求而设置。包含1/2秒标志和1秒标志;出错状态判断模块是为显示定时间(1s)的出错信息而设置,包含时钟输入出错和时间表改动出错两种出错状态。

(3)键盘处理模块:它是监控程序的主要组成部分,负责扫描键盘,解释按键和调度执行模块。

(4)闪烁判断及显示模块:按照硬件设计,本系统的显示为静态模拟串口显示。显示不需要定时刷新,所以在键盘处理后对是否显示及是否闪烁要进行判断,以便进入正确的显示模块。设置了两个标志位:显示标志DISPF和闪烁标志FLAHF。显示判断模块流程可参照图7。若有闪烁位则该位由显示1/4秒,灭1/4秒来造成闪烁效果。

3.1.3其他应用子程序设计

本系统中的应用子程序包括键盘扫描子程序、显示子程序、状态获得子程序、串口中断子程序、延时子程序以及I2C总线和SPI总线的两个通用软件包。部分子程序在上面已做过介绍了,下面只对串口中断子程序、延时子程序和两种总线的通用软件包做说明。

(1)串口中断子程序:在本系统的通信中应用的是RS485串口通信,对于硬件可参照硬件设计的通信部分。因为该通信简单不存在大量数据的通信,所以通信协议是自行定义的。格式有两种:通常状态下,通信为两个字节,首字节为地址(广播地址0),尾字节为响铃类型,该通信不需要从机回应。检测状态下,通信为一个字节,包括广播检测和单机检测。广播检测地址为0FFH,单机地址为某从机号(01-99)。当从机接收到0FFH或本机号时响铃(类型0),否则不做任何响应。接收到本机号时要向主机发送回应,主机接到回应表示该从机运行正常。串口中断子程序只是通常状态下调用的,主要是为了发送响铃类型而设置的。

(2)延时子程序:本系统中设置了一个比较精确的1ms延时程序,其他延时程序都是在此基础上调用多次实现的:

经计算可知该程序执行用993个机器周期,当采用12MHz的晶振,1个机器周期=1μs,则执行该程序要993μs,与1ms比较存在7μs误差。

(3)I2C总线和SPI总线通用软件包:本系统硬件设计中使用了两个I2C总线器件:时钟芯片PCF8583和E2PROM24C02,地址分配为PCF8583—0A0H/0A1H,24C02—0A2H/0A3H。本系统I2C模拟通用软件包由信号模拟子程序STA、STOP、MACK、MNACK和通用子程序CACK、WRBYT、RDBYT、WRNBYT、RDNBYT共九个子程序组成。可以设置在程序存储器的任何空间,占用的资源有R0(18H)、R1(19H)、F0、C。通用软件包中的符号单元有:MTD—发送缓冲区首址,MRD—接收缓冲区首址,SLA—寻址字节(SLAW/R)存放单元,NUMBYT—传送字节数n存放单元。本系统通用软件包适用于以80C51系列为主控器的I2C总线应用系统,主控时钟频率为12MHz。如果时钟频率改变则应适当修改信号模拟子程序中的定时要求。通用软件包中直接与应用程序编写有关的子程序为WRNBYT和RDNBYT。相应的I2C总线读写指令为:

4.2.1主程序设计

本铃声控制系统的从机软件设计,主要包含有主程序(自检程序和初始化程序)、定时中断服务程序及若干子程序设计。由于从机硬件电路很少,故上电复位后,省去对器件的检测,立即进入正常的初始化。从机完成的主要功能是对主机发送命令能够及时准确的接收并响应,所以初始化主要是串行口的设置。具体流程见图8。串口通信要求通信双方必须有相同的波特率,系统中设置波特率为2400,为了保证通信的稳定性与正确性,设置为方式3(9位通用异步接收器/发送器),即对串口控制寄存器SCON设值为0D0H。初始化结束后,主程序即刻进入空闲模式:

AT89C2051进入等待模式,直到接收到主机命令。

4.2.2串口中断子程序

为了让通信更加稳定,我们制定了自己的通信协议:把通信状态分为两种:正常通信状态和检测通信状态。正常通信状态主要完成定时通信打铃的功能,命令格式为两个字节,第一字节为广播地址:0;另一字节为响铃类型。检测通信状态主要完成对从机的通信检测,分为广播检测和单机检测。命令格式是一个字节为地址字节,其中广播检测地址为0,单机检测地址为该从机号01-99。串行口中断请求由接收所引起。串行接口接收到了一帧信息,便由硬件置RI=1,在CPU允许中断请求的情况下,向CPU申请中断,中断响应后,必须由软件清楚RI。故在串行口中断子程序开始,首先清除RI,然后由特殊功能寄存器SBUF读取数据。如上流程图示。读取数据后,首先进行数据的校验,由于采用的是串行口工作方式3,所以将SCON中的位RB8作为一次校验,同时也取PSW中的奇偶校验位P进行二次校验,最大可能的保证接收数据的正确性。校验程序段如下:

当数据校验正确时,进入正常响应阶段。按照通信协议的约定,串口中断子程序对命令进行解释并按命令执行相应的操作。详细命令解释判断见图9。各标志判断结束后,系统进入响铃控制流程。按照要求,响铃时间为10秒,系统中取定时器T0,配合一个记数单元构成10秒的延时。不同时刻要求响铃类型不同,在实际设计过程中,利用T0的中断速率来控制产生声音的脉冲频率,通过一个音频放大器做简单的功率放大后产生不同的声音(见从机硬件部分)。

程序中T0的初值TH、TL0用于频率的控制,利用两个中间单元DPH、DPL,不同的响铃类型只需把需要的初值提前放置到DPH、DPL中,调用设置T0的以上子程序即可。

5结束语

在整个设计过程中,无论硬件还是软件,始终以模块化设计为指导思想,对整个系统细化,分成多个小模块,保证每部分都能够独立、可靠的工作,然后把精力集中放在对各模块之间的无缝接口上。最终采用TKS-58仿真器来完成了整个系统的调试。

上一篇:体育教育及价值诠释 下一篇:小议农合社的问题及策略