收藏 分销(赏)

DS18B20重要.doc

上传人:xrp****65 文档编号:7711806 上传时间:2025-01-13 格式:DOC 页数:45 大小:312.50KB 下载积分:10 金币
下载 相关 举报
DS18B20重要.doc_第1页
第1页 / 共45页
DS18B20重要.doc_第2页
第2页 / 共45页


点击查看更多>>
资源描述
第 45 页 共 45 页 引言 随着“信息时代”的到来,作为获取信息的手段——传感器技术得到了显著的进步,其应用领域越来越广泛,对其要求越来越高,需求越来越迫切。传感器技术已成为衡量一个国家科学技术发展水平的重要标志之一。因此,了解并掌握传感器的基本结构、工作原理及特性是非常重要的。 为了提高对传感器的认识和了解,尤其是对温度传感器的深入研究以及其用法与用途,基于实用、广泛和典型的原则而设计了本系统。本文利用单片机结合传感器技术而开发设计了红外抄表系统。文中把传感器理论与单片机实际应用有机结合,详细地讲述了利用温度传感器DS18B20测量环境温度,以及实现红外数据传输的过程。 本设计应用性比较强,只要对电路部分稍加改装,就可以实现抄读其它的数字仪表设备:如数字电度表,数字水表等等。设计后的系统具有操作方便,控制灵活等优点。 其主要功能和指标如下: 1、利用温度传感器(DS18B20)测量某一点环境温度; 2、测量范围为-55℃~+99℃,精度为±0.5℃; 3、用4位数码管进行显示实际温度值显示; 4、手持端通过红外发射管发射测温信号; 5、测温端通过红外发射管发送到手持端; 6、手持端可以随时查看指定待测物体的温度值。 设计的核心是环境温度的测量以及红外数据的发射和接收,和温度的显示。文中对每个部分功能、实现过程作了详细地介绍。 1 方案选择 该系统主要由温度测量和数据采集和发送三部分组成。下面列举两种实现方案: 方案一:温度检测可以使用低温热偶或铂电阻,数据采集部分则使用带有A/D通道的单片机。考虑到一般的A/D输入通道都只能接收大信号,所以还要设计相应的放大电路。而模拟信号在长距离传输过程中,抗电磁干扰是令人伤脑筋的问题。此方案的软件简单,但硬件复杂,且检测点数追加时,各敏感元件参数的不一致性,都将会导致误差的产生,难以完全清除,而且成本会有较大增长幅度。 方案二:使用单片机和数字式单总线温度传感器构成。其具有下列特点:①具有高的测量精度和分辨率,测量范围大;②抗干扰能力强,稳定性好;③信号易于处理、传送和自动控制;④便于动态及多路测量,读数直观;⑤安装方便,维护简单,工作可靠性高。单总线温度传感器可以采用DALLAS公司生产的DS18B20系列,这类温度传感器直接输出数字信号,且多路温度传感器可以挂在1条总线上,共同占用单片机的1个I/O口即可实现。在提升单片机I/O口驱动能力的前提下,理论上可以任意扩充检测的温度点数。 比较两个方案后可以发现,方案二更适合于用作本系统的实施方案。尽管方案二不需要A/D,但考虑到系统扩充等因素,单片机可以选用AT98C2051。 2 硬件部分 采用方案二的硬件设计比较简单,系统构成如图1所示。 数码管 红外发射 AT89C51 DS18B20 红外接收 红外发射 数码管 AT89C51 图 1温度测试系统和手持接收系统组成框图 2.1 DS18B20介绍 DA 按键 LLAS公司的DS18B20单总线数字传感器工作温度 红外接收 范围是-55℃~125℃,在-30℃~85℃范围内温度测量精度为±0.5℃;具有温度报警功能,用户可设置最高和最低报警温度,且设置值掉电不丢失;采用DALLAS公司特有的单总线通信协议,只用一条数据线就可实现与MCU的通信;此外,DS18B20能够直接从数据线获得电源,无需外部电池供电。 DS18B20通过使用在板(on_board)温度测量专利技术来测量温度。其温度测量电路是通过计数时钟周期来实现的,DS18B20有两个温度系数振荡器,温度测量时对高温度系数振荡器产生的门开同期内,低温度系数振荡器经历的时钟周期的个数进行计数而得到的。 DS18B20数字温度传感器提供9位(二进制)温度读数,指示器件温度,所以无需A/D转换。信息经过单线接口送入DS18B20 或从DS18B20送出,因此从主机CPU到DS18B20仅需一条线连接,而且DS18B20的电源可由数据线本身提供(相对于外部电源,转换时间要延长)。因此每一个DS18B20在出厂时已经给定了唯一的序号因此从理论上说任意多个DS18B20可以连接在一条单线总线上。DS18B20的测量范围从-55℃到+125℃,增量为0.5℃(最高精度可达0.1℃),转换速度小于1s(典型值)。 AT89C51 DS18B20 而在本遥测系统中采用外部电源供电温度测量工作方式,其中电阻R是上拉电阻,使得单线总线的空闲状态是高电平。它与CPU(AT89C51)的接法如图2。 5 V R 地 图 2 DS18B20与单片机的连接 由于DS18B20只有一根数据线。因此它和主机(单片机)通信是需要串行通信,而AT89C51有两个串行端口,所以可以不用软件来模拟实现。经过单线接口访问DC18B20必须遵循如下协议:初始化、ROM操作命令、存储器操作命令和控制操作。要使传感器工作,一切处理均从序列开始。 主机发送(Tx)--复位脉冲(最短为480μs的低电平信号)。接着主机便释放此线并进入接收方式(Rx)。总线经过4.7K的上拉电阻被拉至高电平状态。在检测到I/O引脚上的上升沿之后,DS18B20等待15-60μs,并且接着发送脉冲(60-240μs的低电平信号)。然后以存在复位脉冲表示DS18B20已经准备好发送或接收,然后给出正确的ROM命令和存储操作命令的数据。DS18B20通过使用时间片来读出和写入数据,时间片用于处理数据位和进行何种指定操作的命令。它有写时间片和读时间片两种。 写时间片:当主机把数据线从逻辑高电平拉至逻辑低电平时,产生写时间片。有两种类型的写时间片:写1时间片和写0时间片。所有时间片必须有60微秒的持续期,在各写周期之间必须有最短为1微秒的恢复时间。 读时间片:从DS18B20读数据时,使用读时间片。当主机把数据线从逻辑高电平拉至逻辑低电平时产生读时间片。数据线在逻辑低电平必须保持至少1微秒;来自DS18B20的输出数据在时间下降沿之后的15微秒内有效。为了读出从读时间片开始算起15微秒的状态,主机必须停止把引脚驱动拉至低电平。在时间片结束时,I/O引脚经过外部的上拉电阻拉回高电平,所有读时间片的最短持续期为60微秒,包括两个读周期间至少1μs的恢复时间。 一旦主机检测到DS18B20的存在,它便可以发送一个器件ROM操作命令。所有ROM操作命令均为8位长。 DS18B20的引脚定义和封装形式如图3所示。DQ为数字信号输入/输出端;GND为电源地;VDD为外接电源。 DS18B20的光刻ROM中存有64位序列号,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20拥有惟一的地址序列码,以确保在一根总线上挂接多个DS18B20。 所有的串行通讯,读写每一个bit位数据都必须严格遵守器件的时序逻辑来编程,同时还必须遵守总线命令序列,对单总线的DS18B20芯片来说,访问每个器件都要遵守下列命令序列:首先是初始化;其次执行ROM命令;最后就是执行功能命令(ROM命令和功能命令后面以表格形式给出)。    如果出现序列混乱,则单总线器件不会响应主机。当然,搜索ROM命令和报警搜索命令,在执行两者中任何一条命令之后,要返回初始化。    基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道,总线上有从机,且准备就绪。 在主机检测到应答脉冲后,就可以发出ROM命令。这些命令与各个从机设备的唯一64 位ROM代码相关。在主机发出ROM命令,以访问某个指定的DS18B20,接着就可以发出DS18B20支持的某个功能命令。这些命令允许主机写入或读出DS18B20便笺式RAM、启动温度转换。软件实现DS18B20的工作严格遵守单总线协议: (1)主机首先发出一个复位脉冲,信号线上的DS18B20器件被复位。 (2)接着主机发送ROM命令,程序开始读取单个在线的芯片ROM编码并保存在单片机数据存储器中,把用到的DS18B20的ROM编码离线读出,最后用一个二维数组保存ROM编码,数据保存在X25043中。 (3)系统工作时,把读取了编码的DS18B20挂在总线上。发温度转换命令,再总线复位。 (4)然后就可以从刚才的二维数组匹配在线的温度传感器,随后发温度读取命令就可以获得对应的温度值了。 在主机初始化过程,主机通过拉低单总线至少480us,来产生复位脉冲。接着,主机释放总线,并进入接收模式。当总线被释放后,上拉电阻将单总线拉高。在单总线器件检测到上升沿后,延时15~60us,接着通过拉低总线60-240us,以产生应答脉冲。 写时序均起始于主机拉低总线,产生写1时序的方式:主机在拉低总线后,接着必须在15us之内释放总线。产生写0时序的方式:在主机拉低总线后,只需在整个时序期间保持低电平即可(至少60us)。 在写字节程序中的写一个bit位的时候,没有按照通常的分别写0时序和写1时序,而是把两者结合起来,当主机拉低总线后在15us之内将要写的位c给DO:如果c是高电平满足15us内释放总线的要求,如果c是低电平,则DO =c这条语句仍然是把总线拉在低电平,最后都通过延时58us完成一个写时序(写时序0或写时序1)过程。 每个读时隙都由主机发起,至少拉低总线1us,在主机发起读时序之后,单总线器件才开始在总线上发送0或1。所有读时序至少需要60us。 单片机通过命令实现对DS18B20的控制,其支持的主要命令如表1所示。 表 1 DS18B20主要命令及其功能说明 命令码 功能说明 命令码 功能说明 33H 读ROM中的64位地址序列码 BEH 读9字节暂存寄存器 55H 只有地址码匹配的DS18B2才能接收后续的命令 4EH 写入温度上/下限,紧随其后是2字节数据,对应上限和下限值 F0H 锁定总线上DS18B20的个数和识别其ROM中的64位地址序列码 48H 将9字节暂存寄存器的第3和4字节复制到EEPROM中 ECH 只有温度超过上限或下限的DS18B20才做出响应 B8H 将EEPROM的内容恢复到暂存寄存器的第3和4字节 44H 启动DS18B20进行温度转换,结果存入9字节的暂存寄存器 B4H 读供电模式,寄生供电时DS18B20发送0,外接电源时DS18B20发送1 CCH 忽略地址序列码,适合单片DS18B20 2.2 单片机的选择 (1)AT89C51的特性及引脚说明 ①主要特性 ·与MCS-51 兼容 ·4K字节可编程闪烁存储器 ·寿命:1000写/擦循环 ·数据保留时间:10年 ·全静态工作:0Hz-24Hz ·三级程序存储器锁定 ·128*8位内部RAM ·32可编程I/O线 ·两个16位定时器/计数器 ·5个中断源 ·可编程串行通道 ·低功耗的闲置和掉电模式 ·片内振荡器和时钟电路 AT89C51的引脚功能,图4所示: 图 4 AT89C51的引脚功能图 ②管脚说明 —VCC:供电电压。 —GND:接地。 —P0口:P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。当P1口的管脚写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部电位必须被拉高。 —P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。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.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 (外部中断0) P3.3 (外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 (外部数据存储器写选通) P3.7 (外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 —RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 —:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令时ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 —:外部程序存储器的选通信号。在由外部程序存储器取址期间,每个机器周期两次有效。但在访问外部数据存储器时,这两次有效的信号将不出现。 —:当保持低电平时,访问外部ROM;注意加密方式1时,将内部锁定为RESET;当端保持高电平时,访问内部ROM。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 —XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 —XTAL2:来自反向振荡器的输出。 ③内部结构框图如图5所示。 图5 AT89C51的内部结构框图 (2)AT89C51的基本操作 如图6所示,在X1和X2之间接一只石英振荡晶体构成了单片机的时钟电路,它还有另一种接法,是把外部振荡器的信号直接连接到XTAL1端,XTAL2端悬空不用。 AT89C51复位引脚RST/VP通过片内一个施密特触发器(抑制噪声作用)与片内复位电路相连,施密特触发器的输出在每一个机器周期由复位电路采样一次。当振荡电路工作,并且在RST引脚上加一个至少保持2个机器周期的高电平时,就能使AT89C51完成一次复位。 复位不影响RAM的内容。 复位后,PC指向0000H单元,使单片机从起始地址0000H单元开始重新执行程序。所以,当单片机运行出错或进入死循环时,可按复位键重新启动。 MCS-51单片机通常采用上电自动复位和按钮复位两种复位方式。上电复位利用电容器充电来实现。按钮复位又分为按钮电平复位和按钮脉冲复位。前者将复位端通过电阻与Vcc相接;后者利用RC微分电路产生正脉冲来达到复位目的。复位电路参数的选择应能保证复位高电平持续时间大于2个机器周期。本系统采用的是按键脉冲复位,具体电路和原理将在下面的章节介绍。 图 6 AT89C51基本操作电路 振荡器特性: XTAL1、XTAL2为片内振荡器的反相放大器的输入和输出端。可采用石英晶体或陶瓷振荡器组成时钟振荡器,如需从外部输入时钟AT89C51,时钟信号从XTAL1输入,XTAL2应悬空。由于输入到内部电路是经过一个2分频触发器,所以输入的外部时钟信号无需特殊要求,但它必须符合电平的最大和最小值及时序规范。 2.3 其它元器件的选择 除了测温芯片DS18B20以及单片机AT89C51以外,在电源输入部分还选用了L7805CV稳压芯片和滤波电容,以及用于红外部分的4011四与非门逻辑芯片,当然还有红外发射和接收管,这里接收管采用TO-92三脚封装的一体化接收头,显示不分采用了12PIN的数码管LDS-5461AH,总共可以显示四位数据和小数点,其位选部分使用了NPN三极管来进行位扫描。具体功能及细节详见电路原理部分。 2.4 电路设计 由于是基于单片机实现,硬件电路就相对简单很多,只需要设计一下电源稳压电路、键盘电路、显示电路、测温电路、红外发射和接收电路以及它们与单片机的连接即可。 (1)单片机工作部分 由图6已知AT89C51的基本操作电路。但其中的一些参数还得依据具体要求来设计。具体接几兆晶体是基于机器周期考虑。一个机器周期由6个状态(S1-S6)组成,每个状态又持续两个振荡周期(分为P1和P2)。这样,一个机器周期由12个振荡周期组成,由S1P1(状态1节拍1)到S6P2(状态6节拍2)。若是采用12MHz的晶体振荡器,则每个周期恰好为1us,如此对于编程而言相对容易些。因而选择12MHz的晶体振荡器。 此外在两引脚之间加入一个20pF的小电容是为了使系统更稳定,避免杂音干扰而关机。 (2)电源部分 如图7所示,电源接入采用5V的直流电对整个系统供电,使用了L7805CV芯片来对输入电压进行稳压,在芯片旁边设计了三个电容,它们的目的是虑除外界对电路的干扰,使电路得到一个稳定线性的直流电压。为了确认电路进入工作状态,还在设计时加入了一个发光二极管,用于显示电源是否正常工作,如果电路处于接电状态,二极管就会导通而发光。 图 7 电源接入部分 (3)显示部分的设计 由LED组成的7段发光管显示器是不太复杂的单片机应用系统常用外部设备之一,在这里我们就选用一个4数码管一体化来显示温度值,当测得的温度是大于零时(正温度)显示两位整数和两位小数,当温度是小于零时(零下)第一位自动显示“-”号,后三位显示两位整数和一位小数。 ①7段发光管显示器由7段发光线段组成,并按“日”字形排列,每一段都是一个发光二极管,如图8所示。图中将7个LED的阴极连在一起,称之为共阴极接法。反之为共阳极接法。 ②如果将公共阴极接地,而在a~g各段的阳极加上不同的电压,就会使各段的发光情况不同,形成不同的发光字符。加在7段阳极上的电压可以用数字量表示,如果某一段的阳极为数字量1,则这个段就发光;如为0,则不发光。数字量与段的对应关系如表2所示。 表2 七段LED字形码 显示字符 共阳极 字符码 共阴极 字符码 0 3FH C0H 1 06H F9H 2 5BH A4H 3 4FH B0H 4 66H 99H 5 6DH 92H 6 7DH 82H 7 07H F8H 8 7FH 80H 9 6FH 90H 图 8 七段结构及外形图 在这次电子日历时钟的设计中使用了四个7段LED显示器,而多位显示器连用有两种方法。 其一,每一位都用各自的8位输出口控制,在显示某字符时,相应的段恒定发光或不发光。这种显示方法属于静态显示。显然,静态显示需占用较多的I/O口线。 其二,是动态显示。即将多个7段LED的段选端复接在一起,只用一个8位输出口控制段选,段选码同时加到各个7段LED显示器上,通过控制各个显示器公共阳极轮流接高电平的办法,逐一轮流地启动各个LED。在这种方法中,只要恰当地选择点亮时间和间隔时间,就会给人以这样一种假相:似乎各位LED是“同时”显示的。动态显示法是目前各种单片机采用的流行方法。其优点是硬件简单,“动态”由软件实现。因而我选用动态显示的方法。 (4)LED驱动电路的设计 LED是电流控制的显示器件,若想使LED发光则必须保证有足够大的电流流过LED的各段。流过LED的电流大时,LED发光亮度高;流过LED的电流小时,LED发光亮度就低,为了使LED 能够长期可靠地工作应使流过LED的电流为其额定电流。为LED显示器提供电流的电路称为LED的驱动电路。由于显示部分选择了动态显示,因此驱动电路也选择动态驱动。 动态显示电路的驱动电路分为段驱动电路和位驱动电路两种。段驱动电路考虑到所有的段电流均流过位选线,因此位驱动电路的驱动能力应为段驱动能力的8倍(最严重情况八段全亮)。 图9为动态显示时的驱动电路原理图,图中采用了达林顿复合驱动电路。 驱动电路可采用分立元件电路,也可采用集成驱动电路,此外有些硬件译码电路本身包括驱动电路。由于这里采用动态输出,且单片机的内部结构决定了数码管可以直接由单片机驱动。因此采用分立元件的显示驱动电路也很简单,如图10所示。 限流电阻 段码a~g 段驱动电路 位选线 位驱动电路 图 9 动态驱动电路 图 10 位选控制电路 具体显示部分电路如图11所示。它是4位LED动态显示接口电路。LED显示器为共阳极,字段线并联,共用AT89C51的P0口(输出字段码),每位LED的公共端由89C51的P2口控制,即由P2口输出位码,经过开关三极管控制位选。显然图中各显示位不可能同时显示不同的数字或符号,只有采用动态的方法轮流使每位显示器显示,并保留一段时间,通常保留时间为10ms。由于LED具有余辉性以及人眼视觉的惰性,虽然每位显示器的显示是分时段性,但只要适当选取扫描频率,人眼的视觉就是连续的。 图 11 四位动态LED显示器接口电路 (5)键盘电路的设计 这里设计键盘的功能是清零,启动和单片机复位键,所以手持端只需三个键测温端只需一个键即可完成。 单片机系统所用的键盘有编码键盘和非编码键盘两种。 ①编码键盘本身除了按键之外,还包括产生键码的硬件电路。只要按下编码键盘的某一个键,它就能产生这个键的代码,并称为键码,与此同时还产生一个脉冲信号,以通知CPU接收键码,编码键盘的优点是使用比较方便,亦不需要编写太复杂的程序。其缺点是使用的硬件较复杂。 ②非编码键盘的按键是排列成行、列矩阵形式的。按键的作用只是简单地实现接点的接通或断开,因此必须有一套相应的程序与之配合,才能产生相应的键码,非编码键盘几乎不需要附加什么硬件电路。因此为了简洁电路,我使用非编码键盘。但使用非编码键盘需要通过软件来解决按键的识别、防抖动以及如何产生键码的问题。 基于键数少的原因我采用独立式键盘接口与单片机相连接,因为它占用的I/O口不多。图中每个按键占用一个口,彼此独立,互不影响。上拉电阻保证按键没被按下时,I/O口输入高电平。 独立式键盘可工作在查询方式下,通过I/O口读入键状态,当有键被按下时I/O口变为低电平,而未被按下的键对应为高电平,这样通过读电平状态可判断是否有键按下和哪个键被按下。 (6)红外发射与接收 利用单片机异步通讯口,用红外光发射管和一体化接收管来实现接收和发送点信号的功能。通讯距离约3-10米,异步通讯波特率1200。 图 12 红外发射和接收电路 电路原理:红外发送电路由4011MOS与非门和38KHz振荡器组成,串口发送控制门电路和红外光发射管驱动输出电路组成。单片机串口发送TXD端为‘0’时,红外光发射管发出38KHz调制红外光线。TXD端为‘1’时,发射管就不发光。见上图12。红外接收电路为红外接收专门集成电路,当收到38KHz调制红外光线时,输出端为‘0’,平时为‘1’。正可与单片机串口发送接收端RXD配接。 (7)实际电路 最终通过Protel 99 SE软件将以上各个部分电路及元器件组合在一起,得到一个完整的电路图,如图13和图14。然后对各个元器件进行合理的封装,对封装后的PCB进行排版以得到最好的布局,为接下来焊接元器件有一定的帮助,而且合理的布局也能使完成后的实物更美观。 由于本设计两部分电路都有红外发射和接收部分,而区别在于远端有一个测温电路而手持端没有,所以在设计电路图时将两部分设计成一样的结构,即在手持端也有设计了测温芯片的接口,只要对手持端的程序稍加修改也能实现测温的功能。这样在后期制作时便于对电路的安装与调试,而且也有利于电路的功能扩展。 下面给出了两部分的电路图。 图 13 测温端电路图 图 14 手持端电路图 3 软件部分 软件用C语言进行编程,采用模块化设计方法。 开始 开始 发送信号 接收信号 接收数据 测温 显示 显示 发送数据 图 15 手持端与测温端的框图 3.1 软件模块的划分 该系统的控制软件主要可以分为测温和红外两个大的部分,其中具体有单片机初始化程序、定时中断服务程序、DS18B20接口程序、红外发射编码和红外接收解码程序等模块。 3.1.1 定时/计数器应用 (1)定时/计数器功能简介 AT89C51单片机内部设有两个16位可编程的定时/计数器,简称定时器0和定时器1,分别用T0和T1表示。其功能同一般定时计数器,主要作用是:第一,作为一段特定时间长短的定时;第二,可以计算由T1或T0引脚输入的脉冲数,前者在应用上可以产生正确的时间延迟及定时去执行中断服务程序,而后者则是计数器或者计频器的设计。在本设计中这两种作用都用到了。 这两个定时器本身有四种工作模式可供使用,如表3所示。 表3 四种工作模式 M1 MO 工作方式 功能说明 0 0 模式0 13位计数器 0 1 模式1 16位计数器 1 0 模式2 8位自动重装计数器 1 1 模式3 定时器0:分成两个8位计数器 定时器1:停止计数 (2)定时器相关的控制寄存器 TMOD为模式控制寄存器,主要用来设置定时/计数器的操作模式;TCON为控制寄存器,主要用来控制定时器的启动与停止。两个16位的定时/计数器T0和T1均可以分成2个独立的8位计数器即TH0、TL0、TH1、TL1,它们用于存定时或计数的初值。 ①模式控制寄存器--TMOD TMOD是一个专用寄存器,用于控制T1和T0的操作模式及工作方式,其各位定义如下: D7 D6 D5 D4 D3 D2 D1 D0 GATE C/ M1 M0 GATE C/ M1 M0 定时器1 定时器0 · GATE:门控位。当GATE=0,定时器只由软件控制位TR0或TR1来控制启停。位为1,定时器启动开始工作;为0时,定时器停止工作。当GATE=1时,定时器的启动要由外部中断引脚和位共同控制。只有当外部中断引脚或为高时,置1才能启动定时器工作。 ·C/:功能选择位。当C/=O时设置为定时器工作方式;计数脉冲由内部提供,计数周期等于机器周期。当C/=1时设置为计数器工作方式,计数脉冲为外部引脚T0或T1的引入的外部脉冲信号。 ·M1、M0:操作模式控制位,2位可形成4种编码,对应于4种操作模式。 TMOD模式控制寄存器不能进行位寻址,只能用字节传送指令设置定时器的工作方式及操作模式,低4位用于定义定时器0,高4位用于定义定时器1。系统复位时TMOD所有位均为0。 模式控制字的设置举例: 若设置定时器1为定时器工作方式,由软件启动,选择操作模式2;定时器0为计数方式,由软件启动,选择操作模式1。则TMOD各位设置为: 0 0 l 0 0 1 O l 25H 用MOV TMOD,#25H指令写入TMOD中。 ②控制寄存器--TCON TCON的作用是用于控制定时器的启动、停止及定时器的溢出标志和外部中断触发方式等。 各位定义如下: 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 ·TF1和TF0;分别为定时器1和定时器0溢出标志。当定时器计满产生溢出时,由硬件自动置“1”,并可申请中断。进人中断服务程序后,由硬件自动清0。这两位也可作为程序查询的标志位,在查询方式下应由软件来清0。 ·TR1和TR0:为定时器1和定时器0的启动控制位。当由软件使清0而停止定时器的工作。定时器启动时该位应置“1”。 定时器的启动与门控位和外部中断引脚有关。当GATE设置为0,定时器的启动由=1控制;而当GATE设置为1时,定时器启动除了=1外,还要求外部中断引脚=1时定时器方可启动工作。 ·IE1和IE0:为外部中断1和外部0的中断请求标志位。当外部中断源有请求时其对应的中断标志位置“1”。其复位由触发方式来设置。 ·IT1和IT0:为外部中断1和外部中断0的触发方式选择位。设置为“0”时为电平触发方式;设置为“1”时为边沿触发方式。 TCON中低4位是与外部中断有关的位,高4位为定时器控制位。它是一个可以进行位寻址的寄存器。当系统复位时所有位均为0。若要启动定时器可以使用位操作指令SETB 来启动。 (3)定时计数器的操作模式 ①模式0 模式0是一个13位的定时/计数器,16位的寄存器只用了高8位()和低5位(的D4-D0位),的高3位未用。 计时工作脉冲 定时器的工作时钟可以由内部或是外部来提供,由C/位来决定,当C/=1时,由外部引脚T0来供给,作为计数器使用,当C/=0时,则由内部时钟来提供,作为一般的定时器使用,而定时器的时钟为系统工作时钟除以12,在AT89C51中,石英振荡晶体使用11.0592MHz,所以定时器每一个计数时间脉冲宽为: 12/11.0592MHz=1.085us (3.1.1) 若石英振荡晶体改为12MHz,定时器每一个计数时间脉冲宽为: 12/12MHz=1.0us (3.1.2) 激活定时器 定时器动作的必要条件有: ·GATE=0时,TR0=1,定时器0就会工作; ·GATE=1时,除了TR0=1,INT0还须是高电平。 若使用定时器内部时钟工作C/=0,GATE=0,在模式0操作下,用命令: MOV TMOD,#00H 便可设置定时器0 于模式0做计时工作,将TR0设为1,定时器便会开始工作了。 定时时间长短设置 在模式0 工作下,计数器最多可计数个数为M==8192,由0到8192便产生溢出而引发中断信号,引起定时器0的中断(TF0=1)。可能只要计数100个脉冲便产生中断,只要将初值8092(8192-100)加载计数器即可,一旦激活计数器后,计数变为8093、8094、……一直到8192则产生中断,这样就计数100次了,而时间长度为: 1.085us*100=108.5us (3.1.3) 也就是经过108.5us后就产生中断了。 在定时器0中,加载定时器的初值,汇编语言指令为: TL0=(8192-C).MOD.32 (3.1.4) TH0=(8192-C)/32 (3.1.5) 其中C为所要计数的值,“MOD”为取余数的运算,除以32后取余数部分。“/”为除法运算,在做完除法后取整数部分。 计时溢出 当计时终了产生溢出,定时器应用两种方法可知道系统产生定时器中断了: ·检查其中断控制寄存器TCON中的TF0及TF1,若为1则表示产生计时溢出了。 ·执行对应的中断服务程序。 ②模式1 在模式1 工作下,计数器最多可计数个数为 M==65536,计时时间最长为 1.085us*65536=72ms (3.1.6) 而计数初值的加载方法为: TL0=(65536-C).MOD.256 (3.1.7) TH0=(65536-C)/256 (3.1.8) 其中C为所要计数的值,计数时间长度为: 1.085us*C (3.1.9) ③模式2 模式2有自动重新加载初值的功能,使定时器做更精确的计时。在模式2 工作下,计数器最多可计数个数为M==256,计时时间最长为: 1.085us*256=0.28ms (3.1.10) 而计数初值的加载方法为: TH0=256-C (3.1.11) 其中C为所要计数的值,计数时间长度为: 1.085us*C
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服