⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.asm

📁 基于89s52单片机的6位一体ds18b20温度采集源代码
💻 ASM
字号:
       
;这是一个使用DS18B20集成数字温度传感器(参见DS18B20.PDF)测量温度的实用程序.
;第1,2个数码管显示温度值
;硬件:将P1.0口线的跳线器置焊盘位置(下方),连接DS18B20,即可.
;本程序使用DS18B20的12位单点采样模式,采样周期约0.8秒钟,每按键一次就采样一次!
;程序编制人:蔡祥荣 2004/06/20
;----------------------------------------------------------------------------------   
         TEMP         EQU 21H         ;当前温度值
         BUFF_LED1    EQU 22H         ;数码管显示缓存
         BUFF_LED2    EQU 23H
         BUFF_LED3    EQU 24H
         BUFF_LED4    EQU 25H
         BUFF_LED5    EQU 26H
         BUFF_LED6    EQU 27H
         BUFF_LED_LP  EQU 28H         ;T0键盘显示扫描缓存
         BUFF_1820L   EQU 30H
         BUFF_1820H   EQU 31H
         F_BEEP       BIT 01H

         LED_PORT   EQU   P0
         DIG_PORT   EQU   P2
         KEY_PORT   EQU   P2
         KEY        BIT   P3.3
         BEEP       BIT   P2.0
         DS18B20    BIT   P1.0
        org   000h
        JMP   main
        ORG   00BH
        JMP   T0_INT
          
        ORG   100H
   main:MOV   SP ,#40H
        MOV   PSW,#00H
        MOV   TMOD,#21h
        MOV   TH0,#240     ;T0=4MS
        MOV   TL0,#96
        SETB   TR0
        SETB   ET0
        SETB   EA
        MOV    R0,#7FH      ;初始化RAM区, 
CLR_RAM:MOV    A,#00H
        MOV    @R0,A
        DJNZ   R0,CLR_RAM
        MOV    P1,0FFH      ;INIT 
        MOV    P2,0FFH
        MOV    P0,0FFH
        MOV    P3,0FFH
        MOV    BUFF_LED3,#10H  ;将数码管LED3-LED6消隐
        MOV    BUFF_LED4,#10H
        MOV    BUFF_LED5,#10H
        MOV    BUFF_LED6,#10H
        
WAIT_KEY:JB     KEY,$          ;等候按键
         SETB   F_BEEP
         CLR    BEEP
         LCALL  GET_TEMP
         LCALL  BIN_BCD
         MOV    BUFF_LED2,B
         MOV    BUFF_LED1,A
         CLR    F_BEEP
         JMP    WAIT_KEY

DEL:     MOV   R5,#02      ;为演示方便,人为插入的延时
DEL01:   MOV   R6,#200
DEL02:   MOV   R7,#200
         DJNZ  R7,$
         DJNZ  R6,DEL02
         DJNZ  R5,DEL01
         RET

BIN_BCD:  MOV  B,#10
          DIV  AB
          RET
 ;---------------------(ds18b20) 访问子程序,时序参见TRANSDATA.PDF文件----------------------------
DS_hart_RST:CLR   DS18B20                      ;总线复位
            MOV   R6,#250                      ;>DELAY 480US
            DJNZ  R6,$
            setb  ds18B20
            MOV   R6,#40                       ;>DELAY 60US
            DJNZ  R6,$
            mov   c,dS18B20
            MOV   R6,#250                      ;>DELAY 480US
            DJNZ  R6,$
            setb  DS18B20
            RET

DS_hart_RD_BYTE:                               ;读取一字节数据
            MOV   R5,#08H
RD_HART_BYTE_LP:  
            NOP
            NOP    
            CLR   DS18B20
            NOP
            NOP
            SETB  DS18B20
            MOV   R6,#06
            DJNZ  R6,$                         ;<DELAY 15US
            MOV   C,DS18B20
            RRC   A
            MOV   R6,#40                       ;>DELAY  60US
            DJNZ  R6,$
            DJNZ  R5,RD_HART_BYTE_LP
            RET

DS_HART_WR_BYTE:                              ;写入一字节指令
            MOV   R5,#08H
            CLR   C
