温度测量.docx

上传人:b****2 文档编号:24227964 上传时间:2023-05-25 格式:DOCX 页数:21 大小:18.29KB
下载 相关 举报
温度测量.docx_第1页
第1页 / 共21页
温度测量.docx_第2页
第2页 / 共21页
温度测量.docx_第3页
第3页 / 共21页
温度测量.docx_第4页
第4页 / 共21页
温度测量.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

温度测量.docx

《温度测量.docx》由会员分享,可在线阅读,更多相关《温度测量.docx(21页珍藏版)》请在冰豆网上搜索。

温度测量.docx

温度测量

TEMP_ZHDATA24H;实时温度值整合后存放单元

TEMPLDATA25H

TEMPHDATA26H

TEMP_THDATA27H;高温报警值存放单元

TEMP_TLDATA28H;低温报警值存放单元

TEMPHHDATA29H;百位数bcd码存放单元

TEMPHLDATA2AH;十位数bcd码存放单元

TEMPLHDATA2BH;个位数bcd码存放单元

TEMPLLDATA2CH;小位数bcd码存放单元

SIGNEQU20H.3;1=温度为负,0=温度为正

K1EQUP1.4

K2EQUP1.5

K3EQUP1.6

K4EQUP1.7

BEEPEQUP3.7

FLAG1EQU20H.0;DS18B20是否存在/1存在,0不存在

DQEQUP3.4

;=====================================================

ORG0000H

JMPMAIN

MAIN:

MOVSP,#60H

MOVA,#00H

MOVR0,#20H;将20H-2FH单元清零

MOVR1,#10H

CLEAR:

MOV@R0,A

INCR0

DJNZR1,CLEAR

LCALLTHTL_DISP

MOVR1,#250

MMM1:

LCALLDELAY

DJNZR1,MMM1

START:

CALLRESET;18B20复位子程序

JNBFLAG1,START1;DS1820不存在

CALLREAD_E2;从eerom拷贝TH\TL到暂存器

JMPSTART2

START1:

JMP$

START2:

CLRBEEP

CALLRESET

JNBFLAG1,START1;DS1820不存在

MOVA,#0CCH;跳过ROM匹配

CALLWRITE

MOVA,#44H;发出温度转换命令

CALLWRITE

CALLRESET

MOVA,#0CCH;跳过ROM匹配

CALLWRITE

MOVA,#0BEH;发出读温度命令

CALLWRITE

CALLREAD

CALLCONV_TEMP

CALLLED_DISP

CALLTEMP_COMP

CALLPROC_K2

JMPSTART2

;-----------------------------------------------------

;============================================

;检测是否有键按下

;============================================

PROC_K2:

;按键K2处理

JBK2,PROC_END

CALLDELAY

JBK2,PROC_END

JNBK2,$

CALLBZ55_127

MOV29H,#0BH;H的bcd码送百位

MOVR4,TEMP_TH

LCALLTHTL_BCD

LCALLTHTL_DISP

CALLSET_ALARM

CALLRE_18B20;将设定的TH,TL值写入DS18B20内

CALLWRITE_E2

PROC_END:

RET

;-------------------------------------------------

;变不在-55---127内的TH.TL的为0

;------------------------------------------------

BZ55_127:

MOVR1,#TEMP_TH

MOVR2,#2

BZ1:

CLRC

MOVA,@R1

SUBBA,#0B7H

JCBZ2

MOV@R1,#00H

INCR1

DJNZR2,BZ1

BZ2:

RET

;============================================

;设定报警值TH、TL

;============================================

SET_ALARM:

NOP

AS_K1:

JBK1,AS0_K1

CALLDELAY

JBK1,AS0_K1

JNBK1,$

CPL20H.1;UP/DOWN标记

AS0_K1:

JB20H.1,UP_TH;20H.1=1,UP

JMPDOWN_TH;20H.1=0,DOWN

AS_K4:

LCALLTHTL_DISP

JBK4,AS_K1;确定调整OK

CALLDELAY

JBK4,AS_K1

JNBK4,$

RET

UP_TH:

JBK2,UP_TL;TH值调整(增加)

CALLDELAY

