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

📄 at89c5218b2012232f.txt.txt

📁 温度传感器采用DALLAS公司继DS1820之后推出的一种改进型智能温度传感器DS18B20
💻 TXT
📖 第 1 页 / 共 2 页
字号:
       NOP            ;
       NOP            ;
WRITEDS1820LOP: CLR   TEMPDIN        ;
       MOV      R6, #07H    ; DELAY 15us
             DJNZ    R6, $        ;
            RRC    A        ;
            MOV TEMPDIN, C     ;
            MOV R6, #34H    ; DELAY 104us
            DJNZ   R6, $       ;
            SETB   TEMPDIN        ;
            DJNZ    R7, WRITEDS1820LOP  ;
       RET            ;
;
;
;**********************************************************
;       READ TEMP
;**********************************************************
READTEMP: LCALL INITDS1820     ;
       MOV   A, #0CCH    ;
       LCALL WRITEDS1820    ; SKIP ROM
       MOV   R6, #34H    ; DELAY 104us
       DJNZ  R6, $       ;
       MOV   A, #44H        ;
       LCALL WRITEDS1820    ; START CONVERSION
       MOV   R6, #34H    ; DELAY 104us
       DJNZ  R6, $    ;
       RET            ;
;
READTEMP1:   LCALL INITDS1820     ;
       MOV   A, #0CCH    ;
       LCALL WRITEDS1820    ; SKIP ROM
       MOV   R6, #34H    ; DELAY 104us
       DJNZ  R6, $       ;
       MOV   A, #0BEH    ;
       LCALL WRITEDS1820    ; SCRATCHPAD
       MOV   R6, #34H    ; DELAY 104us
       DJNZ  R6, $       ;
       MOV   R5, #09H    ;
       MOV   R0, #TEMPHEAD     ;
                MOV     B,#00H
READTEMP2:   LCALL READDS1820     ;
       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    ; TEMPHC HI = 符号位
       MOV   TEMPHC, #10H      ;
       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
;
       RET
;
TEMPP:
        MOV  A,#90H          ;第二行左第一个字开始
    LCALL WRITE_COM
    MOV  DPTR,#CHINESE3     ;16*16点阵“温度-----”
    LCALL WRITE_HZ
        RET
;
;**********************************************************
;   温度值涮新子程序
;**********************************************************
;
DISPTEMP:       MOV   A, TEMPLC      ;
       ANL   A, #0FH        ;
       MOV   66H, A              ;
       MOV   A, TEMPLC      ;
       SWAP  A        ;
       ANL   A, #0FH        ;
       MOV   64H, A              ;
       MOV   A, TEMPHC      ;
       ANL   A, #0FH        ;
       MOV   63H, A              ;
       MOV   A, TEMPHC      ;
       SWAP  A        ;
       ANL   A, #0FH        ;
       MOV   62H, A              ;
       MOV   A, TEMPHC      ;
       ANL   A, #0F0H    ;
       CJNE  A, #010H, DISPBCD0   ;
       SJMP  DISPBCD2    ;
;
DISPBCD0: MOV   A, TEMPHC      ;
       ANL   A, #0FH        ;

       JNZ   DISPBCD2    ; 十位数是零
       MOV   A, TEMPHC      ;
       SWAP  A        ;
       ANL   A, #0FH        ;
       MOV   62H, #0FH           ; 符号位不显示
       MOV   63H, A              ; 十位数显示符号
DISPBCD2:             ;
                MOV     60H,#0AH                ;  :
                MOV     61H,#0FH                ;  空
                MOV     65H,#11H                ;  小数点.
                MOV     67H,#0FH                ;  空

;
;以下将60H-67H温度信息写入液晶LCD
TEMPUP: PUSH  PSW
        MOV   PSW,#08H
        MOV  A,#92H          ;第二行左第3个字开始
    LCALL WRITE_COM
        MOV   R1,#60H           ;将60-67H时间数据查出字码写入LCD
        MOV   DPTR,#TABLE1
        MOV   R2,#08H          ; 查8次
        MOV   A,#00H
TEMPLOP:MOV   A,@R1            ;
        MOVC  A,@A+DPTR
        LCALL WRITE_DAT
        INC   R1
        DJNZ  R2,TEMPLOP       ;
        POP   PSW
        RET
