您的位置:首页技术文栏LED应用
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

12位分辨率DS18B20程序

[日期:2008-02-11 ] [来源:net 作者:佚名] [字体: (投递新闻)
;12位分辨率DS18B20程序
;======================================================================
;下面代码是本人在前人的基础上,吸收优化,适合本人实际应用。
;;特点:
;1.防止定时器打断时序;
;2.考虑了DS18B20损坏或者断线,单片机不会死循环;
;3.具备补码=〉原码;
;4.复位不正常时给出温度-55度,提醒用户检查;
;5.稳定性:冰水 0度->用电吹风 120度->冰水 0度 正常//测试时请不要把引脚弄湿短路
;6.破坏性:加热到150度以上,再降温到120度,软件正常显示实际温度;     
;注意:
;在调试中,发现时序与DS18B20的批次有关,不同批次需要微调时序;
;如果发现结果错误,请先调整debug 1,不行再依次调整debug 2,debug 3……
;或许全部都要调整,看你运气 ^_^;
;CPU    AT89C52        11.0592MHz
;DQ        BIT    P1.7
;**********************************************************************
;[DS18B20模块]//12位分辨率
;检测DS18B20的温度,最多检测3次;如果失败,给出-55度
;出口:DS1820_L,DS1820_H
;使用资源:A,C,R0,R6,R7,TH0
;Edited by hello 2002/08/19/22
;Changed by hello 2002/08/20/16/06||禁止修改||
;----------------------------------------------------------------------
DS1820:
    MOV    DS1820_L,#70H
    MOV    DS1820_H,#83H
    MOV    TH0,#00        ;防止中断打乱时序
    MOV    R1,#03
DS1820_1:
    LCALL    RE1820        ;RESET DS1820
    JNZ    DS1820_9    ;RESET FAIL
    MOV    TH0,#00        ;防止中断打乱时序
    MOV    A,#0CCH        ;SKIP ROM
    LCALL    WR1820   
    MOV    A,#44H        ;CONVER T
    LCALL    WR1820
    MOV    A,#8        ;/debug 4       
    LCALL    DL100M        ;100ms
    MOV    TH0,#00
    LCALL    RE1820        ;RESET DS1820
    JNZ    DS1820_9    ;RESET FAIL
    MOV    A,#0CCH        ;SKIP ROM
    LCALL    WR1820
    MOV    TH0,#00        ;防止中断打乱时序
    MOV    A,#0BEH        ;Read scratchpad
    LCALL    WR1820
    MOV    TH0,#00        ;防止中断打乱时序
    LCALL    RD1820
    MOV    DS1820_L,A
    LCALL    RD1820
    MOV    DS1820_H,A    ;采样完成
    ;SJMP    DS1820_EXIT
    CJNE    A,#80H,$+3    ;以下给同事提供方便,将补码还原成原码
    JC    DS1820_EXIT
    CPL    A
    SETB    ACC.7
    MOV    DS1820_H,A
    MOV    A,DS1820_L
    CPL    A
    INC    A
    MOV    DS1820_L,A
    SJMP    DS1820_EXIT
DS1820_9:
    DJNZ    R1,DS1820_1
DS1820_EXIT:   
    RET
;-------------------------------------------------------------------------
;[DS1820复位模块]
;出口:A
;复位成功:A=#0,复位失败:A=#0FFH
;使用资源:A,R7
;Edited by hello 2002/08/20
;-------------------------------------------------------------------------
RE1820:
    MOV    A,#00H        ;RESET DS1820 OK
    CLR    DQ
    MOV    R7,#100
    DJNZ    R7,$
    DJNZ    R7,$   
    ;DQ=#0,DELAY=255*2+100*2=710us  /debug 3
    SETB    DQ
    MOV    R7,#35
    DJNZ    R7,$        ;DQ=#1,DELAY=35*2=70us   
    /debug 3
    JNB    DQ,RE1820_1    ;RESET OK,GOTO RE1820_1
    MOV    A,#0FFH        ;FAIL,A=#0FFH   
RE1820_1:
    MOV    R7,#240
    DJNZ    R7,$        ;DELAY=160*2=320us   
    /debug 3
    RET
;------------------------------------------------------------------------
;[DS1820写1个字节]
;入口:A
;使用资源:A,C,R6,R7
;Edited by hello 2002/08/20
;------------------------------------------------------------------------
WR1820:
    MOV    R6,#08        ;1B=8bit
WR1820_1:
    CLR    DQ
    MOV    R7,#6
    DJNZ    R7,$        ;DQ=#0,DELAY=7*2=15us    //debug    2
    RRC    A        ;1us
    MOV    DQ,C        ;1us
    MOV    R7,#25
    DJNZ    R7,$        ;DQ=#1,20*2=60us    //debug    2
       
    SETB    DQ
    NOP
    NOP
    DJNZ    R6,WR1820_1
    SETB    DQ
    RET
;----------------------------------------------------------------------
;[DS1820读1个字节]
;出口    :A
;使用资源:A,C,R6,R7
;Edited by hello 2002/08/20   
;----------------------------------------------------------------------
RD1820:
    MOV    R6,#08
RD1820_1:
    SETB    DQ
    NOP
    NOP
    NOP
    CLR    DQ
    NOP
    NOP
    NOP           
    SETB    DQ
    MOV    R7,#7
    DJNZ    R7,$        ;DQ=1,9*2=18us   
    //debug    1
    MOV    C,DQ
    RRC    A
    MOV    R7,#7
    DJNZ    R7,$        ;DQ=1,9*2=18us   
    //debug    1   
        NOP
    DJNZ    R6,RD1820_1
    RET           
;----------------------------------------------------------------------
;**********************************************************************
阅读:
录入:JETTA

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
赞助商广告