回 帖 发 新 帖 刷新版面

主题:[讨论]ds18b20程序问题@@@@!!!!!!!!!急急急~~~~~~~~

;-----------------------DS18B20的温度转换子程序-----------------------
GET_TEMPER:
        LCALL   Set_18B20
        MOV     A,#0CCH         ;跳过ROM匹配
        LCALL   WRITE_1820
        MOV     A,#44H          ;发出温度转换命令
        LCALL   WRITE_1820
        LCALL   DISPLAY         ;用显示温度
        lcall   delay750ms      ;(持续1s左右)来等待AD转换结束,12位的话要转换750ms
    LCALL   Set_18B20       ;准备读温度前先初始化
        MOV     A,#0CCH         ;跳过ROM匹配
        LCALL   WRITE_1820
        MOV     A,#0BEH         ;发出读温度命令
        LCALL   WRITE_1820
        LCALL   READ_1820        
        RET
;--------------------------DS18B20初始化程序--------------------------
Set_18B20:
        SETB    DAT
        NOP
        CLR     DAT
        MOV    R2,#100          ;主机发出延时710微秒的复位低脉冲
        DJNZ    R2,$
        DJNZ    R2,$         
       
        SETB    DAT             ;然后拉高数据线
        MOV     R2,#35
        DJNZ    R2,$            ;延时70us等待DS18B20回应
        JNB     DAT,INIT2
        JMP     Set_18B20       ;超时而没有响应,重新初始化
;INIT1:  MOV     R2,#120
        ;DJNZ    R2,$            ;延时240us
        ;JB      DAT,INIT2       ;数据变高,初始化成功
        ;ajmp     Set_18B20
INIT2:  MOV     R2,#240
        DJNZ    R2,$
        RET
;-----------------写DS18B20的子程序(有具体的时序要求)-----------------
WRITE_1820:
        MOV     R2,#8           ;一共8位数据
WR0:    CLR     DAT             ; 拉低数据线
        MOV     R3,#6           ;延迟15微秒
        DJNZ    R3,$
        RRC     A
        MOV     DAT,C           ;从低位到高位发送数据
        MOV     R3,#20          ;延时45微秒
        DJNZ    R3,$
        SETB    DAT             
        NOP
        NOP
        DJNZ    R2,WR0
        SETB    DAT              ;拉高数据线 
        RET
;--------------读DS18B20的程序,从DS18B20中读出两个字节的温度数据--------------------------
READ_1820:
        MOV     R4,#2           ;将温度高位和低位从DS18B20中读出
        MOV     R1,#TEMPER_L    ;低位存入33H(TEMPER_L)
RE0:    MOV     R2,#8
RE1:    SETB    DAT              ;拉高数据线
        NOP                      ;延时两秒
        NOP
        CLR     DAT              ;拉低数据线
        MOV     R3,#7            ;延时15微秒
        DJNZ    R3,$
        SETB    DAT              ;拉高数据线
        MOV     R3,#7            ;延时15微秒
        DJNZ    R3,$
        MOV     C,DAT            ;读数据线的状态,得到一个状态位
        RRC     A
        MOV     R3,#14           ;延时30微秒
        DJNZ    R3,$
        DJNZ    R2,RE1
        MOV     @R1,A
        inc     R1              ;高位存入34H(TEMPER_H)
        DJNZ    R4,RE0
        RET


请各位看一下,这个ds18b20的初始化,写温度,读温度的程序那里有问题??我用的是12m晶振,主程序中还有定时器中断!!请各位帮忙调试一下,谢谢!!!!!!!!!!!!小弟是在搞不清楚了,在网上查了查,写法各不同,延迟也不同,真被搞糊涂了,谢谢各位了

回复列表 (共3个回复)

沙发

补充:
为什么单片机有的引脚会输出负几伏的电压??是什么原因呢??

板凳

对地测量的的?
注意直流电压测量时表笔正负极:)

3 楼

不是这个原因

我来回复

您尚未登录,请登录后再回复。点此登录或注册