📄 ds18b20.asm
字号:
DS18B20参考例程
以下程序使用Intel8031 CPU, 12MHz 晶体. DS18B20用三线接法, 数据线接至CPU的 P3.0
脚,并接一只4.7k电阻接至VCC
(1).DS18B20-RESET子程序:
RESET:
L0: CLR P3.0 ; 长英科技2000/9/27
MOV R2,#200
L1: NOP
DJNZ R2,L1 ;主机发置位脉冲持续3us﹡200=600us
SETB P3.0 ;主机释放总线控制P3.0口改为输入口
MOV R2,#30
L4: DJNZ R2,L4 ;DS18B20等待2us﹡30=60us
CLR C
ORL C,P3.0 ;DS18B20数据线应变低
JC L0 ;DS18B20没准备好,重来
MOV R6,#80
L5: ORL C,P3.0
JC L3 ;DS18B20数据线变高,初始化成功
DJNZ R6,L5 ;DS18B20数据线低电平状态可持续3us﹡80=240us
SJMP L0 ;初始化失败,重来
L3: MOV R2,#250
L2: DJNZ R2,L2 ;DS18B20应答过程最少 > 480us
RET
(2) 写DS18B20子程序WRITE:
WRITE: MOV R3,#8
WR1: SETB P3.0
MOV R4,#8
RRC A
CLR P3.0
WR2: DJNZ R4,WR2 ;DS18B20栽数据线变低16us
MOV P3.0,C ;将命令字按位依次送给DS18B20
MOV R4,#20
WR3: DJNZ R4,WR3 ;保证整个写过程持续60us
DJNZ R3,WR1 ;送完整个命令字节
SETB P3.0
RET
(3) 读DS18B20子程序READ:
READ: MOV R6,#8
RE1: CLR P3.0
MOV R4,#6
NOP ;低电平持续2us
SETB P3.0 ;P3.0口设为输入口
RE2: DJNZ R4,RE2 ;等待12us
MOV C,P3.0 ;主机按位读入DS18B20的数据
RRC A ;数据送入A
MOV R5,#30
RE3: DJNZ R5,RE3 ;保证读数据过程持续2us﹡30=60us
DJNZ R6,RE1 ;读完8位
MOV TEMP,A ;将读出值送变量TEMP保存
SETB P3.0
RET
3. 读DS18B20温度:
READTEMP : LCALL RESET ;复位
MOV A,#0CCH ;发SKIP ROM命令
LCALL WRITE
MOV A,#44H ;发开始温度转换命令
LCALL WRITE
LCALL DELAY_1000 ;延时 1000 MS
LCALL RESET ;复位
MOV A,#0CCH ;发SKIP ROM命令
LCALL WRITE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV A,#0BEH ;发读存储器命令
LCALL WRITE
CALL READ ;读出温度值-1
MOV TEMP1,TEMP
CALL READ ;读出温度值-2
MOV TEMP2,TEMP
LCALL RESET ;复位
RET ;------完成
GETWD:LCALL INIT
MOV A,#0CCH
LCALL WRITE;发跳过ROM命令
MOV A,#44H
LCALL WAITE;发启动转换命令
LCALL INIT
MOV A,#0CCH;发跳过ROM命令
LCALL WRITE
MOV A,#0BEH;发读存储器命令
LCALL READ
MOV WDLSB,A;温度值低位字节送WDLSB
LCALL READ
MOV WDMSB,A;温度值高位字节送WDMSB
4. DS18B20工作原理
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
DS18B20的读写时序如下。
PROC WRITE
WRITE: MOV R2,#8
CLR C
WR1: CLR DQ
MOV R7,#6
DJNZ R7,$
RRC A
MOV DQ,C
MOV R7,#23
DJNZ R7,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET
;读一个字节,出口:A=读入的字节
PROC DREAD
DREAD: MOV R2,#8
READL: CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ ;产生时间片
MOV R7,#7
DJNZ R7,$
MOV C,DQ
MOV R7,#23
DJNZ R7,$
RRC A
DJNZ R2,READL
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -