本文档的主要内容详细介绍的是ds18b20数字温度传感器的源代码。
; flag1: 标志位,为“1”时表示检测到ds18b20
; dq: ds18b20的数据总线接脚
; temper_num:保存读出的温度数据
; 本程序仅适合单个ds18b20和51单片机的连接,晶振为12mhz左右
temper_l equ 36h
temper_h equ 35h
dq bit p1.7
; ds18b20初始化程序
;//*****************************************//
init_1820:
setb dq
nop
clr dq
mov r0,#06bh
tsr1:
djnz r0,tsr1 ; 延时
setb dq
mov r0,#25h
tsr2:
jnb dq,tsr3
djnz r0,tsr2
ljmp tsr4 ; 延时
tsr3:
setb flag1 ; 置标志位,表示ds1820存在
ljmp tsr5
tsr4:
clr flag1 ; 清标志位,表示ds1820不存在
ljmp tsr7
tsr5:
mov r0,#06bh
tsr6:
djnz r0,tsr6 ; 延时
tsr7:
setb dq
ret
;//*****************************************//
; 重新写ds18b20暂存存储器设定值
;//*****************************************//
re_config:
jb flag1,re_config1 ; 若ds18b20存在,转re_config1
ret
re_config1:
mov a,#0cch ; 发skip rom命令
lcall write_1820
mov a,#4eh ; 发写暂存存储器命令
lcall write_1820
mov a,#00h ; th(报警上限)中写入00h
lcall write_1820
mov a,#00h ; tl(报警下限)中写入00h
lcall write_1820
mov a,#1fh ; 选择9位温度分辨率
lcall write_1820
ret
;//*****************************************//
; 读出转换后的温度值
;//*****************************************//
get_temper:
setb dq ; 定时入口
lcall init_1820
jb flag1,tss2
ret ; 若ds18b20不存在则返回
tss2:
mov a,#0cch ; 跳过rom匹配
lcall write_1820
mov a,#44h ; 发出温度转换命令
lcall write_1820
lcall init_1820
mov a,#0cch ; 跳过rom匹配
lcall write_1820
mov a,#0beh ; 发出读温度命令
lcall write_1820
lcall read_1820
mov temper_num,a ; 将读出的温度数据保存
ret
;//*****************************************//
; 读ds18b20的程序,从ds18b20中读出一个字节的数据
;//*****************************************//
read_1820:
mov r2,#8
re1:
clr c
setb dq
nop
nop
clr dq
nop
nop
nop
setb dq
mov r3,#7
djnz r3,$
mov c,dq
mov r3,#23
djnz r3,$
rrc a
djnz r2,re1
ret
;//*****************************************//
; 写ds18b20的程序
;//*****************************************//
write_1820:
mov r2,#8
clr c
wr1:
clr dq
mov r3,#6
djnz r3,$
rrc a
mov dq,c
mov r3,#23
djnz r3,$
setb dq
nop
djnz r2,wr1
setb dq
ret
;//*****************************************//
; 读ds18b20的程序,从ds18b20中读出两个字节的温度数据
;//*****************************************//
read_18200:
mov r4,#2 ; 将温度高位和低位从ds18b20中读出
mov r1,#36h ; 低位存入36h(temper_l),高位存入35h(temper_h)
re00:
mov r2,#8
re01:
clr c
setb dq
nop
nop
clr dq
nop
nop
nop
setb dq
mov r3,#7
djnz r3,$
mov c,dq
mov r3,#23
djnz r3,$
rrc a
djnz r2,re01
mov @r1,a
dec r1
djnz r4,re00
ret
;//*****************************************//
; 将从ds18b20中读出的温度数据进行转换
;//*****************************************//
temper_cov:
mov a,#0f0h
anl a,temper_l ; 舍去温度低位中小数点后的四位温度数值
swap a
mov temper_num,a
mov a,temper_l
jnb acc.3,temper_cov1 ; 四舍五入去温度值
inc temper_num
temper_cov1:
mov a,temper_h
anl a,#07h
swap a
orl a,temper_num
mov temper_num,a ; 保存变换后的温度数据
lcall bin_bcd
ret
;//*****************************************//
; 将16进制的温度数据转换成压缩bcd码
;//*****************************************//
bin_bcd:
mov dptr,#temp_tab
mov a,temper_num
movc a,@a+dptr
mov temper_num,a
ret
temp_tab:
db 00h,01h,02h,03h,04h,05h,06h,07h
db 08h,09h,10h,11h,12h,13h,14h,15h
db 16h,17h,18h,19h,20h,21h,22h,23h
db 24h,25h,26h,27h,28h,29h,30h,31h
db 32h,33h,34h,35h,36h,37h,38h,39h
db 40h,41h,42h,43h,44h,45h,46h,47h
db 48h,49h,50h,51h,52h,53h,54h,55h
db 56h,57h,58h,59h,60h,61h,62h,63h
db 64h,65h,66h,67h,68h,69h,70h
;//*****************************************//
微软宣布,面向个人使用者版本预计将于2020年春季发布
现场直击 | 高芯科技亮相2023广州应急展
人大金仓&恒生电子助力湘财证券TA系统国产化升级
以“科技向善”引领AI全方位治理,确保AI“可知”“可控”“可用”“可靠”
搭载高通骁龙855芯片和5G,高通VR原型机亮相CES
DS18B20数字温度传感器的源代码
符合功能安全要求的动态测试工具-TESSY
图库四种常见操作的HarmonyOS图像编解码开发
理想三大核心风险,李想曝光!
全球机器人消费市场高度集中,新加坡和韩国装机密度领先全球
嘉化能源与三江化工及空气化工签署协议 将同投资氢能和液氢项目
对带led和lcd显示屏的电容式触摸按键应用优化方案推荐
如何用FPGA结合音频编解码芯片
MOSFET的阈值、ID-VGS特性及温度特性
2022高工储能年会观察:用户侧储能“突飞猛进”
小米MIUI9发布时间曝光:官方今日下午公布小米MIUI9发布时间
使用新型单芯片双ADC前端改进数据采集
TI助力工程师进行工业系统创新
德勤调查:美国67%消费者准备更换5G手机
软件安全构建成熟度模型BSIMM9 现已上线