DS18B20温度控制系统数码管显示总汇编非常详细.docx

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

DS18B20温度控制系统数码管显示总汇编非常详细.docx

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

DS18B20温度控制系统数码管显示总汇编非常详细.docx

DS18B20温度控制系统数码管显示总汇编非常详细

;DS18B20温度控制数码管显示(汇编非常详细)*

;*1、P1.6=→进入设定温度报警值TL状态:

*

;*L--20*

;*2、P1.6→进入设定温度报警值TH状态:

*

;*H--28*

;*3、P1.6→返回*

;*4、设定过程:

P1.4→加键(UP),P1.5→减键(DOWN),可快速调。

*

;***

 

TIMER_LDATA23H

TIMER_HDATA24H

TIMER_COUNDATA25H

TEMPLDATA26H

TEMPHDATA27H

TEMP_THDATA28H

TEMP_TLDATA29H

TEMPHCDATA2AH

TEMPLCDATA2BH

TEMP_ZHDATA2CH

BEEPEQUP3.7

DATA_LINEEQUP3.3

RELAYEQUP1.3

FLAG1EQU20H.0

FLAG2EQU20H.1

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

K1EQUP1.4

K2EQUP1.5

K3EQUP1.6

K4EQUP1.7

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

ORG0000H

JMPMAIN

ORG000BH

AJMPINT_T0

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

MAIN:

MOVSP,#30H

MOVTMOD,#01H;T0,方式1

MOVTIMER_L,#00H;50ms定时值

MOVTIMER_H,#4CH

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;发出温度转换命令

CALLWRITE

CALLRESET

MOVA,#0CCH;跳过ROM匹配

CALLWRITE

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

CALLWRITE

CALLREAD;读温度数据

CALLCONVTEMP

CALLDISPBCD

CALLDISP1

CALLSCANKEY

LCALLTEMP_COMP

JMPMAIN1

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

;DS18B20复位与检测子程序

;FLAG1=1OK,FLAG1=0ERROR

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

RESET:

SETBDATA_LINE

NOP

CLRDATA_LINE

MOVR0,#64H;主机发出延时600微秒的复位低脉冲

MOVR1,#03H

RESET1:

DJNZR0,$

MOVR0,#64H

DJNZR1,RESET1

SETBDATA_LINE;然后拉高数据线

NOP

MOVR0,#25H

RESET2:

JNBDATA_LINE,RESET3;等待DS18B20回应

DJNZR0,RESET2

JMPRESET4;延时

RESET3:

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

JMPRESET5

RESET4:

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

JMPRESET6

RESET5:

MOVR0,#064H

DJNZR0,$;时序要求延时一段时间

RESET6:

SETBDATA_LINE

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

DJNZR3,$;等待46微妙

SETBDATA_LINE;重新释放总线

NOP

DJNZR2,WR1;写入下一个BIT

SETBDATA_LINE

RET

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

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

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

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

READ:

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

MOVR1,#26H;存入26H、27H、28H、29H

RE00:

MOVR2,#8

RE01:

CLRC

SETBDATA_LINE

NOP

NOP

CLRDATA_LINE;读前总线保持为低

NOP

NOP

NOP

SETBDATA_LINE;开始读总线释放

MOVR3,#09;延时18微妙

DJNZR3,$

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

MOVR3,#23

DJNZR3,$;等待46微妙

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

DJNZR2,RE01;读下一个BIT

MOVR1,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

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

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

;功能键扫描子程序

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

SCANKEY:

MOVP1,#0F0H

JBK1,SCAN_K2

CALLBEEP_BL

SCAN_K1:

CALLALERT_TL

CALLALERT_PLAY

JBK1,SCAN_K1

CALLBEEP_BL

SCAN_K11:

CALLALERT_TH

CALLALERT_PLAY

JBK1,SCAN_K11

CALLBEEP_BL

SCAN_K2:

JBK2,SCAN_K3

CALLBEEP_BL

SCAN_K3:

JBK3,SCAN_K4

CALLBEEP_BL

LCALLRESET_ALERT

LCALLRE_18B20

LCALLWRITE_E2

SCAN_K4:

JBK4,SCAN_END

CALLBEEP_BL

SCAN_END:

RET

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

;设置温度报警值

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

RESET_ALERT:

CALLALERT_TL

CALLALERT_PLAY

JNBK3,$;K3为位移键

SETBTR0

RESET_TL:

CALLALERT_PLAY

JNBFLAG2,R_TL01

mov75H,7fh;送入熄灭符

mov76H,7fh

CALLALERT_PLAY

JMPR_TL02

R_TL01:

CALLALERT_TL

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

JMPRESET_TL

K011B:

DECTEMP_TL

MOVA,TEMP_TL

CJNEA,#00H,K012B;没有到设定下限值,转

MOVTEMP_TL,#119

K012B:

CALLTL_DEL

JMPRESET_TL

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

RESET_TH:

CALLBEEP_BL

JNBK3,$

RESET_TH1:

CALLALERT_PLAY

JNBFLAG2,R_TH01

mov75H,7fh;送入熄灭符

