资源描述
单片机类课程设计
题 目:智能温度控制器
目录
论文总页数 23页
一、引言………………………………………………………. 2
二、关键字……………………………………………………. 3
三、设计的题目………………………………………………. 3
四、课程设计的基本要求…………………………………… 4
五、方案设计 ………………………………………………... 4
六、系统设计方案及框图…………………………………..... 5
6.1智能温度控制器总体方案…………………………………. 5
6.2设计原理框图………………………………………………. 6
七、数字信号采集和处理……………………………………... 6
7.1、DS18B20产品的特点…………………………………….. 7
7.2、DS18B20的引脚介绍……………………………………. 7
7.3、DS18B20的使用方法…………………………………… 8
八、系统硬件电路....................................11
8.1 控制器内部结构…………………………………………….12
8.2 控制器具体电路…………………………………………….13
九、系统扩展电路………………………………………………13
9. 1 数字温度感应模块接口电路………………………………13
9. 2 液晶显示电路………………………………………………14
9. 3 系统输入电路………………………………………………15
十、系统总电路…………………………………………………15
10.1 Altium Designer电路设计软件绘制的总电路原理图 …16
10. 2电路仿真软件PROTEUS下系统实时仿真………………16
10. 3 系统总电路PCB图的设计………………………………17
十一、 系统软件………………………………………………...18
十二、总结与体会……………………………………………….20
十三、参考文献 ………………………………………………... 21
一、引言
随着科技的不断发展,二十一世纪已经进入电子信息时代的轨道。为了能够更好的适应社会的发展和需要,学好电子方面的知识对于我们这些二十一世纪的大学生是尤为重要的,单片机更是如此。与此同时,设计一些新的电子产品对我们在学校所学知识的一种掌握和巩固。
许多情况下需要测量温度参数。通常测温系统的主要器件是热敏电阻,由于它体积小、重复性好、测量方法简单,所以在测温系统中广泛应用。但采用热敏电阻的测温系统需要A/D转换,而且测量精度不高。本设计中采用Dallas公司生产的一种新型温度传感器DS18B20,它集温度测量、A/D转换于一体,其测量范围宽(-55℃~+125℃),精度高(0.0625℃),DS18B20是一款具有单总线结构的器件。另外再搭配Dallas公司生产的另一种实时时钟芯片DS1302用以产生精确的时、分、秒信号来实现实时温度测量,显示电路采用1602液晶。
由DS18B20组建的温度测量单元体积小,便于携带、安装。同时,DS18B20的输出为数字量,可以直接与单片机连接,无需后级A/D转换,控制简单。由于DS18B20具有单总线特性,便于扩展,可在一根总线上挂接多个DS18B20来组建温度测量网络。
作为学习电子技术的我们,可以利用学习过的知识设计一个智能温度控制器
二、关键字
三、设计题目
四、课程设计的基本要求
任
务
与
要
求
五、设计方法
集温度测量、A/D转换于一体,其测量范围宽(-55℃~+125℃),精度高(0.0625℃),故选用方案二。
六、系统设计方案及框图
6.1智能温度控制器总体方案
6.2设计原理框图
如图6—1所示
外设总线
外部扩展电路
LCD
温度传感器
微型控制器
(STC89C52)
键盘
系统电源
整个系统中前端的数字温度传感器负责测量温度的变化并将温度的变化转化为数字型号,数字温度传感器芯片负责把温度变化转换成微控制器可以识别的数字量,然后通过芯片内部的SPI总线上传给微控制器。微控制器将表征当前温度值的数字量处理后通过直观的LCD进行方位显示,同时可以通过键盘控制微控制器进行相应的操作,如设定温度的上下限值等。
七、温度信号采集和处理
数字温度传感器(DS18B20)介绍
DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
7.1、DS18B20产品的特点
(1)、只要求一个端口即可实现通信。
(2)、在DS18B20中的每个器件上都有独一无二的序列号。 (3)、实际应用中不需要外部任何元器件即可实现测温。 (4)、测量温度范围在-55。C到+125。C之间。
(5)、数字温度计的分辨率用户可以从9位到12位选择。 (6)、内部有温度上、下限告警设置。
7.2、DS18B20的引脚介绍
DS18B20的引脚为TO-92封装,其引脚功能描述见表1。
表1 DS18B20详细引脚功能描述
序号
名称
引脚功能描述
1
GND
地信号
2
DQ
数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。
3
VDD
可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。
图7.1 DS18B20引脚说明
7.3. DS18B20的使用方法
由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对STC89C52单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。
DS18B20的复位时序
图7.2 DS18B20复位时序图
DS18B20的读时序
对于DS18B20的读时序分为读0时序和读1时序两个过程。
对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。
图7.3 DS18B20的读时序
DS18B20的写时序
对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。
对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。
图7.4 DS18B20的写时序
由DS18B20组建的温度测量单元体积小,便于携带、安装。同时,DS18B20的输出为数字量,可以直接与单片机连接,无需后级A/D转换,控制简单。由于DS18B20具有单总线特性,便于扩展,可在一根总线上挂接多个DS18B20来组建温度测量网络。
图7.5 DS18B20方框图
八、系统硬件电路
8.1 控制器内部结构
图8.1 STC89C52内部结构图
本次设计中采用了51内核MCU,具体型号为STC89C52,
图8.2 DIP40单片机引脚图
兼容8051架构,为8位微处理器CPU。拥有数据存储器RAM和特殊功能寄存器SFR和内部程序存储器ROM、两个定时/计数器,用以对外部事件进行计数,也可用作定时器;四个8位可编程的I/O(输入/输出)并行端口,每个端口既可做输入,也可做输出。一个串行端口,用于数据的串行通信。
8.2 控制器具体电路
整个系统的控制部分主要完成对温度感应模块数据的读取和处理并将数据的处理结果通过控制人机界面显示出来,同时监控键盘的输入以便完成系统功能设定等操作。
图8.3 复位及时钟振荡电路
控制部分电路如图所示,其中包含了微控制器、LCD接口电路、端口上拉电阻、温度传感器模块接口电路。
整个微控制系统中采用了无源晶振的形式发生MCU所需要的时钟信号。具体电路如所示。时钟电路中的两个电容用作补偿,使得晶振更容易起振,频率更加稳定。系统的复位采用了上电复的形式,上电过程中微控制器复位引脚保证10ms以上的高电平就能可靠的将微控制器复位。
九、系统扩展电路
9. 1 数字温度感应模块接口电路
本次设计中采用了DS18B20数字温度感应模块。DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输。
9. 2 液晶显示电路
本次设计采用了16×2字符单色液晶显示屏(LCD)作为系统的显示界面,该LCM采用了HD44780控制芯片作为显示控制核心。微控制器只需要对HD44780芯片进行操作便可以完成对LCD屏的相关操作,使用非常方便。相关的技术参数及引脚说明如下:
整个LCM中HD44780负责对LCD行列驱动芯片的控制。微控制器只需要按照HD44780给定的指令格式进行相应的操作即可,其数据和指令的读写时序如图所示。
图9.2 1602的读操作时序
图9.3 1602的写操作时序
9. 3 系统输入电路
系统采用了4键输入以实现系统功能的设定,如系统温度上下限的调整和菜单的选择。由于系统中的其他模块对微控制器的端口占用较少还有很多没有使用的端口,键盘连接上直接采用了每个按键占用一个端口的形式,如图所示:
图9.4 键盘输入电路
键盘的读取采用扫描的形式,当检测到有按键按下时,消抖动后进行键值判断。
十、系统总电路
图10.1 系统总电路
10.1使用Altium Designer电路设计软件绘制出的系统总电路原理图:
10. 2 在经典的电路仿真软件PROTEUS下加载编译成功的HEX文件之后的系统实时仿真图:
图10.2 系统在PROTEUS下的仿真效果
经过在Proteus下的仿真,与KEIL等编译系统进行联调并经过多次的修改之后最终将此智能温度控制器的软件程序确定。
10. 3 系统总电路PCB图的设计
系统总电路中包含了系统主控制电路、温度感应模块及其逻辑控制电路,扩展接口和相关辅助电路。
在进行系统PCB的器件方位布置和走线时,特别注意了通信电路和信号采集电路的隔离。LCM内部的干扰比较大在进行器件放置时,将容易受到干扰的器件排布到其他区域,并采取一定的隔离措施。
使用Altium Designer电路设计软件绘制出的系统总电路PCB图:
图10.3 使用Altium Designer电路设计软件设计的系统PCB图
十一、 系统软件
开始
整监控系统中各个模块间存在一定的先后顺序且程序模块数量较少,为了减少系统的程序量,设计过程中系统的监控程序采用了传统的前后台方式。整个监控程序主要由液晶显示驱动、温度采集和键盘扫描模块组成。程序流程如图所示。
系统初始化
读取18B20数据
液晶显示当前温度
系统主程序部分:
;****************主程序*******************
START:
CALL RESET
JNB 70h,MAIN1
MOV P0,#0C0H ;写入显示起始地址(第二行第一个位置)
ACALL ENABLE ;调用写入命令子程序
DS18B20_NOT_READY:
CALL DISPLAY_18B20_ERROR
LOOP1:
CALL RESET
JNB 70h,MAIN1
JMP LOOP1 ;如果栓测不到18b20程序下面不执行
MAIN1:
MOV P0,#00000001B ;清屏并光标复位
ACALL ENABLE ;调用写入命令子程序
CALL DISPLAY_WATING ;等待第一次结果.
CALL SKIP_ROM
CALL TEMP_CONV
CALL DELAY_600MS
MOV P0,#00000001B ;清屏并光标复位
ACALL ENABLE ;调用写入命令子程序
MAIN :
CALL RESET
CALL SKIP_ROM
CALL RECALL_EPROM ;调入温度限值.
MAIN_MAIN:
CALL READ_TEMP ;读18b20的内部温度
JB 70h,DS18B20_NOT_READY ;中途失败!
CALL DATA_CONV ; 数据转换
CALL DISPLAY_18B20_TEMP
CALL DISPLAY_18B20_TEMP_XZ;显示限值.
CALL CONTROL
JNB KEY_SET,S1
JMP MAIN_MAIN
CONTROL:
JNB 03H,CONTROL1
LCALL DISPLAY_OFF
AJMP CONTROL_END
CONTROL1:
LCALL DISPLAY_ON
CONTROL_END:
RET
S1:
LCALL DELAY_2MS ;延时消抖
JB KEY_SET,MAIN
JNB KEY_SET,$
LCALL KEY ;有键输入
AJMP MAIN
当系统上电后,最先执行的就是对系统各个部件进行初始化的代码,其中主要包括对系统内部定时器、LCM驱动、温度感应模块的初始化。系统初始化完成时对温度感应模块进行读取,此时温度感应模块将得到的数据上传至微控制器,微控制器根据得到的数据驱动LCM进行相应的显示,随后微控制器将对系统键盘端口进行扫描,并根据扫描得到的键值进行相应的处理。
统中将按键电路中按键、、、分别与单片机进行连接,此按键是低电平有效,当有键按下时,与按键相连接的单片机引脚检测到这个信号,然后进行相应的处理后再输出。
结 论
设计的系统中包含了温度传感器、微控制器、显示部件、输入部件等部分,微控制器通过对温度传感器进行读取获得当前温度,通过一定的运算后由直观的人机界面显示出来,并可通过键盘对温度进行高温和低温的限值设定。
整个设计系统中充分掌握各模块电路的工作原理,对硬件电路进行设计。本系统用于温度指示实测精度可以达到0.5°、功耗小、显示直观。
由于个人在知识面和能力方面还有限,再加上条件的限制,温度采样精度和抗干扰能力等各项技术指标的提高、诸多功能的完善还需要进一步的研究和开发,此外在完成基本功能的基础上,还需要努力提高软件的效率、硬件系统的稳定性、进一步降低系统功耗等。
十二、总结与体会
通过这次的课程设计,让我对单片机有了进一步的了解、巩固和加深并且对所学知识的得以实际的应用。与我们所学芯片再一次的零距离的接触,也使我们对各个芯片的功能和特性的认识进一步的了解。
在此次课程设计中我们同有一组人共同学习、共同设计、共同讨论,共同研究设计的出来的方案,一起动手去对我们设计出来的方案在Altium Desiger和PROTEUS等电路设计软件上进行仿真,遇到困难大家都齐心协力的去解决它,有不懂的地方及时的去请教老师,以至能够更好、更快的去完成我们这次的课程设计。在课程设计的同时也培养了每个人的独立思考问题的能力,也体现出了同学之间的团结精神。
在这次的课程设计中我们并不是一帆风顺的,其中也遇到了许多的困难和挫折,也受到了不少的打击,但是我们并没有放弃,我们坚信我们一定会成功的。“失败乃是成功之母”在这次的课程设计让我对这句话有了更深刻的体会。这句话说的很道理,每一次的成功的背后都会有失败在做铺垫。虽然失败了但是我们不能放弃,我们事变了就说明我们有做的不够完善的地方。就要对它进行分析,分析所存在的问题,这样才能够不断的接近的成功的宝塔。
在此次智能温度控制器的设计过程中,让我们了解到了现代电子产品的设计和工作原理。以前在实际生活中看到的电子产品,例如:彩灯、交通灯、电磁炉、电饭煲等等,就只是会用它们,并不知道它们的工作原理。通过这次的课程设计就对它们的原理得以了解。
同时这次课程设计,让我们的动手能力有了大大的提高,为我们以后的工作和学习奠定的基础。在以后的生活中我们自己也可以利用我们学过的知识和所了解的芯片功能来设计一些日常生活中所需要的电子产品。
这次我们能够顺利的完成设计,是由于同组人的齐心协力和老师的认真教导,但关键的是我们对这次课程设计有一个正确的认识、端正的态度和坚定的信心。以一种设计者的身份投入到其中去设计它完成它。
十三、参考文献
[1] 江晓安等编著《模拟电子技术》西安电子科技大学出版社
[2] 雷思孝 冯育长编著《单片机系统设计及工程应用》 西安电子科技大学出版社
[3] 求是科技编著《单片机典型模块设计实例导航》人民邮电出版社 2008
[4] 冯育长等编著《单片机系统设计与实例分析》西安电子科技大学出版社 2007
[5]《精通PROTEL DXP 2004 SP2电路设计》 电子工业出版社 2007
[6] Jean J.Labrosse, 邵贝贝等译. 嵌入式实时操作系统uC/OS-II(第二版)[M]. 北京:北京航空航天大学出版社, 2003.
[7] 周航慈, 吴光文. 基于嵌入式实时操作系统的程序设计技术[M]. 北京: 北京航空航天大学出版社, 2006.
[8] 任哲. 嵌入式实时操作系统uC/OS-II原理及应用[M]. 北京: 北京航空航天大学出版社, 2006.
[9] 黄志伟编著. 全国大学生电子设计竞赛系统设计[M]. 北京: 北京航空航天大学出版社, 2006.
[10] 常玉燕, 吕光译. 日本电子电路精选[M]. 北京: 电子工业出版社, 1990.
[11] http//
[12] http//
作者简介
姓 名:白航飞 性别:男
出生年月:1986-08 民族:汉
E-mail:jasionben@
;********************************************************
;00H:18B20存在标志位,0表示存在,1表示不存在 *
;01H:温度设置标记位,1表示设定高温限值,0表示设定低温限值.*
;02H:暂未用,03H:控制器开关标记,0:表示温度低,1表示温度高
;注:;每次读写应先reset,然后跳过rom检测,再之后才能向18b20发命令.
;注;;MOV A,#4EH;应该是先送此条命令然后马上传两个字节的温度数据,中间不能用reset!.不然就出问题
;*注:程序编制中遇到2个主要错误:子程序中少写了ret而出现未知错误,
;标记位地址与字节地址重叠.
;********************************************************
ORG 00H
JMP INPORT
ORG 0BH
ORG 30H
INPORT:
TMP_H EQU 29H ;温度高字节
TMP_L EQU 28H
RS EQU P2.5 ;确定具体硬件的连接方式
RW EQU P2.6 ;确定具体硬件的连接方式
E EQU P2.7 ;确定具体硬件的连接方式
KEY_SET EQU P2.0
KEY_UP EQU P2.1
KEY_DOWN EQU P2.2
DS18B20_FLAG EQU 70h
SET_FLAG EQU 01H
FLASH_FLAG EQU 02H
K_ON EQU 03H
MOV 25H,#0FFH ;位00h-07h全部置1
MOV R4,#14
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
MOV IE,#10000010B ;(8:总控,2:定时0溢出中断控制位)
LCD_INIT:
MOV R6,#30
CALL DELAY_BY_R6 ;15ms
MOV P0,#38H ;写38h
ACALL WRITE_NOT_CHECK_BUSY
MOV R6,#10
CALL DELAY_BY_R6 ;5ms
MOV P0,#38H
ACALL WRITE_NOT_CHECK_BUSY
MOV R6,#10
CALL DELAY_BY_R6 ;5ms
;-----设转初始值
SETB E
MOV P0,#00000001B ;清屏并光标复位
ACALL ENABLE ;调用写入命令子程序
MOV P0,#00111000B ;8位2行5x7点阵
ACALL ENABLE ;调用写入命令子程序
MOV P0,#00001110B ;显示器开、光标开、光标允许闪烁
ACALL ENABLE ;调用写入命令子程序
MOV P0,#00000110B ;文字不动,光标自动右移
ACALL ENABLE ;调用写入命令子程序
STORE_DEFINE_DATA: ;把自定义字符存入CGRAM
MOV P0,#40H ;CGRAM起始地址
ACALL ENABLE
MOV R2,#8
MOV DPTR,#DEFINE_DATA
MOV R3,#0
NEXTP:
MOV A,R3
MOVC A,@A+DPTR
MOV P0,A
CALL WRITE_DATA_TO_LCD
INC R3
DJNZ R2,NEXTP
;****************主程序*******************
START:
CALL RESET
JNB 70h,MAIN1
MOV P0,#0C0H ;写入显示起始地址(第二行第一个位置)
ACALL ENABLE ;调用写入命令子程序
DS18B20_NOT_READY:
CALL DISPLAY_18B20_ERROR
LOOP1:
CALL RESET
JNB 70h,MAIN1
JMP LOOP1 ;如果栓测不到18b20程序下面不执行
MAIN1:
MOV P0,#00000001B ;清屏并光标复位
ACALL ENABLE ;调用写入命令子程序
CALL DISPLAY_WATING ;等待第一次结果.
CALL SKIP_ROM
CALL TEMP_CONV
CALL DELAY_600MS
MOV P0,#00000001B ;清屏并光标复位
ACALL ENABLE ;调用写入命令子程序
MAIN :
CALL RESET
CALL SKIP_ROM
CALL RECALL_EPROM ;调入温度限值.
MAIN_MAIN:
CALL READ_TEMP ;读18b20的内部温度
JB 70h,DS18B20_NOT_READY ;中途失败!
CALL DATA_CONV ; 数据转换
CALL DISPLAY_18B20_TEMP
CALL DISPLAY_18B20_TEMP_XZ;显示限值.
CALL CONTROL
JNB KEY_SET,S1
JMP MAIN_MAIN
CONTROL:
JNB 03H,CONTROL1
LCALL DISPLAY_OFF
AJMP CONTROL_END
CONTROL1:
LCALL DISPLAY_ON
CONTROL_END:
RET
S1:
LCALL DELAY_2MS ;延时消抖
JB KEY_SET,MAIN
JNB KEY_SET,$
LCALL KEY ;有键输入
AJMP MAIN
;***************键处理程序******************
KEY: SETB 01H
KEY_IN: ;有键输入的程序
MOV P0,#00000001B ;清屏并光标复位
ACALL ENABLE ;调用写入命令子程序
JNB 01H,DSP_SET_L ;01如果是0,则显示L:
DSP_SET_H: ;显示高温的限值
MOV P0,#10000000B
ACALL DISPLAY_SETING_TEMP_H ;显示SETING_TEMP:H ..
MOV DPTR,#LED_DATA
MOV R1,42H ;码表初值
MOV R0,#1 ;字数
CALL DISPLAY
;---------------显示温度限值低位
MOV DPTR,#LED_DATA
MOV R1,41H ;码表初值
MOV R0,#1 ;字数
CALL DISPLAY
;---------------显示温度限值低位
MOV DPTR,#LED_DATA
MOV R1,40H ;码表初值
MOV R0,#1 ;字数
CALL DISPLAY
AJMP KEY_SELECT
DSP_SET_L:;显示低温的限值
MOV P0,#10000000B
ACALL DISPLAY_SETING_TEMP_L ;显示SETING_TEMP:L ..
MOV DPTR,#LED_DATA
MOV R1,45H ;码表初值
MOV R0,#1 ;字数
CALL DISPLAY
;---------------显示温度限值低位
MOV DPTR,#LED_DATA
MOV R1,44H ;码表初值
MOV R0,#1 ;字数
CALL DISPLAY
;---------------显示温度限值低位
MOV DPTR,#LED_DATA
MOV R1,43H ;码表初值
MOV R0,#1 ;字数
CALL DISPLAY
AJMP KEY_SELECT
KEY_SELECT:
JNB KEY_SET,K_SET
JNB KEY_UP,K_UP
JNB KEY_DOWN,K_DOWN
AJMP KEY_SELECT
K_SET:
LCALL DELAY_2MS
lcall delay_2ms
lcall delay_2ms
JB KEY_SET,KEY_SELECT
MOV R5,#250
KSET_LOOP:
JB KEY_SET,KEY_CPL
LCALL DELAY_2MS
LCALL DELAY_2MS
DJNZ R5,KSET_LOOP
AJMP EXT_KEY
K_UP:
LCALL DELAY_2MS
lcall delay_2ms
JB KEY_UP,KEY_SELECT
JNB 01H,K_UP_LOW
K_UP_HIGH:
JNB KEY_UP,$
MOV A,2AH
INC A
MOV 2AH,A
JMP K_UP_DOWN_END
K_UP_LOW:
JNB KEY_UP,$
MOV A,2BH
INC A
MOV 2BH,A
JMP K_UP_DOWN_END
;*********************
K_DOWN:
LCALL DELAY_2MS
JB KEY_DOWN,KEY_SELECT
JNB 01H,K_DOWN_LOW
K_DOWN_HIGH:
JNB KEY_DOWN,$
MOV A,2AH
DEC A
MOV 2AH,A
JMP K_UP_DOWN_END
K_DOWN_LOW:
JNB KEY_DOWN,$
MOV A,2BH
DEC A
MOV 2BH,A
K_UP_DOWN_END:
MOV A,2AH
MOV B,#10
DIV AB
MOV 40H,B ;高温限值个位
MOV B,#10
DIV AB
MOV 41H,B ;十位
MOV 42H,A ;百位
;----------------------------
MOV A,2BH
MOV B,#10
DIV AB
MOV 43H,B ;低温限值位个位
MOV B,#10
DIV AB
MOV 44H,B ;十位
MOV 45H,A ;百位
AJMP KEY_IN
KEY_CPL:
CPL 01H
AJMP KEY_IN
EXT_KEY:
MOV P0,#00000001B ;清屏并光标复位
CALL ENABLE ;调用写入命令子程序
CALL DISPLAY_SAVE
CALL SKIP_ROM
MOV A,#4EH
CALL WRITE
MOV A,2AH ;2A数据送高温限值寄存器.
CALL WRITE
MOV A,2BH ;2B数据送低温限什寄存器.
CALL WRITE
CALL RESET
CALL SKIP_ROM
MOV A,#48H ;将高低温限值寄存器数据送18B20-EPROM保存.
CALL WRITE
A_END:
RET
;***************18b20指令子程序**********************
READ_TEMP: ;读1820内部温度子程序.
CALL RESET
JB 70h,EXT1
CALL SKIP_ROM
CALL TEMP_CONV ;温度AD变换
CALL DELAY_600MS ;时........
CALL RESET
CALL SKIP_ROM
CALL TEMP_GET ;发取温度的命令
CALL READ ;接收...
EXT1:
RET
SKIP_ROM: ; 跳过ROM检测
MOV A,#0CCH ;#0CCH为跳过rom命令
CALL WRITE
RET
RECALL_EPROM: ;重调Eprom
MOV A,#0B8H
CALL WRITE
RET
TEMP_CONV:
MOV A,#44H ;AD变换
CALL WRITE
RET
TEMP_GET:
MOV A ,#0BEH ;读18b20命令
CALL WRITE
RET
;****************************18B20基本时序子程序*********************************
RESET: ;初始化子程序
SETB P1.0
NOP
CLR P1.0 ;拉低
MOV R3,#150 ; *4=600US
CALL DELAY_BY_R3
SETB P1.0 ;拉高
MOV R3,#15 ; 60US
CALL DELAY_BY_R3
MOV R3,#60 ;4个周期*60=240US内检测
A1: JNB P1.0,A2 ;检测到低平信号
DJNZ R3,A1 ;如果没有应答的低电平信号,返回A1重新检测,超时后下一行,
SETB 70h ;DS1820不存在.
JMP A3
A2: CLR 70h
MOV R3,120 ;240US;等恢复时间2*120=240us
DJNZ R3, $
A3:
RET
;------------------------
WRITE:
MOV R2,#8 ;一个字节为8位
CLR C ;C位清0 C位用来放A的一位数据,用移位的方法放入C
B1: SETB P1.0
NOP
CLR P1.0
MOV R3,#4 ;16US
CALL DELAY_BY_R3
RRC A ;把A中的数送入C
MOV P1.0,C ;把C送入总线
MOV R3,#12 ;48US(一位数据的发送:60us<tx<120us)
CALL DELAY_BY_R3
SETB P1.0 ;拉高1us结束一位
NOP
DJNZ R2,B1
RET
READ:
MOV R1,#4 ;接收4个字节数据依次是1.低位 2.高位. 3.高限 4.低限
MOV R0,#28H ;低位放28H;高位放29h (1. 28H,2. 29H 3. 2AH 4. 2BH )
C0: MOV R2,#8 ;一字节数据8位
C1: CLR C ;清除C
SETB P1.0
NOP
NOP
CLR P1.0 ;拉低.
NOP ;1us秒后拉高?
SETB P1.0
MOV R3,#4 ;16us后采数据
CALL DELAY_BY_R3
展开阅读全文