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

上传人:b****2 文档编号:637787 上传时间:2022-10-11 格式:DOCX 页数:22 大小:39.96KB
下载 相关 举报
DS18B20温度控制数码管显示汇编非常详细.docx_第1页
第1页 / 共22页
DS18B20温度控制数码管显示汇编非常详细.docx_第2页
第2页 / 共22页
DS18B20温度控制数码管显示汇编非常详细.docx_第3页
第3页 / 共22页
DS18B20温度控制数码管显示汇编非常详细.docx_第4页
第4页 / 共22页
DS18B20温度控制数码管显示汇编非常详细.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

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

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

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

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

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

转换命令

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

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

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

CALLAL

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

当前位置:首页 > 总结汇报 > 学习总结

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

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