;
;**********************************************************
;   单字节 16 进制转 BCD
;**********************************************************
HEX2BCD1: MOV   B, #064H    ; 16 进制 -> 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 In Byte
;
CRC8LOOP1:   XRL   A, B        ; Calculate CRC
       RRC   A        ; Move To 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        ; Position The Next Bit
       PUSH  ACC         ; Save The Remaining Bits
       DJNZ  R7, CRC8LOOP1     ; Repeat For 8 Bits
       POP   ACC         ;
       RET            ;
;
;------------ 以下24C16读写程序----------------------
;CLR A
;MOV R0, #10H
;MOV R7, #55H
;LCALL C16BYWR
;
;MOV R6, #00H
;MOV R7, #064H
;LCALL DELAY
;
;LCALL C16CURD
;
;CLR A
;MOV R0, A
;LCALL C16CURD
;
;-----------------------------------------------
; 24C16字节写入程序
; 将R7中的数据写入到(Acc^R0)指定的单元中
;-----------------------------------------------
C16BYWR: RL A
ORL A, #0A0H
LCALL STA
LCALL WRBYT
LCALL EXTCL
MOV A, R0
LCALL WRBYT
LCALL EXTCL
MOV A, R7
LCALL WRBYT
LCALL EXTCL
LCALL STOP
RET
;
;-----------------------------------------------
; 24C16页写入程 序 (R7中的数据在1-16内)
; 将以R1为首地址R7个内存中的数据写入
;到(Acc^R0)指定首地址的连续单元中
;-----------------------------------------------
C16PAWR:
RL A
ORL A, #0A0H
LCALL STA
LCALL WRBYT
LCALL EXTCL
MOV A, R0
LCALL WRBYT
LCALL EXTCL
C16PAWR1: MOV A, @R1
LCALL WRBYT
LCALL EXTCL
INC R1
DJNZ R7, C16PAWR1
LCALL STOP
RET
;
;-----------------------------------------------
; 24C16当前字节读程序
; 读出的数据在Acc中
;-----------------------------------------------
C16CURD: MOV A, #0A1H
LCALL STA
LCALL WRBYT
LCALL EXTCL
LCALL RDBYT
LCALL MNACK
LCALL STOP
RET
;
;-----------------------------------------------
; 24C16随机字节读程序
; 将(Acc^R0)指定的字节数据读出到Acc中
;-----------------------------------------------
C16RARD: RL A
ORL A, #0A0H
LCALL STA
LCALL WRBYT
LCALL EXTCL
MOV A, R0
LCALL WRBYT
LCALL EXTCL
MOV A, #0A1H
LCALL STA
LCALL WRBYT
LCALL EXTCL
LCALL RDBYT
LCALL MNACK
LCALL STOP
RET
;
;-----------------------------------------------
; 24C16顺序读取程序
; 将(Acc^R0)指定起始的R7个字节数据读出
;到R1为首地址的内存单元中
;-----------------------------------------------
C16SERD: RL A
ORL A, #0A0H
LCALL STA
LCALL WRBYT
LCALL EXTCL
MOV A, R0
LCALL WRBYT
LCALL EXTCL
MOV A, #0A1H
LCALL STA
LCALL WRBYT
LCALL EXTCL
LCALL RDBYT
MOV @R1, A
INC R1
DEC R7
C16SERD1: LCALL MACK
LCALL RDBYT
MOV @R1, A
INC R1
DJNZ R7, C16SERD1
LCALL MNACK
LCALL STOP
RET
;
;-----------------------------------------------
; 24C16基本操作子程序们
;-----------------------------------------------
;
STA: SETB VSDA
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSDA
NOP
NOP
NOP
NOP
CLR VSCL
RET
;
STOP: CLR VSDA
NOP
SETB VSCL
NOP
NOP
NOP
NOP
SETB VSDA
NOP
RET
;
MACK: CLR VSDA
NOP
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSCL
SETB VSDA
RET
;
MNACK: SETB VSDA
NOP
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSCL
NOP
RET
;
EXTCL: SETB VSDA
NOP
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSCL
NOP
RET
;
WRBYT: MOV R5, #08H
WLP: RLC A
MOV VSDA, C
NOP
SETB VSCL
NOP
NOP
NOP
NOP
CLR VSCL
DJNZ R5, WLP
RET
;
RDBYT: MOV R5, #08H
SETB VSDA
RLP: SETB VSCL
NOP
MOV C, VSDA
RLC A
CLR VSCL
NOP
NOP
DJNZ R5, RLP
RET
;===============================================
END










⌨️ 快捷键说明

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