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

📄 综合.txt

📁 ds1820不带数据校验的数据采集程序,已通过编译
💻 TXT
字号:
;***********************************************************************
;工作内存及常数定义
;***********************************************************************
DATAL      DATA 26H
DATAH      DATA 27H
DATAA      DATA 70H
DATAB      DATA 71H
DATAC      DATA 72H
DATAD      DATA 73H
TEMPHC     DATA 28H
TEMPLC     DATA 29H
DATAHEAD   EQU  36H
;***********************************************************************
;引脚定义
;***********************************************************************
TEMPDIN    BIT P1.0
SDDIN      BIT P1.1
SDCS       BIT P1.2
SDCLOCK    BIT P1.3
TSDISTING  BIT P1.4
STDISTING  BIT P1.5
;***********************************************************************
;中断向量区
;***********************************************************************
ORG 0000H
LJMP START
;***********************************************************************
;系统初始化
;***********************************************************************
 ORG 100H
START:  SETB TSDISTING
        CLR  STDISTING
        MOV R0,#20H
        MOV R1,#60H
CLSMEM: MOV @R0,#00H
        INC R0
	DJNZ R1,CLSMEM


;***********************************************************************
;主程序
;***********************************************************************
MAIN:   
        LCALL READTEMP
        LCALL PROCESSTEMP
        LCALL DISPBCD
        LCALL DISPLAY
        LCALL SEND
        LCALL PROCESSD
        LCALL DISPLAY
        LCALL SEND
        LJMP  MAIN
        NOP
        NOP
        NOP
        LJMP START	
	
 ;***********************************************************
;***********************************************************************
;子程序区
;***********************************************************************
;读温度子程序
;***********************************************************************
READTEMP:       LCALL   INITDS1820
                        MOV     A,#0CCH
				LCALL   WRITEDS1820
				MOV     R6,#34H
				DJNZ    R6,$
				MOV     A,#44H
				LCALL   WRITEDS1820
				MOV     R6,#34H
				DJNZ    R6,$
	     DEL1000MS:         MOV  50H,#08H
             DEL100MS:          MOV  51H,#0FAH
             DEL10MS:           MOV  52H,#0FH
             DEL1MS:            DJNZ 52H,DEL1MS
                                DJNZ 51H,DEL10MS
                                DJNZ 50H,DEL100MS


READTEMP1:      LCALL   INITDS1820
                MOV     A,#0CCH
				LCALL   WRITEDS1820
				MOV     R6,#34H
				DJNZ    R6,$
				MOV     A,#0BEH
				LCALL   WRITEDS1820
				MOV     R6,#34H
				DJNZ    R6,$
				MOV     R5,#09H
				MOV     R0,#DATAHEAD
				MOV     B,#00H
READTEMP2:      LCALL   READDS1820
                MOV     @R0,A
				INC     R0
READTEMP21:     LCALL   CRC8CAL
                DJNZ    R5,READTEMP2
				MOV     A,B
				JNZ     READTEMPOUT
				MOV     A,DATAHEAD+0
				MOV     DATAL,A
				MOV     A,DATAHEAD+1
				MOV     DATAH,A
READTEMPOUT:    RET



;***********************************************************************
;复位DS18B20
;***********************************************************************
INITDS1820:   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

LOOP1820:     MOV    C,TEMPDIN
              JC     INITDS1820OUT
			  DJNZ   R6,LOOP1820
			  MOV    R6,#064H
			  DJNZ   R6,$
			  SJMP   INITDS1820
			  RET
INITDS1820OUT: SETB   TEMPDIN
                 RET

;***********************************************************************
;读ds18b20程序,读取一字节的数据
;***********************************************************************
READDS1820:  MOV    R7,#08H
             SETB   TEMPDIN
			 NOP
			 NOP
READDS1820LOOP: CLR  TEMPDIN
                NOP
				NOP
				NOP
				SETB TEMPDIN
				MOV  R6,#07H
				DJNZ R6,$
				MOV  C,TEMPDIN
				MOV  R6,#3CH
				DJNZ R6,$
				RRC  A
				SETB TEMPDIN
				DJNZ R7,READDS1820LOOP
				MOV  R6,#3CH
				DJNZ R6,$
				RET


;***********************************************************************
;写DS18B20程序,一个字节
;***********************************************************************
WRITEDS1820:    MOV    R7,#08H
                SETB   TEMPDIN
				NOP
				NOP
WRITEDS1820LOP: CLR    TEMPDIN
                MOV    R6,#07H
				DJNZ   R6,$
				RRC    A
				MOV    TEMPDIN,C
				MOV    R6,#34H
				DJNZ   R6,$
				SETB   TEMPDIN
				DJNZ   R7,WRITEDS1820LOP
				RET



