DS18B20的读写程序以下是我为宾馆智能控制器所做的温度探测器DS18B20的一个程序。在网上看到很多朋友想要DS18B20的读写程序却苦于找不到这样的程序,我把它贡献出来和大家分享。这个程序取到的温度值范围为0-70(一般应用足够了),如需大于此温度值可自行在TAB中添加。测温精度为0.5度,没有加校正,需要的朋友可自行查一些资料。
; 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 ;//*****************************************//
; 读出转换后的温度值
上一页12 3 4 下一页
|