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

📄 ds18b20asm.txt

📁 如何使用DS18B20
💻 TXT
📖 第 1 页 / 共 2 页
字号:
          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      TEMPOUT          ;
          ANL     A,#0FH           ;
          SWAP    A                ;
          MOV     R7,A             ;
          MOV     A,TEMPHC         ; TEMPHC HI = 百位数 BCD
          ANL     A,#0FH           ;
          ORL     A,R7             ;
          MOV     TEMPHC,A         ;
TEMPOUT:  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      BUF1,A           ; 显示小数
         MOV      A,TEMPLC         ;
         SWAP     A                ;
         ANL      A,#0FH           ;
         MOV      BUF2,A           ; 显示个位
         MOV      A,TEMPHC         ;
         ANL      A,#0FH           ;
         MOV      BUF3,A           ; 显示十位
         MOV      A,TEMPHC         ;
         SWAP     A                ;
         ANL      A,#0FH           ;
         MOV      BUF4,A           ; 显示百位
         MOV      A,TEMPHC         ;
         ANL      A,#0F0H          ;
         CJNE     A,#10H,DISPBCD0  ; 百位数=0?
         SJMP     DISPOUT          ;
DISPBCD0:
         MOV      A, TEMPHC        ;
         ANL      A, #0FH          ;
         JNZ      DISPOUT          ; 十位数是0?
         MOV      A,TEMPHC         ;
         SWAP     A                ;
         ANL      A,#0FH           ;
         MOV      BUF4,0AH         ; 符号位不显示
         MOV      BUF3,A           ; 十位数显示符号
DISPOUT: RET                       ;                 ;
;*************************************
;单字节十六进制转BCD
;*************************************
HEX2BCD1:MOV     B,#64H            ; 十六进制 ->BCD
         DIV     AB                ; B=A%100
         MOV     R7,A              ; R7=百位数
         MOV     A,#0AH            ;
         XCH     A,B               ;
         DIV     AB                ; B=A%B
         SWAP    A                 ;
         ORL     A,B               ;
         RET                       ;
;*************************************
; Calculate CRC-8 Values, Uses The
;CCITT-8 Polynomial,Expressed As
; X^8+X^5+X^4+1
;*************************************
CRC8CAL: PUSH    ACC               ;
         MOV     R7,#08H           ; Number Bits Byte
CRC8LOOP1:
         XRL     A,B               ; Calculate CRC
         RRC     A                 ; Move T0 Carry
         MOV     A,B               ; Get The Last CRC Value
         JNC     CRC8LOOP2         ; Skip If Data==0
         XRL     A,#18H            ; Update The CRC Value
CRC8LOOP2:
         RRC     A                 ; Position The New CRC
         MOV     B,A               ; Store The New CRC
         POP     ACC               ; Get The Remaining Bits
         RR      A                 ; Possition The Next Bit
         PUSH    ACC               ; Save The Remaining Bits
         DJNZ    R7,CRC8LOOP1      ; Repeat For 9 Bits
         POP     ACC               ;
         RET                       ;
;******************************************
;读DS18B20的程序,从DS18B20中读出9个字节数据
;开始的两个字节为温度数据
;******************************************
READ_18200:
           MOV     R4,#9            ; 将温度高位和低位从DS18B20中读出
           MOV     R1,#TEMPER_L     ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
           MOV     B, #00H          ;
;************************************
RE00:
           MOV     R2,#8            ; 数据一共有8位
RE01:
           CLR     C
           SETB    TEMPDIN          ;
           NOP
           NOP
           CLR     TEMPDIN          ;
           NOP
           NOP
           NOP
           SETB    TEMPDIN          ;
           MOV     R3,#9
RE10:
           DJNZ    R3,RE10          ;
           MOV     C,TEMPDIN        ;
           MOV     R3,#23
RE20:
           DJNZ    R3,RE20          ;
           RRC     A
           DJNZ    R2,RE01          ;
;************************************
           MOV     @R1,A            ;
           INC     R1               ;
           LCALL   CRC8CAL          ;
           DJNZ    R4,RE00          ;
           MOV     A,B              ;
           JNZ     READ_OUT         ;

           MOV     TEMPL,TEMPER_L   ;
           MOV     TEMPH,TEMPER_H   ;
READ_OUT:  RET
;*****************************************
;显示子程序
;*****************************************
DISPLAY:
           MOV     DPTR,#NUMTAB     ;指定查表启始地址
           MOV     R0,#4
DP11:      MOV     R1,#250          ;显示1000次

DPLP:      MOV     A,BUF1           ;取小位数
           MOVC    A,@A+DPTR        ;查小位数的7段代码
           MOV     P0,A             ;送出小位的7段代码
           CLR     P2.6             ;开小位显示
           ACALL   DL1ms            ;显示1ms
           SETB    P2.6             ;

           MOV     A,BUF2           ;取个位数
           MOVC    A,@A+DPTR        ;查个位数的7段代码
           MOV     P0,A             ;送出个位的7段代码
           CLR     P2.5             ;开个位显示
           ACALL   DL1ms            ;显示1ms
           SETB    P2.5             ;

           MOV     A,BUF3           ;取十位数
           MOVC    A,@A+DPTR        ;查十位数的7段代码
           MOV     P0,A             ;送出十位的7段代码
           CLR     P2.7             ;开十位显示
           ACALL   DL1ms            ;显示1ms
           SETB    P2.7             ;
           
           MOV     A,BUF4           ;取百位数
           MOVC    A,@A+DPTR        ;查百位数的7段代码
           MOV     P0,A             ;送出百位的7段代码
           CLR     P2.4             ;开百位显示
           ACALL   DL1ms            ;显示1ms
           SETB    P2.4             ;

           DJNZ    R1,DPLP          ;250次没完循环
           DJNZ    R0,DP11          ;4个100次没完循环
           RET
;****************************************
;0.2MS延时(按12MHZ算)
;****************************************
DL1MS:     MOV     R7,#100
           DJNZ    R7,$
           RET
;****************************************
;7段数码管0~9数字的共阳显示代码
;****************************************
NUMTAB:   DB     0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH ;
;               "0"  "1"  "2"  "3"  "4" "5" "6" "7"  "8" "9" "不亮" "-"
;****************************************
          END

⌨️ 快捷键说明

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