WR_HART_BYTE_LP: 
            nop
            nop
            CLR   DS18B20
            NOP
            NOP       
            RRC     A
            MOV   R6,#06
            DJNZ  R6,$
            setb  ds18B20
            MOV   DS18B20,C
            MOV   R6,#40                      ;>DELAY 60US
            DJNZ  R6,$
            SETB  DS18B20
            DJNZ  R5,WR_HART_BYTE_LP
            RET 

GET_TEMP:    LCALL  DS_HART_RST
             MOV    A,#0CCH
             LCALL  DS_HART_WR_BYTE
             MOV    A,#44H
             LCALL  DS_HART_WR_BYTE
             SETB   DS18B20
             lcall  del                ;WAIT 750ms
             lcall  del 
             LCALL  DS_HART_RST
             MOV   A,#0CCH
             LCALL  DS_HART_WR_BYTE
             MOV   A,#0BEH
             LCALL  DS_HART_WR_BYTE
             MOV   R4,#02
             MOV   R1,#BUFF_1820L
SUB_HART_LP1:LCALL  DS_HART_RD_BYTE   ;读18B20低BYTE(BUFF_1820L)
             MOV   @R1,A
             INC   R1                 ;读18B20高BYTE(BUFF_1820H)
             DJNZ  R4,SUB_HART_LP1
             setb   ds18B20
             MOV   A,BUFF_1820L
             ANL   A,#0FH
             CJNE  A,#10,JUD_HART_INC1 ;四舍五入
             JMP   JUD_HART_EQU
JUD_HART_INC1:JC   JUD_HART_EQU
              MOV  A,BUFF_1820L
              ADD  A,#10H
              MOV  BUFF_1820L,A
              MOV  A,BUFF_1820H
              ADDC A,#00H
              MOV  BUFF_1820H,A  
JUD_HART_EQU:MOV   A,BUFF_1820L       
             ANL   A,#0F0H
             SWAP  A
             MOV   BUFF_1820L,A
             MOV   A,BUFF_1820H
             ANL   A,#0FH
             SWAP  A
             ADD   A,BUFF_1820L
             CJNE  A,#85,END_HART
             RET
END_HART:    MOV   TEMP,A
             RET
     
;-------------  T0 INTRRUPT 数码管扫描定时中断---------------------------
T0_INT:  PUSH   ACC
         PUSH   PSW
         MOV   TH0,#240     ;T0=4MS
         MOV   TL0,#96
         INC    BUFF_LED_LP
         MOV    A,BUFF_LED_LP
         CJNE   A,#06,CONT_SCAN     ;250*4MS=1S
         MOV    BUFF_LED_LP,#00H
CONT_SCAN:MOV   A,BUFF_LED_LP
          RL    A
          MOV   DPTR,#TAB_SCAN
          JMP   @A+DPTR
TAB_SCAN: AJMP  SCAN_L1
          AJMP  SCAN_L2
          AJMP  SCAN_L3
          AJMP  SCAN_L4
          AJMP  SCAN_L5
          AJMP  SCAN_L6
SCAN_L1:  MOV   DIG_PORT,#01111111B
          MOV   A,BUFF_LED1
          JMP   END_SCAN
SCAN_L2:  MOV   DIG_PORT,#10111111B
          MOV   A,BUFF_LED2
          JMP   END_SCAN
SCAN_L3:  MOV   DIG_PORT,#11011111B
          MOV   A,BUFF_LED3
          JMP   END_SCAN
SCAN_L4:  MOV   DIG_PORT,#11101111B
          MOV   A,BUFF_LED4
          JMP   END_SCAN
SCAN_L5:  MOV   DIG_PORT,#11110111B
          MOV   A,BUFF_LED5
          JMP   END_SCAN
SCAN_L6:  MOV   DIG_PORT,#11111011B
          MOV   A,BUFF_LED6
END_SCAN: MOV   DPTR,#TAB_LED
          MOVC  A,@A+DPTR
          MOV   LED_PORT,A
          JNB   F_BEEP,EXIT_T0
          CLR   BEEP
EXIT_T0:  POP   PSW
          POP   ACC
          RETI

TAB_LED:	DB 0C0H,0F9H,0A4H,0B0H,99H,92H   ;数码管显示字型表
		DB 82H,0F8H,80H,90H,88H,83H,0A7H
		DB 0A1H,86H,8EH,0FFH
            
      END  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -