DS18B20汇编程序.docx
- 文档编号:9359656
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:14
- 大小:16.52KB
DS18B20汇编程序.docx
《DS18B20汇编程序.docx》由会员分享,可在线阅读,更多相关《DS18B20汇编程序.docx(14页珍藏版)》请在冰豆网上搜索。
DS18B20汇编程序
DS18B20汇编程序,1602液晶显示2006-1-139:
44:
34
TEMPER_LEQU36H
TEMPER_HEQU35H
TEMPER_NUMEQU60H
FLAG1BIT00H
DQBITP3.3
RSEQUP3.7;RS<---->P2.0
RWEQUP3.6;R/W<--->P2.1
EEQUP3.5;E<----->P2.2
LCD_DBEQUP1
AAA:
MOVSP,#70H
LCALLGET_TEMPER
LCALLTEMPER_COV
LCALLDISPLAY;调用显示子程序
LJMPAAA
NOP
;------------------读出转换后的温度值
GET_TEMPER:
SETBDQ;定时入口
BCD:
LCALLINIT_1820
JBFLAG1,S22
LJMPCC;若DS18B20不存在则返回
S22:
LCALLDELAY1
MOVA,#0CCH;跳过ROM匹配------0CC
LCALLWRITE_1820
MOVA,#44H;发出温度转换命令
LCALLWRITE_1820
NOP
LCALLDELAY
LCALLDELAY
CBA:
LCALLINIT_1820
JBFLAG1,ABC
LJMPCBA
ABC:
LCALLDELAY1
MOVA,#0CCH;跳过ROM匹配
LCALLWRITE_1820
MOVA,#0BEH;发出读温度命令
LCALLWRITE_1820
LCALLREAD_18200;READ_1820
RET
;------------------读DS18B20的程序,从DS18B20中读出一个字节的数据
READ_1820:
MOVR2,#8
RE1:
CLRC
SETBDQ
NOP
NOP
CLRDQ
NOP
NOP
NOP
SETBDQ
MOVR3,#7
DJNZR3,$
MOVC,DQ
MOVR3,#23
DJNZR3,$
RRCA
DJNZR2,RE1
RET
;-------------------写DS18B20的程序
WRITE_1820:
MOVR2,#8
CLRC
WR1:
CLRDQ
MOVR3,#6
DJNZR3,$
RRCA
MOVDQ,C
MOVR3,#23
DJNZR3,$
SETBDQ
NOP
DJNZR2,WR1
SETBDQ
RET
;-------------------读DS18B20的程序,从DS18B20中读出两个字节的温度数据
READ_18200:
MOVR4,#2;将温度高位和低位从DS18B20中读出
MOVR1,#36H;低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
RE00:
MOVR2,#8
RE01:
CLRC
SETBDQ
NOP
NOP
CLRDQ
NOP
NOP
NOP
SETBDQ
MOVR3,#7
DJNZR3,$
MOVC,DQ
MOVR3,#23
DJNZR3,$
RRCA
DJNZR2,RE01
MOV@R1,A
DECR1
DJNZR4,RE00
RET
;-------------------将从DS18B20中读出的温度数据进行转换
TEMPER_COV:
MOVA,#0F0H
ANLA,TEMPER_L;舍去温度低位中小数点后的四位温度数值
SWAPA
MOVTEMPER_NUM,A
MOVA,TEMPER_L
JNBACC.3,TEMPER_COV1;四舍五入去温度值
INCTEMPER_NUM
TEMPER_COV1:
MOVA,TEMPER_H
ANLA,#07H
SWAPA
ORLA,TEMPER_NUM
MOVTEMPER_NUM,A;保存变换后的温度数据
LCALLBIN_BCD
RET
;-------------------将16进制的温度数据转换成压缩BCD码
BIN_BCD:
MOVDPTR,#TEMP_TAB
MOVA,TEMPER_NUM
MOVCA,@A+DPTR
MOVTEMPER_NUM,A
RET
TEMP_TAB:
DB00H,01H,02H,03H,04H,05H,06H,07HDB08H,09H,10H,11H,12H,13H,14H,15HDB16H,17H,18H,19H,20H,21H,22H,23HDB24H,25H,26H,27H,28H,29H,30H,31HDB32H,33H,34H,35H,36H,37H,38H,39HDB40H,41H,42H,43H,44H,45H,46H,47HDB48H,49H,50H,51H,52H,53H,54H,55HDB56H,57H,58H,59H,60H,61H,62H,63HDB64H,65H,66H,67H,68H,69H,70H,71HDB72H,73H,74H,75H,76H,77H,78H,79HDB80H,81H,82H,83H,84H,85H,86H,87HDB88H,89H,90H,91H,92H,93H,94H,95H
DB96H,97H,98H,99H
;-------------------DS18B20初始化程序
INIT_1820:
SETBDQ
NOP
CLRDQ
MOVR0,#80H
TSR1:
DJNZR0,TSR1;延时
SETBDQ
MOVR0,#25H;96US-25H
TSR2:
DJNZR0,TSR2
JNBDQ,TSR3
LJMPTSR4;延时
TSR3:
SETBFLAG1;置标志位,表示DS1820存在
LJMPTSR5
TSR4:
CLRFLAG1;清标志位,表示DS1820不存在
LJMPTSR7
TSR5:
MOVR0,#06BH;200US
TSR6:
DJNZR0,TSR6;延时
TSR7:
SETBDQ
RET
;------------------重新写DS18B20暂存存储器设定值
RE_CONFIG:
JBFLAG1,RE_CONFIG1;若DS18B20存在,转RE_CONFIG1
RET
RE_CONFIG1:
MOVA,#0CCH;发SKIPROM命令
LCALLWRITE_1820
MOVA,#4EH;发写暂存存储器命令
LCALLWRITE_1820
MOVA,#00H;TH(报警上限)中写入00H
LCALLWRITE_1820
MOVA,#00H;TL(报警下限)中写入00H
LCALLWRITE_1820
MOVA,#7FH;选择12位温度分辨率
LCALLWRITE_1820
RET
;------------------延时子程序
DELAY:
MOVR7,#00H
MIN:
DJNZR7,YS500
RET
YS500:
LCALLYS500US
LJMPMIN
YS500US:
MOVR6,#00H
DJNZR6,$
RET
DELAY1:
MOVR7,#20H
DJNZR7,$
RET
;显示子程序
display:
ACALLLCD_INT
MOVP1,#01H;清屏
ACALLENABLE
MOVP1,#81H
LCALLENABLE
MOVP1,#'T'
LCALLWRITER
MOVP1,#'='
LCALLWRITER
CLRC
LJMPDISP3
RET
;说明:
使用前,必须先对液晶显示模块进行初始化。
然后,先把
;显示地址(位置)送到液晶模块的数据口,再调用"ENABLE"
;子程序把这个地址送入模块中。
之后,把要显示的字符的
;ASCII码送到液晶模块的数据口,再调用"WRITER"子程序
;把这个数据送入模块中让它显示出来。
;
;======液晶模块初始化,一般放在程序开头=======
LCD_INT:
MOVLCD_DB,#01H;清屏
ACALLENABLE
MOVLCD_DB,#38H;工作方式设置
ACALLENABLE
MOVLCD_DB,#0CH;显示状态设置
ACALLENABLE
MOVLCD_DB,#06H;输入方式设置
ACALLENABLE
RET
;==============初始化结束=====================
;
;*****************************************************************************
DISP3:
MOVA,TEMPER_NUM
ANLA,#0F0H
SWAPA
LCALLNEX0
MOVA,TEMPER_NUM
ANLA,#0FH
LCALLNEX0
;MOVP1,#2EH
;LCALLWRITER
;MOVA,TEMPER_L
;ANLA,#0FH
;MOVDPTR,#TAB2
;MOVCA,@A+DPTR
;MOV36H,A
;ANLA,#0F0H
;SWAPA
;LCALLNEX0
;MOVA,36H
;ANLA,#0FH
;LCALLNEX0
;MOVP1,#0DFH
;LCALLWRITER
;MOVP1,#43H
;LCALLWRITER
RET
CC:
ACALLLCD_INT
MOVP1,#01H;清屏
ACALLENABLE
LCALLENABLE
MOVP1,#'N'
LCALLWRITER
MOVP1,#'O'
JMPDD
NEX0:
CJNEA,#00H,NEX1
MOVP1,#30H
LJMPNEX10
NEX1:
CJNEA,#01H,NEX2
MOVP1,#31H
LJMPNEX10
NEX2:
CJNEA,#02H,NEX3
MOVP1,#32H
LJMPNEX10
NEX3:
CJNEA,#03H,NEX4
MOVP1,#33H
LJMPNEX10
NEX4:
CJNEA,#04H,NEX5
MOVP1,#34H
LJMPNEX10
NEX5:
CJNEA,#05H,NEX6
MOVP1,#35H
LJMPNEX10
NEX6:
CJNEA,#06H,NEX7
MOVP1,#36H
LJMPNEX10
NEX7:
CJNEA,#07H,NEX8
MOVP1,#37H
LJMPNEX10
NEX8:
CJNEA,#08H,NEX9
MOVP1,#38H
LJMPNEX10
NEX9:
CJNEA,#09H,NEX11
MOVP1,#39H
NEX10:
LCALLWRITER
NEX11:
RET
;===================模块的各个子程序===========================
;
;=======RS=0,RW=0,E=1,使模块工作并准备接收控制指令===========
ENABLE:
CLRRS
CLRRW
CLRE
ACALLWAIT
SETBE
RET
;
;===读BF值,对模块进行任何操作前必须判断模块是否"忙"(BF=1);如果不"忙"(BF=0)才可以进行各种操作
WAIT:
MOVLCD_DB,#0FFH
CLRRS
SETBRW
CLRE
NOP
SETBE
JBLCD_DB.7,WAIT
RET
;
;=====RS=1,RW=0,E=1,写显示数据到模块指令============
WRITER:
SETBRS
CLRRW
CLRE
ACALLWAIT
SETBE
RET
;
;==============延时==========================
DELAY1S:
MOVR5,#01
DL4_PA:
MOVR6,#100
DL4_PB:
MOVR7,#100
DJNZR7,$
DJNZR6,DL4_PB
DJNZR5,DL4_PA
RET
;===========================================
DD:
NOP
End
忘了说,
51单片机必须12M晶振
否则就要改程序了
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS18B20 汇编程序