51单片机操作DS18B20汇编源程序

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机操作DS18B20汇编源程序

推荐

; FLAG1:标志位,为"1"时表示检测到DS18B20

; DQ:DS18B20的数据总线接脚

; TEMPER_NUM:保存读出的温度数据

; 本程序仅适合单个DS18B20和51单片机的连接,晶振为12MHZ左右TEMPER_LEQU36H

TEMPER_HEQU35H

DQBITP1.7

; DS18B20初始化程序

;//*****************************************//

INIT_1820:

SETBDQ

NOP

CLRDQ

MOVR0,#06BH

TSR1:

DJNZR0,TSR1; 延时

SETBDQ

MOVR0,#25H

TSR2:

JNBDQ,TSR3

DJNZR0,TSR2

LJMPTSR4; 延时

TSR3:

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

LJMPTSR5

TSR4:

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

LJMPTSR7

TSR5:

MOVR0,#06BH

TSR6:

DJNZR0,TSR6; 延时

TSR7:

SETBDQ

RET

;//*****************************************//

; 重新写DS18B20暂存存储器设定值

;//*****************************************// RE_CONFIG:

JBFLAG1,RE_CONFIG1; 若DS18B20存在,转RE_CONFIG1 RET

RE_CONFIG1:

MOVA,#0CCH; 发SKIP ROM命令

LCALLWRITE_1820

MOVA,#4EH; 发写暂存存储器命令

LCALLWRITE_1820

MOVA,#00H; TH(报警上限)中写入00H

LCALLWRITE_1820

MOVA,#00H; TL(报警下限)中写入00H

LCALLWRITE_1820

MOVA,#1FH; 选择9位温度分辨率

LCALLWRITE_1820

RET

;//*****************************************//

; 读出转换后的温度值

;//*****************************************// GET_TEMPER:

SETBDQ; 定时入口

LCALLINIT_1820

JBFLAG1,TSS2

RET; 若DS18B20不存在则返回

TSS2:

MOVA,#0CCH; 跳过ROM匹配

LCALLWRITE_1820

MOVA,#44H; 发出温度转换命令

LCALLWRITE_1820

LCALLINIT_1820

MOVA,#0CCH; 跳过ROM匹配

LCALLWRITE_1820

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

LCALLWRITE_1820

LCALLREAD_1820

MOVTEMPER_NUM,A; 将读出的温度数据保存

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

相关文档
最新文档