基于msp430f149和DS1302的12864时钟设计.docx
《基于msp430f149和DS1302的12864时钟设计.docx》由会员分享,可在线阅读,更多相关《基于msp430f149和DS1302的12864时钟设计.docx(26页珍藏版)》请在冰豆网上搜索。
基于msp430f149和DS1302的12864时钟设计
基于msp430f149和DS1302的12864时钟设计
本设计系统由主控模块、时钟模块、显示模块、红外解码控制模块、温度模块、掉电存储模块共6个模块组成,主控芯片使用TI系列msp430f149单片机,时钟芯片使用美国DALLAs公司推出的一种高性能、低功耗、带RAM的实时时钟DSl302。
采用DSl302作为主要计时芯片,可以做到计时准确。
更重要的是,DSl302可以在很小电流的后备电源(2.5—5.5v电源,在2.5v时耗电小于300nA)下继续计时,并可编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电。
显示模块采用12864液晶,控制采用红外遥控器实现调整功能,温度模块采用DS18B20,掉电存储采用msp430f149内部自带的flash实现闹钟数据的掉电保存。
MSP430单片机概述
MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗的混合信号处理
器(MixedSignalPocessor)。
称之为混合信号处理器,主要是由于其针对实际应用需求,把许多模拟电路、
数字电路和微处理器集成在一个芯片上,以提供“单片”解决方案。
MSP430系列单片机的特点
虽然MSP430系列单片机推出时间不是很长,但由于其卓越的性能,在短短几年时间里发展极为迅速,
应用也日趋广泛。
MSP430系列单片机针对各种不同应用,包括一系列不同型号的器件。
主要特点有:
1.超低功耗
MSP430系列单片机的电源电压采用~低电压,RAM数据保持方式下耗电仅,活动模
式耗电250pA/MIPS(MIPS:
每秒百万条指令数),IO输入端口的漏电流最大仅50nA。
MSP430系列单片机有独特的时钟系统设计,包括两个不同的时钟系统:
基本时钟系统和锁频环(FLL
和FLL+)时钟系统或DCO数字振荡器时钟系统。
由时钟系统产生CPU和各功能模块所需的时钟,并且这
些时钟可以在指令的控制下打开或关闭,从而实现对总体功耗的控制。
由于系统运行时使用的功能模块不
同,即采用不同的工作模式,芯片的功耗有明显的差异。
在系统中共有种活动模式(AM)和5种低功耗模式
(LPM0~LPM4)。
另外,MSP430系列单片机采用矢量中断,支持十多个中断源,并可以任意嵌套。
用中断请求将CPU
唤醒只要6us,通过合理编程,既以降低系统功耗,又可以对外部事件请求作出快速响应。
在这里.需要对低功耗问题作一些说明。
首先,对一个处理器而言,活动模式时的功耗必须与其性能一起来考察、衡量,忽略性能来看功耗是
片面的。
在计算机体系结构中,是用W/MIPS(瓦特/百万指令每秒)来衡量处理器的功耗与性能关系的,
这种标称方法是合理的。
MSP430系列单片机在活动模式时耗电250uA/MIPS,这个指标是很高的(传统
的Mcs51单片机约为10~20mA/MIPS)。
其次,作为一个应用系统,功耗是整个系统的功耗,而不
仅仅是处理器的功耗。
比如,在一个有多个输入信号的应用系统中,处理器输入端口的漏电流对系统的耗
电影响就较大了。
MSP430单片机输入端口的漏电流最大为50nA,远低于其他系列单片机(一般为l~10uA)。
另外,处理器的功耗还要看它内部功能模块是否可以关闭.以及模块活动情况下的耗电.比如低电压
监测电路的耗电等。
还要注意,有些单片机的某些参数指标中.虽然典型值可能很小,但最大值和典型值
相差数十倍,而设计时要考虑到最坏情况,就应该关心参数标称的最大值,而不是典型值。
总体而言,
MSP430系列单片机堪称目前世界上功耗最低的单片机,其应用系统可以做到用一枚电池使用10年。
2.强大的处理能力
MSP430系列单片机是16位单片机,采用了目前流行的、颇受学术界好评的精简指令集(RISC)结构,
一个时钟周期可以执行一条指令(传统的MCS51单片机要12个时钟周期才可以执行一条指令),使
MSP430在8MHz晶振工作时,指令速度可达8MIPS(注意:
同样8MIPS的指令速度,在运算性能上16
位处理器比8位处理器高远不止两倍)。
4
3.高性能模拟技术及丰富的片上外围模块
MSP430系列单片机结合TI的高性能模拟技术,各成员都集成了较丰富的片内外设。
视型号不同可
能组合有以下功能模块:
看门狗(WDT),模拟比较器A,定时器A(Timer_A),定时器B(Timer_B),串口0、
1(USART0、I),硬件乘法器,10位,12,14位ADC,12位DAC,12C总线,端口1-6(P1-P6),基本定时器(BasicTimer)等。
其中,看门狗可以在程序失控时迅速复位:
模拟比较器进行模拟电压的比较,配合定时器,可设计出
高精度(10~11位)的A/D转换器:
16位定时器(TimerA和TimerB)具有捕获,比较功能;__________大量的捕获,比
较寄存器,可用于事件计数、时序发生、PWM等;多功能串口(USART)可实现异步、同步和12C串行通
信,可方便地实现多机通信等应用;具有较多的I/O端口,最多达6*8条I/O口线,IO输出时,不管是灌
电流还是拉电流,每个端口的输出晶体管都能够限制输出电流(最大约25mA),保证系统安全:
PI、P2端
口能够接收外部上升沿或下降沿的中断输入;12位A/D转换器有较高的转换速率,最高可达200Kb/s,
能够满足大多数数据采集应用:
LCD驱动模块能直接驱动液晶多达160段;F15x和F16x系列有两路12
位高速DAC,可以实现直接数字波形合成等功能:
硬件12C串行总线接口可以扩展12C接口器件:
DMA
功能可以提高数据传输速度,减轻CPU的负荷。
MSP430系列单片机的丰富片内外设,在目前所有单片机系列产品中是非常突出的,为系统的单片解
决方案提供了极大的方便。
4.系统工作稳定
上电复位后,首先由DCO_CLK启动CPU,以保证程序从正确的位置开始执行,保证晶体振荡器有
足够的起振及稳定时间。
然后软件可设置适当的寄存器的控制位来确定最后的系统时钟频率。
如果晶体振
荡器在用做CPU时钟MCLK时发生故障,DCO会自动启动,以保证系统正常工作。
这种结构和运行机制,
在目前各系列单片机中是绝无仅有的。
另外,MSP430系列单片机均为工业级器件,运行环境温度为
-40~+85"C,运行稳定、可靠性高,所设计的产品适用于各种民用和工业环境。
系统各模块硬件连接说明:
一、LED发光二极管
8个LED发光二极管在P2口,原理图如下图所示。
蜂鸣器的发声控制原理同发光二极管类似,通过向对应的控制口写入“0”或者“1”实现。
但是不是直接对蜂鸣器进行控制,是利用PNP三极管9012的导通与断开来实现控制,同时
设计了一个发光二极管作为指示灯。
BELL通过跳线帽连接到P62口,其连接原理图如下图
所示。
二、温度传感器DS18B20
DS18B20是美国DALLAS半导体公司生产的可组网数字式温度传感器,在其内部使用
了在板(ON-B0ARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成
电路内。
独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微
处理器与DS18B20的双向通讯。
DS18B20在使用中不需要外围元件。
温范围-55℃~+125℃,固有测温分辨率0.5℃。
测量结果以9位数字量方式串行传送,其电路连接图如下图
所示。
其中18B20为控制口和数据口,与MSP430F149单片机的P53口相连接。
DS18B20的工作原理图如下图所示
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计
数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲
输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数
晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,
计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计
数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数
值即为所测温度。
图中斜坡累加器用于补偿和修正测温过程中的非线性,其输出用于修正计
数器1的预置值。
4.DS18B20的操作时序:
1.初始化
①.先将数据线置高电平1
②.延时(该时间要求不是很严格,但是要尽量智短一点)
③.数据线拉到低电平0
④.延时750us
⑤.数据线拉到高电平1
⑥.延时等待。
如果初始化成功则在15~60ms内产生一个由18B20返回的低电平。
⑦.若CPU读到数据线上的低电平后,还要进行延时,其延时的时间从发出高电平算起,最少要480us。
DS18B20写数据:
①.先将数据线置低电平0
②.延时确定的时间15us.
③.按从低位到高位的顺序发送数据(一次只能发送一位)
④.延时45us
⑤.数据线拉到高电平1
⑥.重复1~5步骤,直到发送完整个字节。
⑦.最后将数据线拉高到1。
DS18B20读数据
①.先将数据线拉高到1
②.延时2us.
③.将数据线拉低到0
④.延时6us
⑤.数据线拉到高电平1
⑥.延时4us
⑦.读数据线的状态得到一个状态位,并进行数据处理。
⑧延时30us。
⑨重复1~7步骤,直到读取完整个字节。
三、带字库图形12864液晶接口
12864液晶采用20脚接口,该型号液晶对应的管脚如下表:
引脚号引脚名称方向功能说明
1VSS-模块的电源地
2VDD-模块的电源正端*2脚和3脚加可调电阻
3V0-LCD驱动电压输入端
4RS(CS)H/L并行的指令/数据选择信号;串行的片选信号
5R/W(SID)H/L并行的读写选择信号;串行的数据口
6E(CLK)H/L并行的使能信号;串行的同步时钟
7DB0H/L数据0
8DB1H/L数据1
9DB2H/L数据2
10DB3H/L数据3
11DB4H/L数据4
12DB5H/L数据5
13DB6H/L数据6
14DB7H/L数据7
15PSBH/L并/串行接口选择:
H-并行;L-串行
16NC空脚
17/RETH/L复位低电平有效{加上拉电阻}
18NC空脚
19LED_A-背光源正极(LED+5V)
20LED_K-背光源负极(LED-OV)
12864液晶接口硬件连接原理如下图所示。
其中RS、RW、EC分别为寄存器选择、读写信号、使能信号,为与其他模块共用的管
脚,分别与单片机P55、P56、P57相连接。
AD0~AD7为并行数据信号线,分别与P40-P47
相连接,PSB和/RST分别为并/串选择和液晶复位管脚,分别接P50和P51。
12864液晶的控制是按照参考时序,写入指令数据进行初始化,然后写入数据信号显示
数据。
程序在开始时对液晶模块功能进行初始化设置,约定显示格式并行写时序如下图所示
3、应用说明
用FYD12864-0402B显示模块时应注意以下几点:
①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。
②显示ASCII字符过程与显示中文字符过程相同。
不过在显示连续字符时,只须设定一次显示地址,由模块自动对地
址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。
③当字符编码为2字节时,应先写入高位字节,再写入低位字节。
④模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0”,方可接受新的指
令。
如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一
个指令确定执行完成。
指令执行的时间请参考指令表中的指令执行时间说明。
⑤“RE”为基本指令集与扩充指令集的
选择控制位。
当变更“RE”后,以后的指令集将维持在最后的状态,除非再次变更“RE”位,否则使用相同指令集时,
无需每次均重设“RE”位。
四、实时时钟芯片DS1302
1DS1302简介:
DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。
工作电压宽达~。
采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。
DS1302的外部引脚分配如图1所示及内部结构如图2所示。
DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。
图1DS1302的外部引脚分配
图2DS1302的内部结构
各引脚的功能为:
Vcc1:
主电源;Vcc2:
备份电源。
当Vcc2>Vcc1+时,由Vcc2向DS1302供电,当Vcc2SCLK:
串行时钟,输入,控制数据的输入与输出;
I/O:
三线接口时的双向数据线;
CE:
输入信号,在读、写数据期间,必须为高。
该引脚有两个功能:
第一,CE开始控制字访问移位寄存器的控制逻辑;其次,
CE提供结束单字节或多字节数据传输的方法。
DS1302有下列几组寄存器:
DS1302①有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式,如图3所示。
图3DS1302有关日历、时间的寄存器
小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。
当为高时,选择12小时模式。
在12小时模式时,位5是,当为1时,表示PM。
在24小时模式时,位5是第二个10小时位。
秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。
当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。
控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。
在任何的对时钟和RAM的写操作之前,WP位必须为0。
当WP位为1时,写保护位防止对任一寄存器的写操作。
DS1302②有关RAM的地址
DS1302中附加31字节静态RAM的地址如图4所示。
图4
DS1302③的工作模式寄存器
所谓突发模式是指一次传送多个字节的时钟信号和RAM数据。
突发模式寄存器如图5所示。
图5
④此外,DS1302还有充电寄存器等。
2读写时序说明
DS1302是SPI总线驱动方式。
它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。
要想与DS1302通信,首先要先了解DS1302的控制字。
DS1302的控制字如图6。
图6控制字(即地址及命令字节)
控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。
位6:
如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;
位5至位1(A4~A0):
指示操作单元的地址;
位0(最低有效位):
如为0,表示要进行写操作,为1表示进行读操作。
控制字总是从最低位开始输出。
在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。
同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。
数据读写时序如图7。
图7数据读写时序
具体操作见驱动程序。
3电路原理图:
电路原理图如图8,DS1302与单片机的连接也仅需要3条线:
CE引脚、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2为备用电源,外接晶振,为芯片提供计时脉冲。
DS1302采用串行数据传输,SCLK控制线、IO口线、REST口线分别与P65、P66、P67
相连接。
五、一体化红外接收头1838
红外线遥控是目前使用比较广泛的一种通信和遥控手段。
由于红外线遥控装置具有体积
小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、
空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。
工业设备中,在高压、辐射、
有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。
DM430-A单片机开发板提供一体化红外接收头接口,如果用户购买的套餐包含红外一
体化接收头,用户可以使用电视遥控器或者音箱等遥控器与单片机通信,可以对遥控器或其
他红外设备解码。
下图为红外接收头硬件连接原理图。
其中1脚KEY3连接到P13口,为红外数据通道,2脚和3脚分别接GND和VCC,该型接收头支持~5V供电,硬件连接非常简单。
通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如下所示:
(一)发射部分键盘矩阵、编码调制、LED红外发送器
(二)接收部分
52单片机解码
研究中应用VS0038一体化红外接收头(实物图如下:
)
红外接收头VS0038能够正常接收的角度
2遥控发射器及其编码
(1)遥控发射器专用芯片很多
(2)根据编码格式可以分成:
脉冲宽度调制和脉冲相位调制两大类
现在我们研究以运用比较广泛,解码比较容易实现的脉冲宽度调制来加以说明。
当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。
这种遥控码具有以下特征:
(a)采用脉宽调制的串行码
(b)以脉宽为、间隔、周期为的组合表示二进制的“0”
(c)以脉宽为、间隔、周期为的组合表示二进制的“1”
遥控器发出由“0”和“1”组成的32位二进制码,经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。
然后再通过红外发射二极管产生红外线向空间发射,,其中前16位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。
后16位为8位的操作码和8位的操作反码用于核对数据是否接收正确。
(其中的地址码为用户识别码,它又分为用户码与用户反码)
当遥控器上任意一个按键按下超过36ms时,LC7461芯片的振荡器使芯片激活,将发射一个特定的同步码头,对于接收端而言就是一个9ms的低电平,和一个的高电平,这个同步码头可以使程序知道从这个同步码头以后可以开始接收数据。
解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以的低电平开始,不同的是高电平的宽度不同,“0”为,“1”为,所以必须根据高电平的宽度区别“0”和“1”。
如果从低电平过后,开始延时,以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比长些,但又不能超过,否则如果该位为“0”,读到的已是下一位的高电平,因此取(+)/2=最为可靠,一般取左右即可。
根据红外编码的格式,程序应该等待9ms的起始码和的结果码完成后才能读码。
接收器及解码
VS0038是塑封一体化红外线接收器,它是一种集红外线接收、放大、整形于一体的集成电路,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,没有红外遥控信号时为高电平,收到红外信号时为低电平,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。
测试时用的遥控器
测试效果:
1.欢迎界面
2.主页面时间显示
3.主菜单
(1)
4.主菜单
(2)
5.时间设置
6.闹钟设置
程序如下:
文件一<>
#include<>
#include""
#include""
#include""
#include""
#include""
#include""
#include""
#include""
voidmain(void)
{
unsignedchari;
WDTCTL=WDT_ADLY_250;1IN7f3f0f3f4IN0C4IN0C0C0C0C0C0C0C0C0C0C0C0C0F0F0C0C0C0C0C1C3F3F0C0C0C0C1C0C7F1F1F0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1F1F0C0C0C0C0F1C0C0C0C0C0C0C0C0C0C1C3C6C1C0C1C1C7C1F0C0F8F0F7F3F3F3F3F3F3F3F1C7C1F7F1F7C1C0C9C7C0C0C0C0C1C1C9C0F0F0F0F0F1F7F7F0C0C1C9C0C0C1C0F0F0F3C6IN8c8a8f000000f0f0f5IN0F0F1F1F3F3F3F7F1F7F0F0F3C1C6F0C0C0C0F0C0C0C0C0F0C0C0C0C0C7C7F3F7F3F6C3F3F7F7F8C1F8C8C8C8C8C8C3F8C8C8C8C8C1F8C0C1F0C7F1C7F1C3F3F7F1C1C1C7F7F1C0C1C0C0C0C1F6C6C6C6C6C6C0C0C1C1C0C0C0A0A0C1C8C1F1F1F1F8C0C0C0C0F3F1F0C0F0C8a1C0F3F3F3F3F3F3F0C0C3C1C1C3F1F3C1C3F1C0C6C6C6C0C1C0C0”1”0”7a5a4a页面时间显示(setflag==0)
2.主菜单
(1)(setflag==1)
3.主菜单
(2)(setflag==2)
4.时间设置(setflag==3)
5.闹钟设置(setflag==4)
每次有键按下时检测setflag标志,根据键值执行相应命令
*****************/
voidkeyvalue_const(void)
{
if(setflag==0)菜单
(1)
default:
break;菜单
(2)
case14:
setflag=3;break;间设置
case15:
setflag=0;LCD_CLEAR();IE1|=WDTIE;break;页面
default:
break;
}
return;
}
elseif(setflag==2)菜单
(二)画面下的键值处理
{
key_value=infrared();菜单
(1)
case14:
setflag=4;break;钟设置
case15:
setflag=0;LCD_CLEAR();IE1|=WDTIE;break;页面
default:
break;
}
P2OUT&=~0x01;
delay_ms(50);
P2OUT|=0x01;
delay_ms(50);
return;
}
elseif(setflag==3)间设置画面下的键值处理
{
key_value=infrared();菜单
(1),并将设置后的时间写入DS1302,
清除last