最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx

上传人:b****6 文档编号:8400989 上传时间:2023-05-11 格式:DOCX 页数:21 大小:19.38KB
下载 相关 举报
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第1页
第1页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第2页
第2页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第3页
第3页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第4页
第4页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第5页
第5页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第6页
第6页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第7页
第7页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第8页
第8页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第9页
第9页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第10页
第10页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第11页
第11页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第12页
第12页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第13页
第13页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第14页
第14页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第15页
第15页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第16页
第16页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第17页
第17页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第18页
第18页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第19页
第19页 / 共21页
最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx

《最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx》由会员分享,可在线阅读,更多相关《最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx(21页珍藏版)》请在冰点文库上搜索。

最新DS18B20温度控制数码管显示汇编非常详细文档格式.docx

MOVTIMER_COUN,#00H;

中断计数

MOVIE,#82H;

EA=1,ET0=1

LCALLREAD_E2

;

LCALLRE_18B20

MOV20H,#00H

SETBBEEP

SETBRELAY

MOV7FH,#0AH;

熄灭符

CALLRESET;

复位与检测DS18B20

JNBFLAG1,MAIN1;

FLAG1=0,DS18B20不存在

JMPSTART

MAIN1:

CALLRESET

JBFLAG1,START

LCALLBEEP_BL;

DS18B20错误,报警

JMPMAIN1

START:

MOVA,#0CCH;

跳过ROM匹配

CALLWRITE

MOVA,#044H;

发出温度转换命令

MOVA,#0BEH;

发出读温度命令

CALLREAD;

读温度数据

CALLCONVTEMP

CALLDISPBCD

CALLDISP1

CALLSCANKEY

LCALLTEMP_COMP

=====================================================

DS18B20复位与检测子程序

FLAG1=1OK,FLAG1=0ERROR

======================================================

RESET:

SETBDATA_LINE

NOP

CLRDATA_LINE

MOVR0,#64H;

主机发出延时600微秒的复位低脉冲

MOVR1,#03H

RESET1:

DJNZR0,$

MOVR0,#64H

DJNZR1,RESET1

SETBDATA_LINE;

然后拉高数据线

MOVR0,#25H

RESET2:

JNBDATA_LINE,RESET3;

等待DS18B20回应

DJNZR0,RESET2

JMPRESET4;

延时

RESET3:

SETBFLAG1;

置标志位,表示DS1820存在

JMPRESET5

RESET4:

CLRFLAG1;

清标志位,表示DS1820不存在

JMPRESET6

RESET5:

MOVR0,#064H

DJNZR0,$;

时序要求延时一段时间

RESET6:

RET

===========================================================

WRITE:

MOVR2,#8;

一共8位数据

CLRCY

WR1:

CLRDATA_LINE;

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

MOVR3,#09

DJNZR3,$;

总线复位保持18微妙以上

RRCA;

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

MOVDATA_LINE,C;

写入一个BIT

MOVR3,#23

等待46微妙

重新释放总线

DJNZR2,WR1;

写入下一个BIT

============================================================

从DS18B20中读出温度低位、高位和报警值TH、TL

存入26H、27H、28H、29H

READ:

MOVR4,#4;

将温度高位和低位从DS18B20中读出

MOVR1,#26H;

存入26H、27H、28H、29H

RE00:

MOVR2,#8

RE01:

CLRC

读前总线保持为低

开始读总线释放

MOVR3,#09;

延时18微妙

DJNZR3,$

MOVC,DATA_LINE;

从DS18B20总线读得一个BIT

把读得的位值环移给A

DJNZR2,RE01;

读下一个BIT

MOV@R1,A

INCR1

DJNZR4,RE00

RET

--------------------------------------------

200ms对闪动标记取反一次

INT_T0:

PUSHACC

PUSHPSW

MOVTL0,TIMER_L

MOVTH0,TIMER_H

INCTIMER_COUN