mov76H,7fh

CALLALERT_PLAY

JMPR_TH02

R_TH01:

CALLALERT_TH

mov75h,7Eh;

mov76h,7Dh

CALLALERT_PLAY

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

JMPRESET_TH1

K021B:

DECTEMP_TH;减1

MOVA,TEMP_TH

CJNEA,#00H,K022B;没有到设定下限值,转

MOVTEMP_TH,#119

K022B:

CALLTH_DEL

JMPRESET_TH1

K002:

CALLBEEP_BL

CLRTR0;关闭中断

RET

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

;键延时子程序

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

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

TL_DEL:

;报警低值延时

MOVR2,#0AH

TL_DEL1:

CALLALERT_TL

CALLALERT_PLAY

DJNZR2,TL_DEL1

RET

TH_DEL:

;报警高值延时

MOVR2,#0AH

TH_DEL1:

CALLALERT_TH

CALLALERT_PLAY

DJNZR2,TH_DEL1

RET

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

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

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

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

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

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

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

TEMP_COMP:

SETBTR0;启动中断

MOVA,TEMP_TH

SUBBA,TEMP_ZH;减数>被减数,则

JCCHULI1;借位标志位C=1,转

MOVA,TEMP_ZH

SUBBA,TEMP_TL;减数>被减数,则

JCCHULI2;借位标志位C=1,转

JNBFLAG2,T_COMP1;FLAG2=0,显示标记字符

MOV74H,#0AH;熄灭符

LCALLDISP1

JMPT_COMP2

T_COMP1:

MOV74H,#00H

LCALLDISP1;显示"O"

T_COMP2:

CLRRELAY;继电器吸合

CLRTR0;关闭中断

RET

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

;超温处理

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

CHULI1:

SETBRELAY;继电器关闭

JNBFLAG2,CHULI10

MOV74H,#0AH;熄灭符

LCALLDISP1

JMPCHULI11

CHULI10:

MOV74H,#0DH

LCALLDISP1;显示"H"

;CALLBEEP_BL;蜂鸣器响

CHULI11:

CLRTR0;关闭中断

RET

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

;欠温处理

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

CHULI2:

;欠温处理

JNBFLAG2,CHULI20

MOV74H,#0AH;熄灭符

LCALLDISP1

JMPCHULI21

CHULI20:

MOV74H,#0CH

LCALLDISP1;显示"L"

;CALLBEEP_BL;蜂鸣器响

CHULI21:

CLRTR0;关闭中断

RET

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

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

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

WRITE_E2:

CALLRESET

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE

MOVA,#48H;温度报警值拷贝到EEROM

LCALLWRITE

RET

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

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

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

READ_E2:

CALLRESET

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE

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

CALLWRITE

RET

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

;处理温度BCD码子程序

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

CONVTEMP:

MOVA,TEMPH;判温度是否零下

ANLA,#80H

JZTEMPC1;温度零上转

CLRC

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

CPLA;取反加1

ADDA,#01H

MOVTEMPL,A

MOVA,TEMPH;-

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

MOVA,TEMPL;整数部分

ANLA,#0F0H

SWAPA

MOVTEMPL,A

MOVA,TEMPH

ANLA,#0FH

SWAPA

ORLA,TEMPL

MOVTEMP_ZH,A;组合后的值存入TEMP_ZH

LCALLHEX2BCD1

MOVTEMPL,A

ANLA,#0F0H

SWAPA

ORLA,TEMPHC;TEMPHCLOW=十位数BCD

MOVTEMPHC,A

MOVA,TEMPL

ANLA,#0FH

SWAPA;TEMPLCHI=个位数BCD

ORLA,TEMPLC

MOVTEMPLC,A

MOVA,R7

JZTEMPC12

ANLA,#0FH

SWAPA

MOVR7,A

MOVA,TEMPHC;TEMPHCHI=百位数BCD

ANLA,#0FH

ORLA,R7

MOVTEMPHC,A

TEMPC12:

RET

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

;小数部分码表

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

TEMPDOTTAB:

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

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

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

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

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

DISPBCD:

MOVA,TEMPLC

ANLA,#0FH

MOV70H,A;小数位

MOVA,TEMPLC

SWAPA

ANLA,#0FH

MOV71H,A;个位

MOVA,TEMPHC

ANLA,#0FH

MOV72H,A;十位

MOVA,TEMPHC

SWAPA

ANLA,#0FH

MOV73H,A;百位

MOVA,TEMPHC

ANLA,#0F0H

CJNEA,#010H,DISPBCD0

SJMPDISPBCD2

DISPBCD0:

MOVA,TEMPHC

ANLA,#0FH

JNZDISPBCD2;十位数是0

MOVA,TEMPHC

SWAPA

ANLA,#0FH

MOV73H,#0AH;符号位不显示

MOV72H,A;十位数显示符号

DISPBCD2:

RET

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

;温度显示子程序

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

;显示数据在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;指向下一个地址

MOVA,R5;放回R5

JNBACC.3,

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

当前位置:首页 > 人文社科 > 法律资料

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

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