DS18B20温度控制数码管显示汇编非常详细Word格式文档下载.docx
《DS18B20温度控制数码管显示汇编非常详细Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《DS18B20温度控制数码管显示汇编非常详细Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
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匹配
MOVA,#0BEH;
发出读温度命令
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;
然后拉高数据线
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:
CALLAL