MOVA,TIMER_COUN

CJNEA,#04H,INT_END

MOVTIMER_COUN,#00H

CPLFLAG2

INT_END:

POPPSW

POPACC

RETI

==========================================================

重新对DS18B20初始化

将设定的温度报警值写入DS18B20

RE_18B20:

JBFLAG1,RE_18B20A

RE_18B20A:

跳过ROM匹配

LCALLWRITE

MOVA,#4EH;

写暂存寄存器

MOVA,TEMP_TH;

TH(报警上限)

MOVA,TEMP_TL;

TL(报警下限)

MOVA,#7FH;

12位精确度

====================================================

功能键扫描子程序

SCANKEY:

MOVP1,#0F0H

JBK1,SCAN_K2

CALLBEEP_BL

SCAN_K1:

CALLALERT_TL

CALLALERT_PLAY

JBK1,SCAN_K1

SCAN_K11:

CALLALERT_TH

JBK1,SCAN_K11

SCAN_K2:

JBK2,SCAN_K3

SCAN_K3:

JBK3,SCAN_K4

LCALLRESET_ALERT

LCALLRE_18B20

LCALLWRITE_E2

SCAN_K4:

JBK4,SCAN_END

SCAN_END:

================================================

设置温度报警值

RESET_ALERT:

JNBK3,$;

K3为位移键

SETBTR0

RESET_TL:

JNBFLAG2,R_TL01

mov75H,7fh;

送入熄灭符

mov76H,7fh

JMPR_TL02

R_TL01:

mov75h,7Eh;

送设定值

mov76h,7Dh

CALLALERT_PLAY;

显示设定值

R_TL02:

JNBK1,K011A

JNBK2,K011B

JNBK3,RESET_TH

JMPRESET_TL

K011A:

INCTEMP_TL

MOVA,TEMP_TL

CJNEA,#120,K012A;

没有到设定上限值,转

MOVTEMP_TL,#0

K012A:

CALLTL_DEL

K011B:

DECTEMP_TL

CJNEA,#00H,K012B;

没有到设定下限值,转

MOVTEMP_TL,#119

K012B:

-------------------------------------------------------

RESET_TH:

JNBK3,$

RESET_TH1:

JNBFLAG2,R_TH01

JMPR_TH02

R_TH01:

R_TH02:

JNBK1,K021A

JNBK2,K021B

JNBK3,K002

JMPRESET_TH1

K021A:

INCTEMP_TH

MOVA,TEMP_TH

CJNEA,#120,K022A;

MOVTEMP_TH,#0

K022A:

CALLTH_DEL

K021B:

DECTEMP_TH;

减1

CJNEA,#00H,K022B;

MOVTEMP_TH,#119

K022B:

K002:

CLRTR0;

关闭中断

-----------------------------------------------------

键延时子程序

多次调用报警值显示程序来延时

TL_DEL:

报警低值延时

MOVR2,#0AH

TL_DEL1:

DJNZR2,TL_DEL1

TH_DEL:

报警高值延时

TH_DEL1:

DJNZR2,TH_DEL1

实时温度值与设定报警温度值TH、TL比较子程序

当实际温度大于TH的设定值时,显示“H”,继电器关闭。

当实际温度小于TH的设定值时,显示“O”,继电器吸合。

当实际温度小于TL的设定值时,显示“L”。

闪动显示标记符H、L、O

TEMP_COMP:

SETBTR0;

启动中断

SUBBA,TEMP_ZH;

减数>

被减数,则

JCCHULI1;

借位标志位C=1,转

MOVA,TEMP_ZH

SUBBA,TEMP_TL;

JCCHULI2;

JNBFLAG2,T_COMP1;

FLAG2=0,显示标记字符

MOV74H,#0AH;

LCALLDISP1

JMPT_COMP2

T_COMP1:

MOV74H,#00H

LCALLDISP1;

显示"

O"