;***********************************************************************
;处理温度BCD码子程序
;***********************************************************************
PROCESSTEMP: 
              MOV    A,DATAH
              ANL    A,#80H
	      JZ     TEMPC11
        	CLR    C
	      MOV    A,DATAL
	        CPL    A
       		ADD    A,#01H
		MOV    DATAL,A
		MOV    A,DATAH
		CPL    A
		ADDC   A,#00H
		MOV    DATAH,A
		MOV    TEMPHC,#0b0H
		
                SJMP   TEMPC11

TEMPC11:      MOV    A,TEMPHC
                SWAP   A
				MOV    TEMPHC,A
				MOV    A,DATAL
				ANL    A,#0FH
				MOV    DPTR,#TEMPDOTTAB
				MOVC   A,@A+DPTR
				MOV    TEMPLC,A



				MOV    A,DATAL
				ANL    A,#0F0H
				SWAP   A
				MOV    DATAL,A
				MOV    A,DATAH
				ANL    A,#07H
				SWAP   A
				ORL    A,DATAL
				LCALL  HEX2BCD1
				MOV    DATAL,A
				ANL    A,#0F0H
				
				ORL    A,TEMPHC
				SWAP    A
				MOV    TEMPHC,A
				MOV    A,DATAL
				ANL    A,#0FH
				SWAP   A
				ORL    A,TEMPLC
				MOV    TEMPLC,A
				MOV    A,R7
				JZ     TEMPC12
				ANL    A,#0FH
				SWAP   A
				MOV    R7,A
				MOV    A,TEMPHC
				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
                        	
				

                                RET
;***********************************************************************
;***********************************************************************
;读湿度子程序
;***********************************************************************
READSD: SETB  SDCS
        CLR   SDCLOCK 
        MOV R0,#00H 
        CLR  SDCS
        MOV R6,#08H
       DJNZ R6,$
NXT:SETB SDCLOCK
  MOV C,SDDIN
   RLC A
   CLR SDCLOCK
   INC R0
   CJNE R0,#8H,NXT
    MOV R0,#00H
   SETB SDCS
   MOV   DATAL,A 
   RET
      NOP

;***********************************************************************
;***********************************************************************
;湿度处理子程序
;*********************************************************************** 


PROCESSD:
         MOV DATAD,#00H
         MOV DATAA,#00H
         MOV A,DATAL
         MOV B,#02H
         DIV AB
         MOV R4,B
         MOV B,#0AH
         DIV AB
         
      
         MOV DATAC,A
         MOV DATAB,B
         MOV A,R4
         JNZ CASE1
         RET
CASE1:   MOV DATAA,#05H
         RET


;***********************************************************************
;显示子程序
;***********************************************************************

	  DISPLAY:        CPL    TSDISTING
                                      CPL     STDISTING
                MOV    R1,#70H
                MOV	   R5,#0FEH
PLAY:           MOV    P0,#0FFH
                MOV    A,R5
				MOV    P2,A
				MOV    A,@R1
				MOV    DPTR,#TAB
				MOVC   A,@A+DPTR
				MOV    P0,A
				MOV    A,R5
				JB     ACC.1,LOOP5
				CLR    P0.7
LOOP5:          LCALL  DL1MS
                INC    R1
				MOV    A,R5
				JNB    ACC.3,ENDOUT
				RL     A
				MOV    R5,A
				AJMP   PLAY

ENDOUT:            RET
				

TAB:            DB     0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0C0H,0BFH


DL1MS:          MOV    R6,#14H
       
DL1:            DJNZ   R7,DL2
              
DL2:            DJNZ   R6,DL1
                RET
;***********************************************************************
;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


;***********************************************************************
;单字节十六进制转换为BCD
;***********************************************************************
HEX2BCD1:       MOV    B,#64H
                DIV    AB
				MOV    R7,A
				MOV    A,#0AH
				XCH    A,B
				DIV    AB
				SWAP   A
				ORL    A,B
				RET



;***********************************************************************
;与pc机或者PTR2030接口程序
;***********************************************************************
SEND:   
         
         MOV  TMOD,#20H
         MOV  TH1,#0FDH
         MOV  TL1,#0FDH
         MOV   PCON,#00H
         SETB   TR1
         MOV  SCON,#0D8H
         MOV  R0,#70H
JNB    P3.6,       SENDEND
SENDD: MOV  SBUF,@R0
OK:       JBC   TI,LOOP
             SJMP   OK
LOOP:   INC  R0
        CJNE  R0,#74H,SENDD
SENDEND:   RET
         
END

⌨️ 快捷键说明

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