JBK2,UP_TL

JNBK2,$

MOVA,TEMP_TH

ANLA,#80H

JNZUP_TH1

INCTEMP_TH

MOVA,TEMP_TH

CJNEA,#128,TH_DISP;TH大于127转零

MOVTEMP_TH,#0B7H

JMPTH_DISP

UP_TH1:

DECTEMP_TH

MOVA,TEMP_TH

CJNEA,#128,TH_DISP;TH大于127转零

MOVTEMP_TH,#00H

TH_DISP:

MOV29H,#0BH;H的bcd码送百位

MOVR4,TEMP_TH

LCALLTHTL_BCD

LCALLTHTL_DISP

JMPUP_TH

UP_TL:

JBK3,AS_K4;TL值调整(增加)

CALLDELAY

JBK3,AS_K4

JNBK3,$

MOVA,TEMP_TL

ANLA,#80H

JNZUP_TL01

INCTEMP_TL

MOVA,TEMP_TL

CJNEA,#128,TL_DISP;TL大于127转零

MOVTEMP_TL,#0B7H

JMPTL_DISP

UP_TL01:

DECTEMP_TL

MOVA,TEMP_TL

CJNEA,#128,TL_DISP

MOVTEMP_TL,#00H

TL_DISP:

MOV29H,#0CH;L的bcd码送百位

MOVR4,TEMP_TL

LCALLTHTL_BCD

LCALLTHTL_DISP

JMPUP_TL

DOWN_TH:

JBK2,ASJ02;TH值调整(减少)

CALLDELAY

JBK2,ASJ02

JNBK2,$

MOVA,TEMP_TH;TH为0,应变为-1

ANLA,#80H

JNZDOWN_TH01

DECTEMP_TH

MOVA,TEMP_TH

CJNEA,#0FFH,ASJ011

MOVA,#81H

MOVTEMP_TH,A

JMPASJ011

DOWN_TH01:

INCTEMP_TH

MOVA,TEMP_TH

CJNEA,#0B8H,ASJ011

MOVTEMP_TH,#127

ASJ011:

MOV29H,#0BH;H的bcd码送百位

MOVR4,TEMP_TH

LCALLTHTL_BCD

LCALLTHTL_DISP

JMPDOWN_TH

ASJ02:

JBK3,ASJ03;TL值调整(减少)

CALLDELAY

JBK3,ASJ03

JNBK3,$

MOVA,TEMP_TL

ANLA,#80H

JNZASJ022

DECTEMP_TL

MOVA,TEMP_TL

CJNEA,#0FFH,ASJ021

MOVTEMP_TL,#81H

JMPASJ021

ASJ022:

INCTEMP_TL

MOVA,TEMP_TL

CJNEA,#0B8H,ASJ021

MOVTEMP_TL,#127

ASJ021:

MOV29H,#0CH;L的bcd码送百位

MOVR4,TEMP_TL

LCALLTHTL_BCD

LCALLTHTL_DISP

JMPASJ02

ASJ03:

JMPAS_K4

RET

;============================================

;TH/TL分离bcd码

;============================================

THTL_BCD:

CLR20H.2

MOVA,R4;十六进制->BCD

ANLA,#80H

JZTHTL_01

SETB20H.2

MOV2AH,#0AH;负号的bcd码

MOVA,R4

ANLA,#7FH

MOVB,#10

JMPTHTL_02

THTL_01:

MOVA,R4

MOVB,#100

DIVAB

MOV2AH,A;百位数的bcd码

MOVA,#10

XCHA,B

THTL_02:

DIVAB

MOV2BH,A;TEMPLH=十位数BCD

MOV2CH,B;TEMPLL=个位数BCD

RET

;=======================================================

;将设定的TH,TL值写入DS18B20内

;=======================================================

RE_18B20:

JBFLAG1,RE_18B20A

RET

RE_18B20A:

CALLRESET

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE

MOVA,#4EH;写暂存寄存器

LCALLWRITE

MOVA,TEMP_TH;TH(报警上限)

LCALLWRITE

MOVA,TEMP_TL;TL(报警下限)

LCALLWRITE

MOVA,#7FH;12位精确度

