导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→为什么我的温度一直显示为17.4度

* 106316: 为什么我的温度一直显示为17.4度

   cx198479 
cx198479发表的帖子 

 为什么我的温度一直显示为17.4度
我用的s52单片机+DS18B20传感器+ZLG7289A显示芯片~~~结果8段数码管一直稳定显示为17.4度


主程序如下:

             TEMPL DATA 26H
        TEMPH DATA 27H
        TEMPHC DATA 28H
        TEMPLC DATA 29H
    
        SEND_BUF EQU 3AH     ;发送缓冲
        DELAYJ   EQU 3BH      ;循环计数器
        TEMPHEAD EQU 33H
       
      
       
    
       TEMPDIN  BIT   P3.7  
        CS      BIT   P2.0
       DIO      BIT   P2.2 
       CLK      BIT   P2.1
       F        BIT   P2.7
       
       ;
       ;*********************************
       ;中断向量区
       ;*********************************
       ;
              ORG   0000H
              LJMP  START
              ;
        ;*********************************
        ;    系统初始化
        ;*********************************
              ORG  0100H
         START:  
               MOV    SP,    #60H
CLSMEN:        MOV    R0,    #40H
               MOV    R1,    #80H
CLSMEN1:       MOV    @R0,   #00H
               INC    R0
               DJNZ   R1,   CLSMEN1 
 
              
             
     MAIN:    
           
               LCALL INITDS18B20     ;DS18B20复位            
               LCALL LONG_DELAY
               LCALL LONG_DELAY    
               CPL F
               
               LCALL LONG_DELAY
               LCALL LONG_DELAY                                                    
               LCALL   READTEMP1    ;读暂存器
               LCALL   CONVTEMP      ;计算温度处理
               LCALL   DISPBCD
               LCALL   READTEMP  
               LCALL   DISPLAY      ;调用显示程序
               NOP
               NOP
               NOP
               AJMP    MAIN
      
              ;
    
   INITDS18B20:
                SETB TEMPDIN
                NOP 
                NOP
                CLR TEMPDIN
                MOV R6,#0A0H               
                DJNZ R6,$
                MOV R6,#0A0H
                DJNZ R6,$
                SETB TEMPDIN
                MOV R6,#32H
                DJNZ R6,$
                MOV R6,#3CH
    LOOP18B20:  MOV C,TEMPDIN
                JC INITDS18B20OUT
                DJNZ R6,LOOP18B20
                MOV R6,#064H
                DJNZ R6,$
                SJMP INITDS18B20
                RET
    INITDS18B20OUT:SETB TEMPDIN
                RET
    ;******************************
    ;读DS18B20的程序
    ;*****************************
    READDS18B20: MOV R7,#08H
                 SETB TEMPDIN
                 NOP
                 NOP   
    READDS18B20LOOP:
                   CLR TEMPDIN
                   NOP
                   NOP
                   NOP
                   SETB TEMPDIN
                   MOV R6,#07H
                   DJNZ R6,$
                   MOV C,TEMPDIN
                  MOV R6,#3CH
                  DJNZ R6,$
                  RRC A
                  DJNZ R7,READDS18B20LOOP
                  MOV R6,#3CH
                  DJNZ R6,$
                  RET
                  ;
     ;***********************************
     ;写DS18B20的程序
     ;***********************************
   WRITEDS18B20: MOV R7,#08H
                 SETB TEMPDIN
                 NOP
                 NOP
   WRITEDS18B20LOP:
                    CLR TEMPDIN
                    MOV R6,#07
                    DJNZ R6,$
                    RRC A
                    MOV TEMPDIN,C
                    MOV R6,#34H
                    DJNZ R6,$
                    SETB TEMPDIN
                    DJNZ R7,WRITEDS18B20LOP
                    SETB TEMPDIN
                    RET
                    ;
  ;*************************************
  ;READ   TEMP
  ;*************************************
  ;
        READTEMP:       MOV R6,#14H
                    DL5:MOV R7,#19H
                    DL6:DJNZ R7,DL6
                        DJNZ R6,DL5
                    LCALL INITDS18B20
                    MOV A,#0CCH
                    LCALL WRITEDS18B20
                    MOV R6,#34H
                    DJNZ R6,$
                    MOV A,#44H
                    LCALL WRITEDS18B20
                    MOV R6,#34H
                    DJNZ R6,$
                    RET
                    ;
     READTEMP1: MOV R6,#14H
               DL7:MOV R7,#19H
               DL8:DJNZ R7,DL8
                   DJNZ R6,DL7
                 LCALL INITDS18B20
                 MOV A,#0CCH
                 LCALL WRITEDS18B20
                 MOV R6,#34H
                 DJNZ R6,$
                 MOV A,#0BEH  
                 LCALL WRITEDS18B20
                 MOV R6,#34H
                 DJNZ R6,$
                 MOV R5,#09H
                 MOV R0,#TEMPHEAD     
                 MOV B,#00H
     READTEMP2:LCALL READDS18B20
               MOV @R0,A 
               INC R0
    READTEMP21: LCALL CRC8CAL
                 DJNZ R5,READTEMP2
                 MOV A,B
                 JNZ READTEMPOUT
                 MOV A,TEMPHEAD+0
                 MOV TEMPL,A
                 MOV A,TEMPHEAD+1
                 MOV TEMPH,A
    READTEMPOUT:RET
    ;
    ;********************************
    ;处理温度BCD码子程序
    ;********************************
    ;
    CONVTEMP:MOV A,TEMPH
             ANL A,#80H
             JZ TEMPC1
             CLR C
             MOV A,TEMPL
             CPL A
             ADD A,#01H
             MOV TEMPL,A
             MOV A,TEMPH
             CPL A
             ADDC A,#00H
             MOV TEMPH,A
             MOV TEMPHC,#0AH
             SJMP TEMPC11
             ;
    TEMPC1:MOV TEMPHC,#0FH
    TEMPC11:MOV A,TEMPHC
            SWAP A
            MOV TEMPHC,A
            MOV A,TEMPL
            ANL A,#0FH        ;乘0.0625
            MOV DPTR,#TEMPDOTTAB   
            MOVC A,@A+DPTR
            MOV TEMPLC,A       ;TEMPLC LOW=小数部分BCD
            
            MOV A,TEMPL         ;整数部分
            ANL A,#0F0H
            SWAP A
            MOV TEMPL,A
            MOV A,TEMPH
            ANL A,#0FH
            SWAP A
            ORL A,TEMPL
            LCALL HEX2BCD1
            MOV TEMPL,A
            ANL A,#0F0H
            SWAP A
            ORL A,TEMPHC   ;TEMPHC LOW=十位数 BCD
            MOV TEMPHC,A
            MOV A,TEMPL
            ANL A,#0FH
            SWAP A        ;TEMPLC HI=个位数 BCD
            ORL A,TEMPLC
            MOV TEMPLC,A
            MOV A,R7
            JZ TEMPC12
            ANL A,#0FH
            SWAP A
            MOV R7,A
            MOV A,TEMPHC      ;TEMPHC HI=百位数 BCD
            ANL A,#0FH
            ORL A,R7
            MOV TEMPHC,A
             
                    
    TEMPC12:RET
    ;
    ;******************************
    ;小数部分码表
    ;******************************
    ;
    TEMPDOTTAB: DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
                DB 06H,07H,08H,08H,09H,09H
                ;
                
      ;************************************
      ;显示区BCD码温度植刷新子程序
      ;************************************
      ;
      DISPBCD:MOV A,TEMPLC
              ANL A,#0FH
              MOV 70H,A
              MOV A,TEMPLC
              SWAP A
              ANL A,#0FH
              MOV 71H,A
              MOV A,TEMPHC
              ANL A,#0FH
              MOV 72H,A
              MOV A,TEMPHC
              SWAP A
              ANL A,#0FH
              MOV 73H,A
              MOV A,TEMPHC
              ANL A,#0F0H
              CJNE A,#010H,DISPBCD0
              SJMP DISPBCD2
   DISPBCD0:MOV A,TEMPHC
            ANL A,#0FH
            JNZ DISPBCD2  ;十位数是0
            MOV A,TEMPHC
            SWAP A
            ANL A,#0FH
            MOV 73H,A    ;符号位不显示
            MOV 72H,A        ;十位数显示符号
      DISPBCD2:RET
      ;
      ;**********************************
       ; 7289-LED数码管实验显示
      ;********************************** 
      ;   
      
