基 于AT89S51的 电 子 万 年 历.doc_第1页
基 于AT89S51的 电 子 万 年 历.doc_第2页
基 于AT89S51的 电 子 万 年 历.doc_第3页
基 于AT89S51的 电 子 万 年 历.doc_第4页
基 于AT89S51的 电 子 万 年 历.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2013届本科毕业设计(一号黑体居中) 基 于AT89S51的 电 子 万 年 历(二号黑体居中)院 (系) 名 称物理与电子信息学院(小三号黑体)专 业 名 称电子信息科学与技术(小三号黑体)学 生 姓 名张三丰(小三号黑体)学 号090524111(小三号Times New Roman)指 导 教 师何大壮教授(小三号黑体)完 成 时 间2013年5月8日(小三号黑体)目 录摘 要IAbstractII第1章 方案论证11.1 电子万年历显示电路11.1.1用单片机控制时钟芯DS12C887正常工作11.1.2 对温度传感器DS18B20的读取及控制21.1.3用74LS164控制显示2第2章 硬件电路设计32.1 系统硬件电路的设计32.2 芯片介绍32.2.1 AT89S51性能介绍及其主要特性32.2.2 DS12C887性能介绍62.2.3 DS18B20单线数字温度计112.2.4 显示电路的设计162.2.5 键盘接口的设计172.2.6 彩灯电路17第3章 软件系统设计183.1 主程序设计183.2 阳历程序设计183.3 读出温度子程序设计193.4 显示子程序设计193.5 时间调整子程序203.6、控制源程序设计21结 论27致 谢29参考文献30附录1 系统原理图31附录2 布线图32附录3 原器件清单33洛阳师范学院毕业设计/论文摘 要 随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。由其是单片机技术的应用产品经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。本设计以数字集成电路技术为基础,单片机技术为核心。本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。本系统以单片机的汇编语言进行软件设计,增加了程序的可读性和可移植性,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。系统通过7段LED数码管为载体显示数据,所以具有人性化的操作和美观的页面效果。可以显示时间、日期、星期、温度等功能。关键词: 单片机;万年历;数码管 Abstract Along with the electronic technology rapid development, specially appears along with the large scale integrated circuit, lived for the humanity has brought the fundamental change. Was the monolithic integrated circuit technology application product after entered everyone by it. The electronic ten thousand years calendar appearance brings for peoples life many is convenient.This article first describes the system hardware principle of work, and attaches by the system structure diagram performs to explain, emphatically introduced this system applies various hardware connection technology and each interface module function and the work process, next, in detail elaborated procedure each module and the realization process. This design take the digital integrated circuit technology as the foundation, the monolithic integrated circuit technology is a core. This article compiles the guiding ideology is the software and hardware unifies, take the hardware as the foundation, carries on various functions module the compilation.This system carries on the software design by the monolithic integrated circuit assembly language, increased the procedure readability and the probability, in order to be advantageous for the expansion and the change, the software design uses the modular structure, succinctly caused the programming the logical relations to be bright. System through 7 section of LED numerical code tube for carrier demonstration data, therefore has the human nature operation and the artistic page effect. May demonstrate function and so on time, date, week, temperature.Key Words Monolithic integrated circuit;Ten thousand years calendar;Digital tube.II第1章 方案论证1.1 电子万年历显示电路初步设计系统由主控模块,时钟模块,显示模块,温度传感模块,键盘接口模块,彩灯模块组成。主控芯片使用51系列AT89S51单片机。时钟芯片使用了美国DALLAS公司推出的与MC146818兼容,寄存器存取速度快,在主机掉电时可用来保存重要数据的实时时钟芯片DS12C887,采用DS12C887作为主要计时芯片,可作到计时准确。显示模块采用普通的共阳LED数码管。温度模块采用美国DALLAS公司生产的一线式数字温度传感器DS18B20,芯片内有一个64位的ROM,其中存有各个器件自身的序列号,作为器件独有的ID号码,DS18B20简化了测温器件,使用更加方便,可做到准确测量温度。键输入采用查询法实现调整功能。彩灯采用普通的发光二极管组成。电路系统构成框图如图1-1:AT89S51主控模块键盘扫描电路DS12C887时钟电路显示电路温度计电路彩灯电路图1-1 电路系统框图1.1.1用单片机控制时钟芯DS12C887正常工作设计中使用的时钟芯片是美国DALLAS公司推出的与MC146818兼容,寄存器存取速度快,在主机掉电时可用来保存重要数据的实时时钟芯片DS12C887,采用DS12C887作为主要计时芯片,可做到计时准确。对DS12C887的控制,主要是对其的初始化和对其数据的读取。DS12C887采用连续工作制,一般无需每次都初始化,即使系统复位也是如此。但初始化时,首先应禁止芯片内部的更新周期操作。所以,应先将DS12C887状态寄存器B中的SET位置1,然后初始化。DS12C887处于正常工作状态时,每秒即产生一个更新周期。在该周期内,微处理器不能读时标寄存器中的内容,否则将得不到确定数据。为了采样时标寄存器中的数据,采用两种避开在更新周期内访问时标寄存器的方法。第一种是利用更新周期结束发出的中断。第二种是利用寄存其A中的UIP位来指示芯片是否处于更新中期。1.1.2 对温度传感器DS18B20的读取及控制DS18B20温度传感器是美国DALLAS半导体公司推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据要求通过简单的编程实现912位的数字值读数方式。DS18B20温度转换的时间比较长,而且设定的分辨率越高,所需的温度转换时间就越长。因此在应用时要将分辨率和时间权衡考虑。斜率累加器用于补偿和修正测温过程中的非线型性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直到温度寄存器值达到被测温度值。另外,由于DS18B20单线通讯功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。1.1.3用74LS164控制显示显示电路采用74LS164来驱动数码管。74LS164内部为八个D触发器,用以实现数据的串行移位。单片机以串行口方式0(移位寄存器方式)输出数据,十六片74LS164作为十六个数码管的串并联换显示接口。74LS164作为TTL单向八位移位寄存器,可实现串行输入,并行输出。在给出了八个脉冲后,最先进入74LS164的第一个字节数据到达了高位。再来一个脉冲,第一个脉冲就会从最高位移出,进入下一个74LS164的第一位,十六片74LS164首尾相串,而时钟端则接在一起。这样,当输入八个脉冲时从单片机RXD端输出的第一字节数据就进入了第一片74LS164中,而当第二个八个脉冲到来后,第一字节数就进入了第二片74LS164,而随后的第二字节的数据则进入了第一片74LS164。这样当第十六个八个脉冲完成后首次送出的数据被送到了最下面的74LS164中,其它数据依次出现在第十五至第一片74LS164中,实现了数据在74LS164中的串行输入、输出。第2章 硬件电路设计2.1 系统硬件电路的设计系统的硬件电路主要由主控制器AT89S51,时钟芯片DS12C887,温度传感器DS18B20,串口显示电路,键扫描电路以及彩灯电路组成。电子万年历电路设计原理图见附录一。2.2 芯片介绍2.2.1 AT89S51性能介绍及其主要特性AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含4K bytes的可系统编程的Flash只读程序存储器。器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统和引脚。它集成Flash程序存储器即可在线编程(ISP)也可用传统方法进行编程及通用8为微处理器于单片芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可为你提供许多高性价比的应用场合,可灵活用于各个领域。主要特性如下:与MCS-51 产品指令系统完全兼容4K字节在线系统编程(ISP)Flash闪速存储器1000次擦写周期4.05.5V的工作电压全静态工作模式: 0Hz33MHz三级程序加密锁128*8字节内部RAM32可编程I/O线两个16位定时器/计数器5个中断源 全双工串行UART通道低功耗的闲置和掉电模式中断可丛空闲模式唤醒系统看门狗(WDT)及双数据指针掉电表示和快速编程特性灵活的在线系统编程(ISP字节或页写模式) 1、管脚说明AT89S51是40脚双列直插芯片。图2-1是其引脚图。其中:图2-1 AT89S51引脚图 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下所示: P3口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。2、振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。3、芯片擦除整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。2.2.2 DS12C887性能介绍1、器件及其性能介绍DS12C887实时时钟芯片功能丰富,可以用来直接代替IBM PC上的时钟日历芯片DS12887,同时,它的管脚也和MC146818B、DS12887相兼容。由于DS12C887能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部又增加了世纪寄存器,从而利用硬件电路解决子“千年”问题; DS12C887中自带有锂电池,外部掉电时,其内部时间信息还能够保持10年之久;对于一天内的时间记录,有12小时制和24小时制两种模式。在12小时制模式中,用AM和PM区分上午和下午;时间的表示方法也有两种,一种用二进制数表示,一种是用BCD码表示;DS12C887中带有128字节 RAM,其中有11字节RAM用来存储时间信息,4字节RAM用来存储DS12C887的控制信息,称为控制寄存器,113字节通用RAM供用户使用;此外用户还可对DS12C887进行编程以实现多种方波输出,并可对其内部的三路中断通过软件进行屏蔽。其主要性能如下:(1)具备完备的时钟,闹钟及到2100年的日历功能,可选择的12小时制或24小时制计时,有AM和PM、星期、夏令时间操作及闰年自动补偿的功能。(2)具有可编程选择的周期性中断方式和多频率输出的方波发生器功能。(3)DS122887内部有14个时钟控制寄存器,包括10个时标寄存器,4个状态寄存器和114字节作掉电保护用的低功耗RAM。(4)由于该芯片具有多种周期中断速率及时钟中断功能,因此可以满足各种不同的待机要求,最长可达24小时,使用非常方便。(5)时标可选择二进制或BCD码表示。(6)工作电压:+4.5+5.5v(7)工作电流:715mA(8)工作温度范围:0+70度2、引脚功能DS12C887的引脚排列如图2-2所示,各管脚的功能说明如下GND、 VCC:直流电源,其中VCC接+5V输入,GND接地,当VCC输入为+5V时,用户可以访问DS12C887内RAM中的数据,并可对其进行读、写操作;当VCC的输入小于+4.25V时,禁止用户对内部RAM进行读、写操作,此时用户不能正确获取芯片内的时间信息;当VCC的输入小于+3V时, DS12C887会自动将电源发换到内部自带的锂电池上,以保证内部的电路能够正常工作。(1) MOT:模式选择脚,DA12C887有两种工作模式,即Motorola模式和Intel模式,当MOT接VCC时,选用的工作模式是Motorola模式,当MOT接GND时,选用的是Intel模式。本文主要讨论Intel模式。(2) SQWF:方波输出脚,当供电电压VCC大于4.25V时,SQW脚可进行方波输出,此时用户可以通过对控制寄存器编程来得到13种方波信号的输出。 (3) AD0AD7:复用地址数据总线,该总线采用时分复用技术,由ALE的下降沿锁存8位地址。在总线周期的前半部分,出现在AD0AD7上的是地址信息,可用以选通DS12C887内的RAM,总线周期的后半部分出现在AD0AD7上的数据信息。(4) CS:地址选通输入脚,低电平有效,在进行读写操作时,CS的上升沿将AD0AD7上出现的地址信息锁存到DS12C887上,而下一个下降沿清除AD0AD7上的地址信息,不论是否有效,DS12C887都将执行该操作。 (5) DS/RD:数据选择或读输入脚,低电平有效,该引脚有两种工作模式,当MOT接VCC时,选用Motorola工作模式,在这种工作模式中,每个总线周期的后一部分的DS为高电平,被称为数据选通。在读操作中,DS的上升沿使DS12C887将内部数据送往总线AD0AD7上,以供外部读取。在写操作中,DS的下降沿将使总线 AD0AD7上的数据锁存在DS12C887中;当MOT接GND时,选用Intel工作模式,在该模式中,该引脚是读允许输入脚,即Read Enable。(6) R/W:读/写输入端,该管脚也有2种工作模式,当MOT接VCC时,R/W工作在Motorola模式。此时,该引脚的作用是区分进行的是读操作还是写操作,当R/W为高电平时为读操作,R/W为低电平时为写操作;当MOT接GND时,该脚工作在Intle模式,此时该作为写允许输入,即Write Enable。CS:片选输入,低电平有效。(7) IRQ:中断请求输入,低电平有效,该脚有效对DS12C887内的时钟、日历和RAM中的内容没有任何影响,仅对内部的控制寄存器有影响,在典型的应用中,RESET可以直接接VCC,这样可以保证DS12C887在掉电时,其内部控制寄存器不 受影响。 图2-2 DS12C887的引脚图(8) ALE:地址锁存信号端。(9) RESET:复位端,低电平复位。 (10) NC:空脚。 3、使用说明CPU通过读DS12887的内部时标寄存器得到当前的时间和日历,也可通过选择二进制码或BCD码初始化的确10个时标寄存器。其中114字节的非易失性静态RAM可供用户使用,对于没有RAM的单片机应用系统,可在主机掉电时来保存一些重要的数据。DS12887的4个状态寄存器用来控制和指出DS12887模块当前的工作状态,除数据更新周期外,程序可随时读写4个寄存器。下面介绍各寄存器的功能和作用。(1) DS12887内部RAM各专用寄存器的功能表2-1是DS12887内部RAM和各专用寄存器分配表。其中,地址00H03H的取值范围是00H3BH(十进制059);04H05H单元按12小时制的取值范围是上午(AM)01H0CH(112),午(PM)81H8CH(8192),按24小时制的取值范围是00H17H(123);06H单元的取值范围是00H07H(07);07H单元的取值范围是01H1FH(131);08H单元的取值范围是01H0CH(112);09H单元的取值范围是00H63H(099)。对DS12887内部RAM和各专用寄存器的访问可如下实现:若片选线地址CS=#0C000H,则芯片内部RAM和寄存器的地址为#C000H#0C07FH。应指出,仅管DS12887的专用时标年寄存器只有一个,但通过软件编程可利用其内部的不掉电RAM区的一个字节实现年度的高两位显示。DS12887可跨2000年的计时。地址单元00H01H02H03H04H05H06H07H08H09H0AH0BH0CH0DH用途秒秒闹钟分分闹钟时时闹钟星期日月年寄存器A寄存器B寄存器C寄存器D表2-1 DS12887内部RAM和各专用寄存器分配表UIP:更新周期标志位。该位为1时,表示芯片正处于或即将开始更新周期,此时不准读/写时标寄存器;该位为0时,表于至少在于244us后开始更新周期,此时,程序可以读芯片内时标寄存器,该位是只读位。 DV0,DV1,DV2:芯片内部振荡器RTC控制位。当芯片解除复位状态,并将010写入DV0,DV1,DV2后,另一个更新周期将在500ms开始。因此,在程序初始化时可用这3位精确地使芯片在设定的时间开始工作。DS12887固定使用32768HZ的内部晶体。所以,DV0=0,DV1=1,DV2=0,即只有010的一种组合选择即可启动RTC。RS3,RS2,RS1,RS0:周期中断可编程方波输出速率选择位。对这些位进行不同的组合可以产生不同的输出,程序可以通过设置寄存器B的SQWF的PIE位控制是否允许周期中断和方波输出。寄存器A输出速率选择见表2-2。(2)各寄存器的作用a. 寄存器A寄存器A各位不受复位的影响,各位的格式见表2-2。其中:位7位6位5位4位3位2位1位0以32768HZ为时基速率输出UIPDV2DV1DV0RS3RS2RS1RS0中断周期SQWF输出0000无无0001390625ms256HZ001078125ms128HZ00110.12207ms8192KHZ01000.244141ms4096KHZ01010.488281ms7048KHZ01100.976563ms1024KHZ01111.953ms512HZ1000390625ms25HZ10017.812125ms128HZ101015.625ms64HZ101131.25ms32HZ110062.5ms16HZ1101125ms8HZ1110250ms4HZ1111500ms2HZ表2-2 寄存器A各位格式b. 寄存器B寄存器B允许读/写,主要用于控制芯片的工状态。寄存器的控制字的格式见表2-3。其中:SET:当该位为0时,芯片处于正常状态,每秒产生一个更新周期来更新时标寄存器;该位为1时,芯片停止工作,程序在此期间可初始化芯片的各个时标寄存器。如表2-3:PLE,ALE,UIE:分别为周期中断,报警中断,更新周期结束中断允许位各位为1时,允许芯片发相应中断。SQWF:方波输出允许位。SQWF=1,按寄存器A输出速率选择位所确定的频率方波;SQWF=0,脚SQWF保持低电平。DM:时标寄存器用十进制BCD码表示或用二进制表示格式选择位。DM=0时,为十进制BCD码;DM=1时,为二进制码。24/12:24/12小时模式设置位。24/12=1时,为24小时工作模式;24/12=0时,为12小时工作模式。DSE:夏令时服务位。DSE=1时,夏令时制设置有效,夏令时制结束可自动刷新恢复时间;DSE=0,无效。位7位6位5位4位3位2位1位0寄存器SETPIEALEUIESQWFDM24/12DSE寄存器BIRQFPFAFUF0000寄存器CVRF0000000寄存器D表2-3 寄存器的控制格式c. 寄存器C该寄存器的特点是程序访问该寄存器后,该寄存器的内容将自动清0。从而使IRQF标志位变为高电平,否则芯片将无法向CPU申请下一次中断。寄存器C的控制字的格式见表2-3。IRQF:中断申请标志位。该位的逻辑表达式为:IRQF=PF*PIE+AF*ALE+UF*UIE。当IRQF位变为1时,引脚变为低电平引起中断申请。PF,AF,UF:P这3位分别为周期中断,报警中断更新周期结束中断标志位。只要满足各中断的条件,相应的中断标志位将置1。位3位0:未定义的保留位,读出值始终为0。d. 寄存器D寄存器D为只读寄存器。其控制字的格式见表2-3,其中:VRT:芯片,内部RAM与寄存器内容有效标志位,该位为1时,指芯片内容RAM和寄存器,内容有效。读写寄存器后,该位将自动置1。BIT6BIT0:保留位,读出的数值始终为0。(3)DS12887的中断和更新周期DS12887处于正常工作状态时,每秒产生一个更新周期。芯片处于更新周期的标志是寄存器A中的UIP位为1。在更新周期内芯片内部时标寄存器中的数据处于更新阶段。故在该周期内,微处理器不能读时标寄存器中的内容,否则将得不到确定数据。更新周期的基本功能主要是刷新各个时标寄存器中的内容,同时秒时标寄存器内容加1,并检查其它时标寄存器内容是否溢出,如有溢出则相应进位日,月,年。更新周期的另一个功能是检查3个时,分,秒报警时节标寄存器的内容是否与对应时标寄存器的内容相符。如果报警时标寄存器的内容为C0HFFH之间的数据,则为不关心状态。为了采样时标寄存器中的数据,器件提供了两种避开在更新周期内访问时标寄存器的方法。第一种是利用更新周期结束发出的中断。可以编程且允许在每次更新周期结束后发生中断请求,提醒CPU将E 998ms左右的时间去获取有效的数据在中断之后的998ms时间内,程序可先将时标数据读到芯片内部的不掉电静态RAM 中。因为芯片内部的静态RAM和状态寄存器是可随时读写的,在离开中断服务子程序前应消除寄存器C中的IRQF位。另一种方法是利用寄存器A中的UIP位来指示芯片是否处于更新周期。在UIP由低变高244us后芯片将开始更新周期。所以,若检测到UIP位为低电平时,则利用244us的间隔时间去读取时标信息,如检测到UIP为1,则可暂缓读数据,等到UIP位变成低电平后再去读数据。4、MCS51与DS12887的接口设计(1)DS12887的初始化DS12887采用连续工作制,一般无需每次都初始化,即使是系统复位时也如此。但初始化时,首先应禁止芯片内部的更新周期操作。所以应先将DS12887状态寄存器B中的SET位置1,然后初始化00H09H时标参数和状态寄存器A,此后再通过读状态寄存器C清除寄存器C中的周期中断标志位PF,报警中断标志位AF更新周期结束中断标志位UF,通过读寄存器D中的VRT位后将自动置1,最后,将状态寄存器B中的SET位置0,芯片开始计时工作。(2)闹钟单元的使用方法DS12887共有3个闹钟单元,分别为时,分,秒闹钟单元。在其中写入闹钟时间值并且在时钟中断允许的情况下,每天到该时该就会产生中断申请信号。但这种方式每天只提供一次中断信号。另一种方式是在闹钟单元中写入“不关心码”:在时闹钟单元写入C0HFFH之间的数据,可每小时产生一次中断;在时,分闹钟单元写入C0HFFH之间的数据,可每分钟产生一次中断;而时,分,秒闹钟单元全部写入FFH,则每秒产生一次中断。但这种方式也只能在整点,整分或每秒产生一次中断。若控制系统要求的定时间隔不是整数时,应该通过软件来调整实现。2.2.3 DS18B20单线数字温度计1、DS18B20性能特性(1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。(2)在使用中不需要任何外围元件。(3)可用数据线供电,电压范围:+3.0+5.5V。(4)测温范围:-55+125。固有测温分辨率为0.5。(5)通过编程可实现912位的数字读数方式。(6)用户可自设定非易失性的报警上下限值(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。DS18B20的内部结构 DS18B20采用3脚PR35封装或8脚SOIC封装,其内部结构框图如图2-3所 示。图2-3 DS18B20内部结构框图 (1)64 b闪速ROM的结构如下:8b检验CRC48b序列号8b工厂代码(10H) MSB LSB MSB LSB MSB LSB开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前56位的CRC校验码,这也是多个DS18B20可以采用一线进行通信的原因。 (2)非易市失性温度报警触发器TH和TL,可通过软件写入用户报警上下限。 (3)高速暂存存储器DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM。后者用于存储TH,TL值。数据先写入RAM,经校验后再传给E2RAM。而配置寄存器为高速暂存器中的第5个字节,他的内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如下: TMR1R011111低5位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动,R1和R0决定温度转换的精度位数,即是来设置分辨率,如表2-4所示(DS18B20出厂时被设置为12位)。由表2-4可见,设定的分辨率越高,所需要的温度数据转换时间就越长。因此在实际应用中要在分辨率和转换时间权衡考虑。R1R0分辨率温度最大转换时间009位93.750110位187.51011位275.001112位750.00 表2-4 R1和R0模式表高速暂存存储器除了配置寄存器外,还有其他8个字节组成,其分配如下所示。其中温度信息(第1,2字节)、TH和TL值第3,4字节、第68字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。最低温度温度高位THTL配置保留保留保留8位CRC LSB MSB 当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.0625/LSB形式表示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。表2-5是对应的一部分温度值。温度二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00010191H+10.1250000 0000 1010 001000A2H+0.50000 0000 0000 10000008H00000 0000 0000 00000000H-0.51111 1111 1111 1000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H 表2-5 DS18B20温度与测的值对应表DS18B20完成温度转换后,就把测得的温度值与TH,TL作比较,若TTH或TTL,则将该器件内的告警标志置位,并对主机发出的告警搜索命令作出响应,因此可用多只DS18B20同时测量温度并进行告警搜索。(4)CRC的产生在64bROM的最高有效字节中存储有循环冗余校验码(CRC)。主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确。3、DS18B20的测温原理DS18B20的测温原理如图2-4所示,图中低温度系数晶振的振荡频率受温度的影响很小1,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2-4中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。 斜率累加器计数比较器预置预置减法计数器低温度系数振荡器温度寄存器减到0 减到0减法计数器2高温度系数振荡器图2-4 DS18B20内部测温电路框图 另外,由于DS18B20单线通信功能是分时完成的,有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。4、DS18B20与单片机的典型接口设计 以MCS51单片机为例,图2-5中采用寄生电源供电方式,P1.1口接单线总线为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管和89C51的P1.0来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大为10s。采用寄生电源供电方式是VDD和GND端均接地。由于单线制只有一根线,因此发送接收口必须是三态的。主机控制DS18B20完成温度转换必须经过3个步骤:初始化、ROM操作指令、存储器操作指令。假设单片机系统所用的晶振频率为12MHz,根据DS18B20的初始化时序、写时序和读时序,分别编写3个子程序:INIT为初始化子程序,WRITE为写(命令或数据)子程序,READ为读数据子程序,所有的数据读写均由最低位开始,实际在实验中不用这种方式,只要在数据线上加一个上拉电阻4.7k,另外2个脚分别接电源和地。图2-5 DS18B20采用电源供电的电路图5、DS18B20的精确延时问题 虽然DS18B20有诸多优点,但使用起来并非易事,由于采用单总线数据传输方式,DS18B20的数据I/O均由同一条线完成。因此,对读写的操作时序要求严格。为保证DS18B20的严格I/O时序,需要做较精确的延时。在DS18B20操作中,用到的延时有15 us,90 us,270 us,40us等。因这些延时均为15 us的整数倍,因此可编写一个DELAY15(n)函数,源码如下: Void delay15(n)Unsigned char n: do -nop-( ):/01-nop-( ):/12 n-while(n)只要用该函数进行大约15 us 的延时即可。有了比较精确的延时保证,就可以对DS18B20进行读写操作、温度转换及显示等操作。2.2.4 显示电路的设计显示部分采用普通的共阳数码管显示,采用动态扫描,以减少硬件电路。考虑到一次扫描十六个数码管分三排同时扫描。第一排七个数码管分别表示十年、年、十月、月、十日、日和星期。第二排六个数码管分别为十时、时、十分、分、十秒和秒。第三排三个数码管分别表示百度、十度和度。显示时采用串行口输出段码,用十六片74LS164来驱动十六个数码管,这样扫描一次所需的时间极短。74LS164内部为八个D触发器,用以实现数据的串行移位,74LS164特性见表2-6。操作模式输入输出复位 MRABQ0Q1Q7移位LLQ0Q6HLLLQ0Q6HLHLQ0Q6HHLLQ0Q6HHHHQ0Q6 表2-6 74LS164特征表单片机以串行口方式0(移位寄存器方式)输出数据,十六片74LS164作为十六个数码管的串并联换显示接口。74LS164作为TTL单向八位移位寄存器,可实现串行输入,并行输出。其中A、B为串行数据输入端。两个引脚按逻辑“5”运算规律输入信号,共一个输入信号时可并接,共同作为输入脚。CP为时钟输入端可连接到行口的TXD端。每一个时钟信号的上升沿加到CP端时移位寄存器移一位。八个时钟脉冲过后,八位二进制数全部移入74LS164中。MR脚为复位端,当该脚为低电位时移位寄存器各位复0;只有当它为高电平时,时钟脉冲才起作用。Q1Q8并行输出端分别接数码管的ha各段对应的引脚上。在给出了八个脉冲后,最先进入74LS164的第一个字节数据到达了高位。再来一个脉冲,第一个脉冲就会从最高位移出,进入下一个74LS164的第一位,十六片74LS164首尾相串,而时钟端则接在一起。这样,当输入八个脉冲时从单片机RXD端输出的第一字节数据就进入了第一片74LS164中,而当第二个八个脉冲到来后,第一字节数就进入了第二片74LS164,而随后的第二字节的数据则进入了第一片74LS164。这样当第十六个八个脉冲完成后首次送出的数据被送到了最下面的164中,其它数据依次出现在第十五至第一片74LS164中,实现了数据在74LS164中的串行输入、输出。在方式0状态下,串行口为同步移位寄存器方式,其波特率是固定的,为fosc/12。数据由RXD(P3.0)端输入或输出。同步移位脉冲由TXD(P3.1)端输出。发送、接受数据时低位在先。所以根据硬件原理图,在编写程序时,查共阳数码管的段码的二进制数据应该将正常的共阳数码管09的二进制按位反序排列,如原来的二进制为11000000(C0H),要改为00000011(03H),就能使数码管正常显示。2.2.5 键盘接口的设计 由于键盘只有五个按键,只需用普通按钮接10k上拉电阻,用查询法完成读键功能。五个按键同电阻串联,一端接与单片机I/O上,一端接地。当一按键按下时相应I/O变为底电平,单片机检测到低电平便做出相应的调整。2.2.6 彩灯电路 考虑到单片I/O接口有限,彩灯电路采用三个I/O口控制。发光二极管每三个一组,每一组中的第一个、第二个、第三个的阴极分别在一起,然后分别接三个I/O口,阳极全部接在电源上。这样不仅达到彩灯的效果,同时节省了单片机I/O口。 当P2.0口置0时,第一组灯LED11、LED12LED1n亮;当P2.1口置0时,第二组灯LED21、LED22LED2n亮;当P2.2口置0时,第三组灯LED11、LED12LED1n亮。这样让三个口轮流置0或随其他顺序置0都可实现彩灯功能。第3章 软件系统设计3.1 主程序设计主程序主要是对各种数据的初始化,包括对DS12C887以及DS18B20的数据初始化。主程序流程图如图3-1所示。 开始 数据初始化 DS12C887初始化 读温度子程序读温度是否开启 显示子程序 键盘扫描子程序显示是否开启键盘扫描是否开启YNY NYN 返回图3-1 主程序流程图3.2 阳历程序设计因为使用时钟芯片DS12887,阳历程序只需从DS12887各寄存器中读出年,月,日,时,分,秒等数据,再进行处理,然后调用显示即可。在首次对DS12887进行操作之前必须对它进行初始化,然后DS12887中读出数据,再经处理后送给显示缓冲单元。阳历程序流程图见图3-2。3.3 读出温度子程序设计读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图见图3-3。发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验移入温度暂存器 结束9字节是否亮CRC校验正确读出的数据高位分离,送显示缓存 开始初始化DS12C887DS12C887开始工作从DS12C887中读出年,月,日。星期,时,分,秒 开始初始化DS12C887DS12C887开始工作从DS12C887中读出年,月,日。星期,时,分,秒NN图3-2 阳历程序流程图 图3-3 温度子程序流程图3.4 显示子程序设计显示程序主要是对显示缓存接收的数据进行处理,然后通过串行口输出、显示。显示子程序流程图如图3-4所示。开始 读显示缓存数据 转换处理 送显示 返回图3-4 显示子程序流程图3.5 时间调整子程序调整时间用5个调整按钮,1个作为选通控制用,另外4个作为加,减,左移,右移使用,分别定义为控制按钮,加按钮,减按钮,左移按钮,右移按钮。在调整时间过程中要调整的位与别的位应该有区别。所以增加了闪烁功能即调整的位一直在闪烁,直到调整下一位。闪烁原理就是:让调整的一位每隔一定时间熄灭一次。比如说50ms。利用定时器设计时当达到50ms溢出时,就送给该位熄灭符,在下一次溢出时再送正常显示的值,不断交替直到调整该位结束。此时送正常显示值给该位,再进入下一位调整闪烁程序。时间调整子程序流程图见图3-5。图3-5时间调整子程序图3.6、控制源程序设计34ORG 0000HSTART: MOV SP,#30H MOV P1,#0FFH MOV 31H,#00H MOV 32H,#00H MOV 33H,#00H MO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论