011 基于DS12C887的万年历.docx
- 文档编号:7429297
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:26
- 大小:257.55KB
011 基于DS12C887的万年历.docx
《011 基于DS12C887的万年历.docx》由会员分享,可在线阅读,更多相关《011 基于DS12C887的万年历.docx(26页珍藏版)》请在冰点文库上搜索。
011基于DS12C887的万年历
制作名称:
基于DS12C887的万年历
1、制作编号:
001
2、难度等级:
★★★★★(适合第5、7学期制作)
3、设计要求
1)用AT89C51作主控制器,时钟芯片DS12887,温度传感器DS18B20设计一个电子万年历。
2)用16个数码管分别表示十年、年、十月、月、十日、日、星期、十时、时、十分、分、十秒、秒、XX、十度和度。
3)显示采用串行口输出段码,用十六片74LS164来驱动十六个数码管。
4)系统采用集成稳压块7805供电。
4、电路原理图
5、方案论证
按照系统设计功能的要求,初步设计系统由主控模块,时钟模块,显示模块,温度传感模块,键盘接口模块等五个模块组成。
主控芯片使用51系列AT89C51单片机时钟芯片使用了美国DALLAS公司推出的与MC146818兼容,寄存器存取速度快,在主机掉电时可用来保存重要数据的实时时钟DS12887,采用DS12887作为主要计时芯片,可作到计时准确。
显示模块采用普通的共阳LED数码管,键输入采用查询法实现调整功能。
6、硬件介绍
6.1系统硬件电路的设计
系统由主控制器AT89C51,时钟芯片DS12887,温度传感器DS18B20,串口显示电路以及键扫描电路组成。
6.2DS12C1887性能介绍
1)器件特性
DS12C887实时时钟芯片功能丰富,可以用来直接代替IBMPC上的时钟日历芯片DS12887,同时,它的管脚也和MC146818B、DS12887相兼容。
由于DS12C887能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部又增加了世纪寄存器,从而利用硬件电路解决子“千年”问题;DS12C887中自带有锂电池,外部掉电时,其内部时间信息还能够保持10年之久;对于一天内的时间记录,有12小时制和24小时制两种模式。
在12小时制模式中,用AM和PM区分上午和下午;时间的表示方法也有两种,一种用二进制数表示,一种是用BCD码表示;DS12C887中带有128字节RAM,其中有11字节RAM用来存储时间信息,4字节RAM用来存储DS12C887的控制信息,称为控制寄存器,113字节通用RAM使用户使用;此外用户还可对DS12C887进行编程以实现多种方波输出,并可对其内部的三路中断通过软件进行屏蔽。
2)引脚功能
DS12C887的引脚排列如图1所示,各管脚的功能说明如下:
GND、VCC:
直流电源,其中VCC接+5V输入,GND接地,当VCC输入为+5V时,用户可以访问DS12C887内RAM中的数据,并可对其进行读、写操作;当VCC的输入小于+4.25V时,禁止用户对内部RAM进行读、写操作,此时用户不能正确获取芯片内的时间信息;当VCC的输入小于+3V时,DS12C887会自动将电源发换到内部自带的锂电池上,以保证内部的电路能够正常工作。
MOT:
模式选择脚,DA12C887有两种工作模式,即Motorola模式和Intel模式,当MOT接VCC时,选用的工作模式是Motorola模式,当MOT接GND时,选用的是Intel模式。
本文主要讨论Intel模式。
SQW:
方波输出脚,当供电电压VCC大于4.25V时,SQW脚可进行方波输出,此时用户可以通过对控制寄存器编程来得到13种方波信号的输出。
AD0~AD7:
复用地址数据总线,该总线采用时分复用技术,在总线周期的前半部分,出现在AD0~AD7上的是地址信息,可用以选通DS12C887内的RAM,总线周期的后半部分出现在AD0~AD7上的数据信息。
AS:
地址选通输入脚,在进行读写操作时,AS的上升沿将AD0~AD7上出现的地址信息锁存到DS12C887上,而下一个下降沿清除AD0~AD7上的地址信息,不论是否有效,DS12C887都将执行该操作。
DS/RD:
数据选择或读输入脚,该引脚有两种工作模式,当MOT接VCC时,选用Motorola工作模式,在这种工作模式中,每个总线周期的后一部分的DS为高电平,被称为数据选通。
在读操作中,DS的上升沿使DS12C887将内部数据送往总线AD0~AD7上,以供外部读取。
在写操作中,DS的下降沿将使总线AD0~AD7上的数据锁存在DS12C887中;当MOT接GND时,选用Intel工作模式,在该模式中,该引脚是读允许输入脚,即ReadEnable。
R/W:
读/写输入端,该管脚也有2种工作模式,当MOT接VCC时,R/W工作在Motorola模式。
此时,该引脚的作用是区分进行的是读操作还是写操作,当R/W为高电平时为读操作,R/W为低电平时为写操作;当MOT接GND时,该脚工作在Intle模式,此时该作为写允许输入,即WriteEnable。
CS:
片选输入,低电平有效。
IRQ:
中断请求输入,低电平有效,该脚有效对DS12C887内的时钟、日历和RAM中的内容没有任何影响,仅对内部的控制寄存器有影响,在典型的应用中,RESET可以直接接VCC,这样可以保证DS12C887在掉电时,其内部控制寄存器不受影响。
在DS12C887内有11字节RAM用来存储时间信息,4字节用来存储控制信息,其具体垢地址及取值如表1所列。
由表1可以看出:
DS12C887内部有控制寄存器的A-B等4个控制寄存器,用户都可以在任何时候对其进行访问以对DS12C887进行控制操作。
表1DS12C887的存储功能
地址
功 能
取值范围十进制
取值范围
二进制
BCD码
0
秒
0~59
00~3B
00~59
1
秒闹铃
0~59
00~3B
00~59
2
分
059
00~3B
00~59
3
分闹铃
0~59
00~3B
00~59
4
12小时模式
0~12
01~0CAM
81~8CPM
01~12AM
81~92PM
24小时模式
0~23
00~17
00~23
5
时闹铃,12小时制
1~12
01~0CAM
81~8CPM
01~12AM
81~92PM
时闹铃,24小时制
0~23
00~17
00~23
6
星期几(星期天=1)
1~7
01~07
01~07
7
日
1~31
01~1F
01~31
8
月
1~12
01~0C
01~12
9
年
0~99
00~63
00~99
10
控制寄存器A
11
控制寄存器B
12
控制寄存器C
13
控制寄存器D
50
世纪
0~99
NA
19,20
6.3DS18B20单线数字温度计
1)DS18B20性能特性
(1)独特的单线接口方式:
DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(2)在使用中不需要任何外围元件。
(3)可用数据线供电,电压范围:
+3.0~+5.5 V。
(4)测温范围:
-55 ~+125 ℃。
固有测温分辨率为0.5 ℃。
(5)通过编程可实现9~12位的数字读数方式。
(6)用户可自设定非易失性的报警上下限值。
(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。
(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
2)DS18B20的内部结构
DS18B20采用3脚PR35封装或8脚SOIC封装,其内部结构框图如下图所示。
(1) 64 b闪速ROM的结构如下:
开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前56位的CRC校验码,这也是多个DS18B20可以采用一线进行通信的原因。
(2) 非易市失性温度报警触发器TH和TL,可通过软件写入用户报警上下限。
(3) 高速暂存存储器
DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM。
后者用于存储TH,TL值。
数据先写入RAM,经校验后再传给E2RAM。
而配置寄存器为高速暂存器中的第5个字节,他的内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。
该字节各位的定义如下:
低5位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
在DS18B20出厂时该位被设置为0,用户不要去改动,R1和R0决定温度转换的精度位数,即是来设置分辨率,如下表所示(DS18B20出厂时被设置为12位)。
由表可见,设定的分辨率越高,所需要的温度数据转换时间就越长。
因此在实际应用
中要在分辨率和转换时间权衡考虑。
高速暂存存储器除了配置寄存器外,还有其他8个字节组成,其分配如下所示。
其中温度信息(第1,2字节)、TH和TL值第3,4字节、第6~8字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。
当DS18B20接收到温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带
符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0062 5 ℃/LSB形式表示。
温度值格式如下:
对应的温度计算:
当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。
表2是对应的一部分温度值。
DS18B20完成温度转换后,就把测得的温度值与TH,TL作比较,若T>TH或T (4) CRC的产生 在64 b ROM的最高有效字节中存储有循环冗余校验码(CRC)。 主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确。 3)DS18B20的测温原理 DS18B20的测温原理如图2所示,图中低温度系数晶振的振荡频率受温度的影响很小[1],用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。 计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 ℃所对应的一个基数值。 减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。 图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。 另外,由于DS18B20单线通信功能是分时完成的,有严格的时隙概念,因此读写时序很重要。 系统对DS18B20的各种操作必须按协议进行。 操作协议为: 初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。 4)DS18B20与单片机的典型接口设计 以MCS51单片机为例,图3中采用寄生电源供电方式, P11口接单线总线为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管和89C51的P10来完成对总线的上拉[2]。 当DS18B20处于写存储器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大为10 μs。 采用寄生电源供电方式是VDD和GND端均接地。 由于单线制只有一根线,因此发送接收口必须是三态的。 主机控制DS18B20完成温度转换必须经过3个步骤: 初始化、ROM操作指令、存储器操作指令。 假设单片机系统所用的晶振频率为12 MHz,根据DS18B20的初始化时序、写时序和读时序,分别编写3个子程序: INIT为初始化子程序,WRITE为写(命令或数据)子程序,READ为读数据子程序,所有的数据读写均由最低位开始,实际在实验中不用这种方式,只要在数据线上加一个上拉电阻4.7 kΩ,另外2个脚分别接电源和地。 5)DS18B20的精确延时问题 虽然DS18B20有诸多优点,但使用起来并非易事,由于采用单总线数据传输方式,DS18B20的数据I/O均由同一条线完成。 因此,对读写的操作时序要求严格。 为保证DS18B20的严格I/O时序,需要做较精确的延时。 在DS18B20操作中,用到的延时有15 μs,90 μs,270 μs,540 μs等。 因这些延时均为15 μs的整数倍,因此可编写一个DELAY15(n)函数,源码如下: 只要用该函数进行大约15 μs×N的延时即可。 有了比较精确的延时保证,就可以对DS18B20进行读写操作、温度转换及显示等操作。 6.4显示电路的设计 显示部分采用普通的共阳数码管显示,采用动态扫描,以减少硬件电路。 考虑到一次扫描十六个数码管分三排同时扫描。 第一排七个数码管分别表示十年、年、十月、月、十日、日和星期。 第二排六个数码管分别为十时、时、十分、分、十秒和秒。 第三排三个数码管分别表示XX、十度和度。 显示时采用串行口输出段码,用十六片74LS164来驱动十六个数码管,这样扫描一次所需的时间极短。 74LS164内部为八个D触发器,用以实现数据的串行移位,74LS164特性见表3。 单片机以串行口方式0(移位寄存器方式)输出数据,十六片74LS164作为十六个数码管的串并联换显示接口。 74LS164作为TTL单向八位移位寄存器,可实现串行输入,并行输出。 其中A、B为串行数据输入端。 两个引脚按逻辑“5”运算规律输入信号,共一个输入信号时可并接,共同作为输入脚。 CP为时钟输入端可连接到行口的TXD端。 每一个时钟信号的上升沿加到CP端时移位寄存器移一位。 八个时钟脉冲过后,八位二进制数全部移入74LS164中。 MR脚为复位端,当该脚为低电位时移位寄存器各位复0;只有当它为高电平时,时钟脉冲才起作用。 Q1—Q8并行输出端分别接数码管的h—a各段对应的引脚上。 表374LS164特征表 操作模式 输入 输出 复位 MR A B Q0 Q1——Q7 移 位 L × × L Q0——Q6 H L L L Q0——Q6 H L H L Q0——Q6 H H L L Q0——Q6 H H H H Q0——Q6 在给出了八个脉冲后,最先进入74LS164的第一个字节数据到达了高位。 再来一个脉冲,第一个脉冲就会从最高位移出,进入下一个74LS164的第一位,十六片74LS164首尾相串,而时钟端则接在一起。 这样,当输入八个脉冲时从单片机RXD端输出的第一字节数据就进入了第一片74LS164中,而当第二个八个脉冲到来后,第一字节数就进入了第二片74LS164,而随后的第二字节的数据则进入了第一片74LS164。 这样当第十六个八个脉冲完成后首次送出的数据被送到了最下面的164中,其它数据依次出现在第十五至第一片74LS164中,实现了数据在74老输中的串行输入、输出。 在方式0状态下,串行口为同步移位寄存器方式,其波特率是固定的,为fosc/12。 数据由RXD(P3.0)端输入或输出。 同步移位脉冲由TXD(P3.1)端输出。 发送、接受数据时低位在先。 所以根据硬件原理图,在编写程序时,查共阳数码管的段码的二进制数据应该将正常的共阳数码管0—9的二进制按位反序排列,如原来的二进制为11000000(C0H),要改为00000011(03H),就能使数码管正常显示。 6.5键盘接口的设计 由于键盘只有四个,只需用普通按钮接10kΩ上拉电阻,用查询法完成读键功能。 6.6红外遥控接收电路 红外线遥控是目前使用最广泛的一种通信和遥控手段。 由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。 工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。 1)红外遥控系统 通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。 发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。 2)遥控发射器及其编码 遥控发射器专用芯片很多,根据编码格式可以分成脉冲宽度调制和脉冲相位调制两大类,这里我们以运用比较广泛,解码比较容易的脉冲宽度调制来加以说明,现以LC7461组成发射电路为例说明编码原理。 当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。 这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”。 上述“0”和“1”组成的42位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。 然后再通过红外发射二极管产生红外线向空间发射,7461产生的遥控编码是连续的42位二进制码组,其中前26位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。 后16位为8位的操作码和8位的操作反码用于核对数据是否接收准确。 当遥控器上任意一个按键按下超过36ms时,LC7461芯片的振荡器使芯片激活,将发射一个特定的同步码头,对于接收端而言就是一个9ms的低电平,和一个4.5ms的高电平,这个同步码头可以使程序知道从这个同步码头以后可以开始接收数据。 解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。 如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右即可。 根据红外编码的格式,程序应该等待9ms的起始码和4.5ms的结果码完成后才能读码。 3)接收器及解码 LT0038是塑封一体化红外线接收器,它是一种集红外线接收、放大、整形于一体的集成电路,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,没有红外遥控信号时为高电平,收到红外信号时为低电平,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。 LT0038是塑封一体化红外遥控接收集成电路,外形如下图 它内部包含了红外光接收、电信号放大、整形、解调等电路,不需要任何外接元件,可独立完成从红外线接收到输出兼容TTL电平信号的所有工作,没有红外输入信号时为高电平,接收到红外信号时为低电平,它适合于各种红外线遥控和红外线数据传输。 第1脚为GND 第2脚为+5V 第3脚为OUT输出 LT0038适合于对38kHz载频二进制码进行接收解调。 7、软件系统设置 7.1阳历程序设计 因为使用时钟芯片DS12887,阳历程序只需从DS12887各寄存器中读出年,月,日,时,分,秒等数据,再处理即可。 在首次对DS12887进行操作之前必须对它进行初始化,然后DS12887中读出数据,再经处理后送给显示缓冲单元。 阳历程序流程图见附录三图 (2)。 7.2时间调整程序设计 调整时间用三个调整按钮,1个作为移位控制用,另外两个作为加,减用,分别定义为控制按钮,加按钮,减按钮。 在调整时间过程中要调整的位与别的位应该有区别。 所以增加了闪烁功能即调整的位一直在闪烁,直到调整下一位。 闪烁原理就是: 让调整的一位每隔一定时间熄灭一次。 比如说50ms。 利用定时器设计时当达到50ms溢出时,就送给该位熄灭符,在下一次溢出时再送正常显示的值,不断交替直到调整该位结束。 此时送正常显示值给该位,再进入下一位调整闪烁程序。 时间调整程序流程图见附录四图(3)。 7.3性能分析 计时器最关键的是计时的精度。 电子万年历中DA12887上,最好使用专用的晶振。 经测试制作的电子万年历一星期快了三秒左右,误差较大。 实验设计中可换用标准晶振或用软件进行修正。 8、参考电路板图 9、制作实物照片 10、参考程序 ORG0000H MAIN: MOVSP,30H MOVDPTR,#0D00BH MOVA,#0A2H MOVX@DPTR,A MOVDPTR,#0D000H MOVA,#00H MOVX@DPTR,A;秒 INCDPTR MOVA,#0FFH MOVX@DPTR,A;秒报警 INCDPTR MOVA,#00H MOVX@DPTR,A;分 INCDPTR MOVA,#0FFH MOVX@DPTR,A;分报警 INCDPTR MOVA,#00H MOVX@DPTR,A;时 INCDPTR MOVA,#0FFH MOVX@DPTR,A;时报警 INCDPTR MOVA,#01H MOVX@DPTR,A;星期 INCDPTR MOVA,#01H MOVX@DPTR,A;日 INCDPTR MOVA,#01H MOVX@DPTR,A;月 INCDPTR MOVA,#07H MOVX@DPTR,A;年 MOVDPTR,#0D00AH MOVA,#20H MOVX@DPTR,A;初始状态寄存器A MOVDPTR,#0D00CH MOVXA,@DPTR;清状态C INCDPTR MOVDPTR,#0D00DH MOVXA,@DPTR;清状态DVRTL置1 MOVDPTR,#0D00BH MOVA,#22H MOVX@DPTR,A;初始化B MOVIE,#82H MOVTMOD,#01H MOVTL1,#00H MOVTH1,#00H SETBTR1 SETBET1 SETBEA DO: ACALLREAD ACALLXIANSHI JNBP1.3,K1 LCALLDELAY SJMPDO K1: MOVDPTR,#0D00BH MOVA,#0A2H MOVX@DPTR,A FAN1: LCALLXIANSHI SETBP1.3 SETBP1.4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 011 基于DS12C887的万年历 基于 DS12C887 万年历