DISPLAY:NOP
        NOP
        NOP
 SETB CS
 SETB DIO
 MOV SEND_BUF,#10100100B                  ;ZLG7289A复位命令
        LCALL SEND
        SETB CS
        MOV R6,#24H    
    DL9:MOV R7,#39H
   DL10:DJNZ R7,DL10
        DJNZ R6,DL9
         
  DONE: LCALL DISP   ;显示子程序 
   

   DISP:   
           MOV R0,#70H    ;写入7289
           MOV R1,#80H     ;LED写入1-8
       REA1:MOV SEND_BUF,R1
            LCALL SEND
            MOV SEND_BUF,@R0
            LCALL SEND
            SETB CS
            INC R1
            INC R0
            CJNE R1,#84H,REA1
            SETB CS
            SETB DIO    
            MOV SEND_BUF,#11001001B
            LCALL SEND           
            MOV A,71H
            ORL A,#80H            
            MOV SEND_BUF,A
            LCALL SEND
            SETB CS 
            RET
SEND:   MOV  R7,#08H
        CLR CS
        CLR CLK        
 LCALL LONG_DELAY                           ;延时50微秒
SEND_LP:NOP
 MOV A,SEND_BUF
 RLC A
 MOV SEND_BUF,A
 MOV DIO,C
 NOP
 NOP
 SETB CLK
 LCALL SHORT_DELAY                         ;延时10微秒
 CLR CLK
 LCALL SHORT_DELAY                  
 DJNZ R7,SEND_LP
 CLR DIO
 RET 
LONG_DELAY:
 MOV R6,#25         ;延时50微秒
 DJNZ R6,$
 RET 
SHORT_DELAY:
 MOV R6,#4          ;延时10微秒
 DJNZ R6,$
 RET
      ;
      ;*****************************
      ;    单字节十六进制转BCD
      ;*****************************
      HEX2BCD1: MOV B,#064H
                DIV AB
                MOV R7,A
                MOV A,#0AH
                XCH A,B
                DIV AB
                SWAP A
                ORL A,B
                RET
                ;
      ;******************************
      ;  CRC-8
      ;******************************
      CRC8CAL: PUSH ACC
               MOV R7,#08H
      CRC8LOOP1:XRL A,B
                RRC A
                MOV A,B
                JNC CRC8LOOP2
                XRL A,#18H
      CRC8LOOP2:RRC A
                MOV B,A
                POP ACC
                RR A
                PUSH ACC
                DJNZ R7,CRC8LOOP1
                POP ACC
                RET
                ; 
      END  

望有高手告诉我程序哪出问题了~~~~小弟万分感谢
[/size]

发表时间:2007年5月23日21:15:30

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:有没有支持8字节浮点数的C51?有没有支持8字节浮点数的C51? 或6字节的浮点数
[下一篇帖子]:pt6955 帮助谁有pt6955的demon程序或相关资料,能不能给我一份?小弟急用。谢