DS18B20温度控制系统数码管显示总汇编非常详细Word文档下载推荐.docx
- 文档编号:6440602
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:25
- 大小:18.81KB
DS18B20温度控制系统数码管显示总汇编非常详细Word文档下载推荐.docx
《DS18B20温度控制系统数码管显示总汇编非常详细Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《DS18B20温度控制系统数码管显示总汇编非常详细Word文档下载推荐.docx(25页珍藏版)》请在冰点文库上搜索。
中断计数
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
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
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;
指向下一个地址
放回R5
JNBACC.3,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS18B20 温度 控制系统 数码管 显示 总汇 非常 详细