新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 18b20程序及应用

18b20程序及应用

作者:时间:2011-07-29来源:网络收藏

指令 说明

本文引用地址:http://www.eepw.com.cn/article/150417.htm

DJNZ R7,LOOP0
RET
TAB:DB 0C0H,0F9H,0A4H,0B0H
DB 99H, 92H, 82H, 0F8H
DB 80H, 90H, 88H, 83H
DB 0C6H,0A1H,86H, 8EH
DB 0FFH
END

温度转换(44H) 启动在线ds18B20做温度AD转换
读数据(BEH) 从高速暂存器读9位温度值和CRC值
写数据(4EH) 将数据写入高速暂存的第3和第4字节中
复制(48H) 将高速暂存器中第3和第4字节复制到EERAM
读EERAM(B8H) 将EERAM内容写入高速暂存器中第3和第4字节
读电源供电方式(B4H) 了解18B20的供电方式

WENDU_L EQU 29H;用于保存读出温度的低字节
WENDU_H EQU 28H;用于保存读出温度的高字节
XIAOSHU EQU 27H;用于保存温度的小数部分
ZHENGSHU EQU 26H;用于保存整数部分
BIAOZHI BIT 50H;18B20检查位1为存在,0为不存在
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:MOV SCON,#00H
ACALL DUWEN
ACALL ZHENGHE
ACALL BCD
ACALL DISP
ACALL TIME1
AJMP MAIN
;----------------------------------------------------------------------------------------------------------------------------------------
;读温度子
;----------------------------------------------------------------------------------------------------------------------------------------
DUWEN:SETB P2.0
ACALL FUWEI ;读温度之前必须先复位
JB BIAOZHI,CUNZAI;查看标志位看18B20是否存在,1为存在,0为不存在
RET ;不存在则返回
CUNZAI: ;存在则开始读温度
MOV A,#0CCH ;跳过ROM匹配
ACALL XIE ;调写子
MOV A,#44H ;发出温度转换命令
ACALL XIE ;调写子程序
ACALL TIME1 ;调1秒延时,等等AD转换完成,现在分辨率为12位,温度最大转换时间为750MS
ACALL FUWEI ;读温前需要复位
MOV A,#0CCH ;跳过ROM匹配
ACALL XIE
MOV A,#0BEH ;发读温度命令
ACALL XIE
ACALL DUSHU ;将闱出数据读回
CLR P1.2
RET
;------------------------------------------------------------------------------------------------------------------------------
;复位子程序
;18B20复位需要将数据位拉低500us
;18B20收到信号后要等待16-60us,然后发出60-240us的低脉冲
;-------------------------------------------------------------------------------------------------------------------------------
FUWEI:SETB P2.0
NOP
CLR P2.0
MOV R0,#3
INTE:MOV R1,#107 ;设一个537us延时
KK1: DJNZ R1,KK1
DJNZ R0,INTE
SETB P2.0 ;拉高数据线,等待回应
NOP
NOP
NOP
MOV R0,#25 ;
INTE1:JNB P2.0,INTE2 ;延时延时50us等待18B20回应,若返回低脉冲则说明18B20存在
DJNZ R0 ,INTE1
AJMP INTE3 ;经过反应时间而没检测到18B20的存在,则跳转去清零标志位
INTE2:SETB BIAOZHI ;检测到18B20存在,置1标志位
CLR P1.0
AJMP INTE4
INTE3:CLR BIAOZHI ;没检测到18B20,清零标志位
AJMP INTE5
INTE4:MOV R0,#120 ;延时240us,确定回应信号已发完
KK: DJNZ R0,KK
INTE5:SETB P2.0
RET


;----------------------------------------------------------------------------------------------------------------------------------------
;写18B20子程序
;-----------------------------------------------------------------------------------------------------------------------------------------
XIE:MOV R2,#8 ;写计数寄存器,一共有8位数据
CLR C
LP:CLR P2.0
MOV R3,#6 ;设一个延时
LL1:DJNZ R3,LL1
RRC A ;右循环,先输出低位
MOV P2.0,C
MOV R3,#23 ;设延时
LL: DJNZ R3,LL ;
SETB P2.0
NOP
NOP
DJNZ R2,LP ;判断是否完成数据传送
SETB P2.0 ;完成传送拉高数据位
RET
;-----------------------------------------------------------------------------------------------------------------------------------------
;从18B20中读出温度数据子程序
;-----------------------------------------------------------------------------------------------------------------------------------------

DUSHU:MOV R4,#2 ;设读回数据个数指针
MOV R1,#WENDU_L ;把温度数据低位存入29H
RE: MOV R2,#8 ;设数据长度指针
RE1: CLR C
SETB P2.0
NOP
NOP
CLR P2.0
NOP
NOP
NOP
SETB P2.0
MOV R3,#9
DJNZ R3,$
MOV C,P2.0
MOV R3,#23
NN: DJNZ R3,NN
RRC A
DJNZ R2,RE1
MOV @R1,A
DEC R1 ;高位存入28H
DJNZ R4,RE
RET



关键词: 应用 程序 18b20

评论


相关推荐

技术专区

关闭