导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→关于DS18B20的问题。[guest]

 *第28507篇: 关于DS18B20的问题。

  
楼 主:guest 2004年12月19日11:21
 关于DS18B20的问题。
我用的是外部电源供电方式,但屏幕好像没有输出温度,我没有仿真器仿真,哪位高手能指点一二,谢谢!
TEMP_L    EQU    36H
TEMP_H    EQU    35H
TEMP_NUM  EQU    60H
FLAG1     BIT    01H
DQ        BIT    P3.3
        ORG    00
       AJMP   MAIN
 
      
DELAY1:                        ;-------------------等待延时80uS
       MOV   R2,#40
       DJNZ  R2,$
       RET


    
RST_P:                         ;-------------------复位和接收脉冲
       CLR   DQ 
       MOV   R2,#250        ;delay 500 uS 
       DJNZ  R2,$  
       SETB  DQ 
       MOV   R2,#10         ;delay 20 uS 
       DJNZ  R2,$  

presence_pulse: 
       JB    DQ,$         ;Rx presence pulse 
       JNB   DQ,NEXT1
       MOV   TEMP_NUM,#0
       LJMP   DISP
NEXT1:
       RET

SENT_1:                        ;发送命令8位
       MOV    R1,#8
       CLR    C
ROLL1: RRC    A
       JC     W_BIT1
       CLR    DQ
       SJMP   W_BIT0
W_BIT1:SETB   DQ 
W_BIT0:
       LCALL  DELAY1
       DJNZ   R1,ROLL1
       RET


TEMP_T:                        ;温度转换,在外接电源情况下
       JNB    DQ,$
       RET

READ_1:                        ;读8位数到R7所指的地址
       MOV    R1,#8
       MOV    A,#0
       CLR    C
ROLL2: JB     DQ,R_BIT1
       CLR    C 
       RRC    A
       SJMP   R_BIT0
R_BIT1:SETB   C
R_BIT0:
       LCALL  DELAY1
       DJNZ   R1,READ_1
       
       MOV    @R0, A 
       LCALL  DELAY1
       RET       


 ;-------------------将从DS18B20中读出的温度数据进行转换
TEMP_COV:
       MOV    A,#0F0H
       ANL    A,TEMP_L        ; 舍去温度低位中小数点后的四位温度数值
       SWAP   A
       MOV    TEMP_NUM,A
       MOV    A,TEMP_L
       JNB    ACC.3,TEMP_COV1    ; 四舍五入去温度值
       INC    TEMP_NUM

TEMP_COV1:
       MOV    A,TEMP_H
       ANL    A,#07H
       SWAP    A
       ORL    A,TEMP_NUM
       MOV    TEMP_NUM,A    ; 保存变换后的温度数据
       LCALL    BIN_BCD
       RET
       ;-------------------将16进制的温度数据转换成压缩BCD码
BIN_BCD:
       MOV    DPTR,#TEMP_TAB
       MOV    A,TEMP_NUM
       MOVC    A,@A+DPTR
       MOV    TEMP_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,71H
       DB    72H,73H,74H,75H,76H,77H,78H,79H
       DB    80H,81H,82H,83H,84H,85H,86H,87H
       DB    88H,89H,90H,91H,92H,93H,94H,95H
       DB    96H,97H,98H,99H


        ;------------------重新写DS18B20暂存存储器设定值
RE_CONFIG:
        JB    FLAG1,RE_CONFIG1    ; 若DS18B20存在,转RE_CONFIG1
        RET
RE_CONFIG1:
        MOV    A,#0CCH        ; 发SKIP ROM命令
        LCALL    SENT_1
        MOV    A,#4EH        ; 发写暂存存储器命令
        LCALL    SENT_1
        MOV    A,#0FFH        ; TH(报警上限)中写入00H
        LCALL    SENT_1
        MOV    A,#00H        ; TL(报警下限)中写入00H
        LCALL    SENT_1
        MOV    A,#7FH        ; 选择12位温度分辨率
        LCALL    SENT_1
        RET
        
DISP:                        ;显示
       略..
       RET      


MAIN:
       LCALL   RST_P
       LCALL   RE_CONFIG
       LCALL    RST_P            ;RESET
       MOV      A,#0CCH          ;SKIP
       LCALL    SENT_1            
       MOV      A,#44H           ;TEMPER CONVERT
       LCALL    SENT_1
       LCALL    TEMP_T           ;DEAL 
       LCALL    RST_P
       MOV      A,#0CCH          ;SKIP
       LCALL    SENT_1
       MOV      A,#0BEH          ;READ TEMPER
       LCALL    SENT_1
       MOV      R0,#TEMP_L       ;PLACE TL
       LCALL    READ_1
       MOV      R0,#TEMP_H       ;PLACE TH
       LCALL    READ_1
       LCALL    RST_P
       LCALL    TEMP_COV
       LCALL    DISP
       
       END

  
2楼:guest 2004年12月19日13:54
 复位键作为测温度的按钮
  
3楼:guest 2004年12月19日13:55
 谁有功夫 看你的汇编,用C吧,
谁有功夫 看你的汇编,用C吧,
  
4楼:guest 2004年12月19日14:29
 你的汇编程序不完整,我的能显示-40.1
你的汇编程序不完整,我的能显示-40.1------125.0,分辨率为0.1度.你可与我联系:zgy88@hotmail.com
  
5楼:guest 2004年12月20日08:05
 我的邮箱hcjack0077@126.c
我的邮箱hcjack0077@126.com,可否发给我看看。

>>>>>>对该主题发表你的看法

本主题贴数5,分页: [第1页]


[上一篇主题]:简单的步进电机控制程序

[下一篇主题]:请教关于A/D转换问题