LCALLWRITE

RET

;------------------------------------------------------------

WRITE_E2:

CALLRESET

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE

MOVA,#48H;把暂存器里的温度报警值拷贝到EEROM

LCALLWRITE

RET

;--------------------------------------------------------------

READ_E2:

CALLRESET

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE

MOVA,#0B8H;把EEROM里的温度报警值拷贝回暂存器

CALLWRITE

RET

;====================================================

;实际温度值与报警温度比较

;====================================================

TEMP_COMP:

JBSIGN,ARM2

MOVA,TEMP_TH

ANLA,#80H

JNZCHULI

CLRC

MOVA,TEMP_ZH

SUBBA,TEMP_TH

JNCCHULI

MOVA,TEMP_TL

ANLA,#80H

JNZARM1

MOVA,TEMP_ZH

CLRC

SUBBA,TEMP_TL

JCCHULI

CLRBEEP

ARM1:

RET

ARM2:

MOVA,TEMP_TH

ANLA,#80H

JZARM21

CLRC

MOVA,TEMP_TH

ANLA,#7FH

MOVR5,TEMP_ZH

XCHA,R5

SUBBA,TEMP_TH

JCCHULI;温度大于TH,则跳转闪烁

ARM21:

MOVA,TEMP_TL

ANLA,#80H

JNZCHULI

MOVA,TEMP_TL

ANLA,#7FH

CLRC

MOVR5,TEMP_ZH

XCHA,R5

SUBBA,R5

JNCCHULI;温度小于TL,则跳转闪烁

CLRBEEP

RET

CHULI:

LCALLBEEP_BL

CLRBEEP

RET

;====================================================

;DS18B20复位初始化程序(已修改)

;====================================================

RESET:

SETBDQ

NOP

CLRDQ

MOVR1,#03

TSR1:

MOVR0,#80

DJNZR0,$;延时

DJNZR1,TSR1

SETBDQ;然后拉高数据线

NOP

MOVR0,#15;96微秒

TSR2:

JNBDQ,TSR3

DJNZR0,TSR2

JMPTSR4;延时

TSR3:

SETBFLAG1;置标志位,表示DS18B20存在

LJMPTSR5

TSR4:

CLRFLAG1;清标志位,表示DS18B20不存在

JMPTSR7

TSR5:

MOVR0,#115;200微秒

DJNZR0,$;延时

TSR7:

SETBDQ

RET

;==============================================================

;WRITE程序,从P3.3端口写一个字节(已修改)

;==============================================================

WRITE:

MOVR2,#8;一共8位数据

CLRC

WR1:

CLRDQ;开始写入DS18B20总线要处于复位(低)状态

MOVR3,#07

DJNZR3,$;总线复位保持16微妙以上

RRCA;把一个字节DATA分成8个BIT环移给C

MOVDQ,C;写入一个BIT

MOVR3,#3CH

DJNZR3,$;等待100微妙

SETBDQ;重新释放总线

NOP

DJNZR2,WR1;写入下一个BIT

SETBDQ

RET

;==============================================================

;READ程序,从18B20中读出温度低位、高位、TH、TL(已修改)

;==============================================================

READ:

MOVR4,#4;将温度低位、高位、TH、TL从DS18B20中读出

MOVR1,#TEMPL;存入25H、26H、27H、28H

RE00:

MOVR2,#8

RE01:

CLRCY

SETBDQ

NOP

NOP

CLRDQ;读前总线保持为低

NOP

NOP

NOP

SETBDQ;开始读总线释放

MOVR3,#09;延时18微妙

DJNZR3,$

MOVC,DQ;从DS18B20总线读得一个BIT

MOVR3,#3CH

DJNZR3,$;等待100微妙

RRCA;把读得的位值环移给A

DJNZR2,RE01;读下一个BIT

MOV@R1,A

INCR1

DJNZR4,RE00

RET

;*****************************************************

;处理温度BCD码子程序(已修改)

;***************************************F*************

CONV_TEMP:

CLRSIGN;符号标志位清零

MOVA,TEMPH;判温度是否零下

ANLA,#80H

JZTEMPC1;温度零上转TEMPC1