T_COMP2:

CLRRELAY;

继电器吸合

---------------------------------------------

超温处理

CHULI1:

SETBRELAY;

继电器关闭

JNBFLAG2,CHULI10

JMPCHULI11

CHULI10:

MOV74H,#0DH

H"

CALLBEEP_BL;

蜂鸣器响

CHULI11:

欠温处理

CHULI2:

JNBFLAG2,CHULI20

JMPCHULI21

CHULI20:

MOV74H,#0CH

L"

CHULI21:

------------------------------------------------------------

把DS18B20暂存器里的温度报警值拷贝到EEROM

WRITE_E2:

MOVA,#48H;

温度报警值拷贝到EEROM

--------------------------------------------------------------

把DS18B20EEROM里的温度报警值拷贝回暂存器

-------------------------------------------------------------

READ_E2:

MOVA,#0B8H;

温度报警值拷贝回暂存器

*****************************************************

处理温度BCD码子程序

****************************************************

CONVTEMP:

MOVA,TEMPH;

判温度是否零下

ANLA,#80H

JZTEMPC1;

温度零上转

MOVA,TEMPL;

二进制数求补(双字节)

CPLA;

取反加1

ADDA,#01H

MOVTEMPL,A

CPLA

ADDCA,#00H

MOVTEMPH,A;

TEMPHCHI=符号位

MOVTEMPHC,#0BH

SJMPTEMPC11

TEMPC1:

MOVTEMPHC,#0AH;

TEMPC11:

MOVA,TEMPHC

SWAPA

MOVTEMPHC,A

MOVA,TEMPL

ANLA,#0FH;

乘0.0625

MOVDPTR,#TEMPDOTTAB

MOVCA,@A+DPTR

MOVTEMPLC,A;

TEMPLCLOW=小数部分BCD

整数部分

ANLA,#0F0H

MOVA,TEMPH

ANLA,#0FH

ORLA,TEMPL

MOVTEMP_ZH,A;

组合后的值存入TEMP_ZH

LCALLHEX2BCD1

ORLA,TEMPHC;

TEMPHCLOW=十位数BCD

SWAPA;

TEMPLCHI=个位数BCD

ORLA,TEMPLC

MOVTEMPLC,A

MOVA,R7

JZTEMPC12

MOVR7,A

MOVA,TEMPHC;

TEMPHCHI=百位数BCD

ORLA,R7

TEMPC12:

-----------------------------------------------------------

小数部分码表

TEMPDOTTAB:

DB00H,01H,01H,02H,03H,03H,04H,04H,05H,06H

DB06H,07H,08H,08H,09H,09H

显示区BCD码温度值刷新子程序

DISPBCD:

MOVA,TEMPLC

MOV70H,A;

小数位

MOV71H,A;

个位

MOV72H,A;

十位

MOV73H,A;

百位

CJNEA,#010H,DISPBCD0

SJMPDISPBCD2

DISPBCD0:

JNZDISPBCD2;

十位数是0

MOV73H,#0AH;

符号位不显示

十位数显示符号

DISPBCD2:

***************************************************************

温度显示子程序

显示数据在70H-73H单元内,用4位共阳数码管显示,P0口输出段码数据,

P2口作扫描控制,每个LED数码管亮2MS时间再逐位循环。

DISP1:

MOVR1,#70H;

指向显示数据首址

MOVR5,#7FH;

扫描控制字初值

PLAY:

MOVP0,#0FFH

MOVA,R5;

扫描字放入A

MOVP2,A

MOVA,@R1;

取显示数据到A

MOVDPTR,#TAB;

取段码表地址

MOVCA,@A+DPTR;

查显示数据对应段码

MOVP0,A;

段码放入P0口

MOVA,R5

JBACC.6,LOOP5;

小数点处理

CLRP0.7

LOOP5:

LCALLDL_MS;

显示2MS

INCR1;

指向下一个地址

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2