《温度控制器的设计与制作》由会员分享,可在线阅读,更多相关《温度控制器的设计与制作(11页珍藏版)》请在金锄头文库上搜索。
1、6.4 实施制作过程6.4.1 硬件设计温度测量采用最新的单线数字温度传感器DS18B20, DS18B20是美国DALLAS半导体公司最新推出 的一种改进型智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度并且可根据实际要求通 过简单的编程实现912位的数字值读数方式。可以分别在93.75ms和750ms内完成9位和12位的数字 量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率 来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而,使用DS18B20可 使系统结构更趋简单,可靠性更高。降温控制系统采
2、用低压直流电风扇。当温度高于设定最高限温度时,启动风扇降温,当温度降到指定 最高限温度以下后,风扇自动停止运转。温控系统的温度显示和温度的设定直接采用综合实训板上的显示和键盘。当环境温度低于设定的最低 限温度值时,也采用综合实训板上的蜂鸣器进行报警。用 0#、1#键作为温度最高限、最低限的设定功能键; 2#、3#键作为温度值设定的增加和减小功能键。0#键:作为最高限温度的设定功能键。按一次进入最高限温度设定状态,选择最高限温度值后,再按 一次确认设定完成。1#键:作为最低限温度的设定功能键。按一次进入最低限温度设定状态,选择最低限温度值后,再按 一次确认设定完成。2#键:+1功能键,每按一次将
3、温度值加1,范围为199C。3#键:一1功能键,每按一次将温度值减1,范围为991 C。14.7 kDS18B 20D1V74AD28855012pT945143447C1631,S02U18051P10P11BELLP00P01P12P02P13P03P14P04P15P05P16P06P17P07INT1P20INTOP21P22T1P23T0P24P25EA/VPX1X2P26P27RESETRXDTXDRDALE/PWRPSEN-34-3228-37-36: 3029222-23-24-25- 26U2 8155AD0PA0AD1PA1AD2PA2AD3PA3AD4PA4AD5PA5A
4、D6PA6AD7PA7PB0CEPB1RDPB2WRPB3IQMPB4ALEPB5PB6PB7TMROUTPC0PC1TMRINPC2PC3PC4RESETPC52128ii373154+5V:6-8:40243- 卄45+6 卄4819-30-,、pcoy 、- PC1、. PC2-35-136 g tLED1 LED2PA0 PA16.4.2 软件设计图2.2.1温控系统硬件接线原理图(1)温控系统采用模块化程序结构,可以分成以下程序模块: 系统初始化程序:首先完成变量的设定、中断入口的设定、堆栈、输入输出口及外部部件的初始化 工作。 主程序MAIN:完成键盘扫描、温度值采集及转换、温度值
5、的显示。当温度值高于设定最高限时, 驱动风扇工作;当温度值低于设定最低限时,驱动蜂鸣器报警。 键盘扫描程序KEYSCAN:完成键盘的扫描并根据确定的键值执行相应的功能,主要完成最高温度、 最低温度的设定。 温度采集程序GET_TEMPER:完成DS18B20的初始化并发出温度转换命令,经过指定时间后读取 转换的温度值。根据DS18B20的通信协议,主机控制DS18B20完成温度转换必须经过3个步骤:每一次读写之前都 要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20 进行预定的操作。复位要求CPU将数据线下拉500p s,然后释放。DS18B
6、20收到信号后等待1660p s 左右,后发出60240p s的存在低脉冲,CPU收到此信号表示复位成功。 温度转换程序TEMPER_COV:根据精度要求对采集到的温度值进行处理并转换成便于显示的BCD 码值。 显示子程序DISPLAY :显示实时温度及设定温度值。 DS18B20初始化子程序INIT_1820: DS18B20在工作之前必须按照指定的要求完成初始化工作,否 则无法正常工作。 DS18B20读写子程序 WRITE_1820、READ_1820、READ_1820T完成对18B20的读写功能,其中,READ_1820从DS18B20中读出一个字节的数据,READ_1820T从DS
7、18B20中读出两个字节的温度数据。 延时程序DELAY、DELAY1满足18B20要求的延时间隔及程序中的延时功能。(2)软件流程框图分另I如图2.2.2、2.2.3、2.2.4、2.2.5和2.2.6所示。( 开始 _DS18B20初始化程序初始化键输入吗?N采集温度值NYCLR DQ 向 DS18B20 发出reset脉冲待480 us以上?将采集到的值转 化为压缩BCD码显示温度值执行相应键的功能清除FLAG标志YSETB DQ 等待15 60 us置FLAG标志 并延时200 usDQ是否变低? 初始化结束 图2.2.2主程序流程图图2.2.5DS18B20写入子程序图2.2.6DS
8、18B20读取子程序图2.2.3DS18B20初始化程序流程图32H ;设定的最高温度值33H ;设定的最低温度值34H ;加 1、减1 的暂存值(3)下面给出参考程序(部分);晶振:12MHz36H ;采集到温度值的低位35H ;采集到温度值的高位30HHIG_TMP EQU LOW_TMPEQU NUB_VAL EQUTEMPER_H EQU TEMPER_L EQU TEMPER_NUMEQUPORT EQU4400H ; 8155 口地址PORTA EQU4401H; 8155A 口地址PORTB EQU4402H; 8155B 口地址PORTC EQU4403H; 8155C 口地址
9、FLAG1 BIT 00H ; 18B20 初始化完成标志 KEY_MK BIT 08H ;键盘按下标志 KEY_HMK BIT 09H ; S1 键按下标志 KEY_LMKBIT 0AH; S2 键按下标志DISP_MK BIT 0BH;温度设定状态标志 DQ BIT P1.1ORG 0000HAJMP STARTORG 0030HSTART:MOV SP,#60H ;设置堆栈值MOV IE,#00HMOV TCON,#00HMOV TMOD,#10HMOV DPTR,#PORT ;初始化 8155 口,A、B 输出 C 输入MOV A,#43HMOVX DPTR,ASETB DQSETB
10、P1.2MOV R0,#20HMOV R1,#20HMOV A,#00HSTART_1:MOV R0,AINC R0DJNZ R1,START_1START_2:CLRP1.0CLRP1.2MOV HIG_TMP,#30H;初始高温限值设为30CMOV LOW_TMP,#20H ;初始低温限值设为20CACALL RE_CONFIGNOPACALL INIT_1820JNB FLAG1,START_2MAIN:ACALL KEY_SCANJB KEY_LMK,MAIN1JB KEY_HMK,MAIN1ACALL GET_TEMPER ;采集温度值ACALL TEMPER_COV ;温度值转换M
11、AIN1:ACALL DISPLAYMOVA,TEMPER_NUMCJNEA,HIG_TMP,MAIN2CLR CMAIN2:JC MAIN3SETBP1.2;启动风扇AJMPMAINMAIN3:CJNE A,LOW_TMP,MAIN4CLRCMAIN4:JNC MAIN5SETB P1.0 ;启动报警器AJMP MAINMAIN5:CLRP1.0CLRP1.2AJMP MAINNOP; 读出转换后的温度值GET_TEMPER:SETB DQ ;定时入口GET_TMP1:LCALL INIT_1820;第一步,完成对18B20初始化JB FLAG1,GET_TMP2LJMP GET_TMP1
12、;若DS18B20不存在,则继续初始化 GET_TMP2:LCALL DELAY1 ;延时 80“sMOV A,#0CCH ;第二步,ROM命令,跳过ROM匹配LCALL WRITE_1820MOV A,#44H ;第三步,功能命令,发出温度转换命令 LCALLWRITE_1820GET_TMP5:NOPLCALLDISP3CLRDQNOPNOPSETB DQ ;释放数据线MOV R3,#4;延时 14p sDJNZ R3,$CLRCMOV C,DQJNC GET_TMP5GET_TMP3:LCALL INIT_1820;第一步,对 18B20 初始化JB FLAG1,GET_TMP4LJMP
13、 GET_TMP3GET_TMP4:LCALLDELAY1MOV A,#0CCH ;第二步,ROM命令,跳过ROM匹配 LCALLWRITE_1820MOV A,#0BEH;第三步,功能命令,发出读温度命令LCALLWRITE_1820;LCALLREAD_1820; READ_1820RET9写DS18B20的程序WRITE_1820:MOVR2,#8CLRCWRITE1:CLRDQMOVR3,#7;延时 14p sDJNZR3,$RRCAMOVDQ,CMOVR3,#21;延时 45p sDJNZR3,$SETBDQNOPDJNZR2,WRITE1SETBDQRET6.4.3 系统调试1) 输入源程序 输入源程序时,应以西文方式输入字母和符号,且中文注释前要加分号。2) 对源程序进行汇编和纠错 根据自动汇编提供的错误信息逐条纠正错误,直至汇编信息提示“错误(0)”、“汇编结束”。3) 确定调试方案 在调试程序前一定要认真分析源程序,明确各功能程序运行的预期结果。然后结合源程序应达到的结 果,确定出如何通过某些关键参数和实验现象检验程序运行结果正确与否。例如:程序运行过程中路径的 变化、累加器A内容的变化、其他特殊寄存器内容的变化等。并针对具体的分析和观察对象选