SETBSIGN;小于零,符号标志位置1

CLRC

MOVA,TEMPL;零下,二进制数求补(双字节)

CPLA;取反加1

ADDA,#01H

MOVTEMPL,A

MOVA,TEMPH

CPLA

ADDCA,#00H

MOVTEMPH,A

TEMPC1:

MOVA,TEMPL

ANLA,#0FH;小数位,精确到0.1

MOVDPTR,#TAB0

MOVCA,@A+DPTR

MOVTEMPLL,A;TEMPLL=小数部分BCD

MOVA,TEMPL;整数部分

ANLA,#0F0H;取出高四位

SWAPA

MOVTEMPL,A

MOVA,TEMPH;取出低四位

ANLA,#0FH

SWAPA

ORLA,TEMPL;重新组合

MOVTEMP_ZH,A

MOVB,#100;十六进制->BCD

DIVAB;B=A%100

MOVTEMPHH,A;TEMPHH=百位数

TEMPC3:

MOVA,#10

XCHA,B

DIVAB;B=A%B

MOVTEMPHL,A;TEMPHL=十位数BCD

MOVTEMPLH,B;TEMPLH=个位数BCD

RET

;==========================================================

;LED显示子程序(已修改)

;==========================================================

LED_DISP:

LCALLLED_BCD

MOVR0,#0FEH

MOVR1,#29H;待输出数据,百位

MOVR2,#02H;连续输出百位和十位

MOVDPTR,#TAB2

LED_DISP0:

MOVP2,#0FFH

MOVA,@R1

MOVCA,@A+DPTR

MOVP0,A

MOVA,R0

MOVP2,A

RLA

MOVR0,A

LCALLDELAY;延时5mS

INCR1

DJNZR2,LED_DISP0

MOVP2,#0FFH

MOVDPTR,#TAB1;输出个位

MOVA,@R1

MOVCA,@A+DPTR

MOVP0,A

CLRP2.2

LCALLDELAY;延时5mS

SETBP2.2

INCR1;输出小数部分

MOVA,@R1

MOVDPTR,#TAB2

MOVCA,@A+DPTR

MOVP0,A

CLRP2.3

LCALLDELAY;延时5mS

SETBP2.3

RET

;==========================================================

;THTL的显示

;==========================================================

THTL_DISP:

MOVR0,#0FEH

MOVR1,#29H;待输出数据

MOVR2,#04H;

MOVDPTR,#TAB2

THTL_DISP0:

MOVP2,#0FFH

MOVA,@R1

MOVCA,@A+DPTR

MOVP0,A

MOVA,R0

MOVP2,A

RLA

MOVR0,A

LCALLDELAY;延时5mS

INCR1

DJNZR2,THTL_DISP0

RET

;-------------------------------------------------------------

;个位部分码表(共阴极)

;-------------------------------------------------------------

TAB1:

DB0FDH,61H,0DBH,0F3H,67H

DB0B7H,0BFH,0E1H,0FFH,0F7H

TAB0:

DB00H,01H,01H,02H,03H,03H,04H,04H

DB05H,06H,06H,07H,08H,08H,09H,09H

;-------------------------------------------------------------

;小数、十位、百位、符号等码表(共阴极)

;-------------------------------------------------------------

TAB2:

DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH

DB0E0H,0FEH,0F6H,02H,6EH,1CH,00H

;(-HL熄灭)

;(0A0B0C0D)

;-----------------------------------------------------------------

;符号的显示位置调整程序(已修改)

;-----------------------------------------------------------------

LED_BCD:

MOVA,TEMPHH

JZLED_BCD1;百位为零,转移

RET;百位不为零,返回

LED_BCD1:

MOVA,TEMPHL

JZLED_BCD3;十位为零,转移

JBSIGN,LED_BCD2;温度零下,转移

MOVTEMPHH,#0DH;温度大于零且为两位数,百位熄灭

SJMPLED_BCD5

LED_BCD2:

MOVTEMPHH,#0AH;温度小于零且为两位数,百位显示负号

SJMPLED_BCD5

LED_BCD3:

MOVTEMPHH,#0DH;温度小于10,百

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1