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

📄 ds18b20的应用.asm

📁 单总线通信协议
💻 ASM
字号:
DQ       	 BIT   P2.0
RS       	 BIT   P3.5		      ;LCD RS=P3.5
RW       	 BIT   P3.6			  ;R/W=P3.6
E        	 BIT   P3.7			  ;E=P3.7
LCD_3    	 EQU   32H
LCD_2    	 EQU   33H
LCD_1    	 EQU   34H
LCD_0    	 EQU   36H
TEMP_DATA_L  EQU   30H
TEMP_DATA_H  EQU   31H
         	ORG 	00H
START:   	MOV   	P1,#01H		  ;清除屏幕
         	CALL  	ENABLE 		  ;写到指定寄存器
         	MOV   	P1,#38H		  ;功能设定(8位,2行,5*7点阵式)
         	CALL  	ENABLE 		  ;写到指定寄存器
         	MOV   	P1,#0CH		  ;显示器ON,光标OFF,闪烁OFF
         	CALL  	ENABLE		  ;写到指定寄存器
         	MOV   	P1,#80H		  ;第一行起始地址
         	CALL  	ENABLE 		  ;写到指定寄存器
         	MOV   	DPTR,#TABLE1	  ;显示“Jiang lao shi”
         	CALL  	WRITE1		  ;到TABLE1取码并写到数据寄存器
		 	MOV   	35H,#2EH
		 	MOV   	37H,#0DFH
		 	MOV   	38H,#43H
MAIN:	 	LCALL   READ_T
         	LCALL   CONVERT_T
		 	LCALL   DISPLAY
		 	LJMP    MAIN
;*************************************
;            初始化DS18B20
;*************************************
DS18B20_INIT:SETB  	DQ
            NOP
			NOP
			CLR   	DQ
			MOV   	R6,#0A0H
			DJNZ  	R6,$
			MOV   	R6,#0A0H
			DJNZ  	R6,$
			SETB  	DQ
			MOV   	R6,#32H
			DJNZ  	R6,$
            MOV 	C,DQ
            JC 		ERROR
			MOV  	R6,#064H
			DJNZ 	R6,$
			RET
ERROR:      CLR     P2.0
            SJMP    DS18B20_INIT
            RET
;**************************************
;         读DS18B20一个字节程序
;**************************************
READ_BYTE:  MOV 	R7,#08H
            SETB 	DQ
			NOP
			NOP
LOOP:       CLR 	DQ
            NOP
			NOP
			NOP
			SETB 	DQ
			MOV 	R6,#07H
			DJNZ 	R6,$
			MOV 	C,DQ
			MOV 	R6,#3CH
			DJNZ 	R6,$
			RRC 	A
			SETB 	DQ
			DJNZ 	R7,LOOP
			MOV 	R6,#3CH
			DJNZ 	R6,$
			RET
;*****************************************
;         写DS18B20程序
;*****************************************
WRITE_BYTE:MOV 	R7,#08H
             SETB 	DQ
			 NOP
			 NOP
LOOP1:       CLR  	DQ
             MOV 	R6,#07H
			 DJNZ 	R6,$
			 RRC 	A
			 MOV 	DQ,C
			 MOV 	R6,#34H
			 DJNZ  	R6,$
			 SETB 	DQ
			 DJNZ  	R7,LOOP1
			 RET
;******************************************
;         读温度程序
;******************************************
READ_T: LCALL DS18B20_INIT
          MOV   A,#0CCH
		  LCALL WRITE_BYTE
		  MOV  	R6,#34H
		  DJNZ  R6,$
		  MOV  	A,#44H
		  LCALL WRITE_BYTE
		  MOV 	R6,#34H
		  DJNZ 	R6,$
READ_T1:LCALL DS18B20_INIT
          MOV 	A,#0CCH
		  LCALL WRITE_BYTE
		  MOV  	R6,#34H
		  DJNZ  R6,$
		  MOV 	A,#0BEH
		  LCALL WRITE_BYTE
		  MOV 	R6,#34H
		  DJNZ  R6,$
		  LCALL READ_BYTE
		  MOV  	TEMP_DATA_L,A
		  LCALL READ_BYTE
		  MOV   TEMP_DATA_H,A
		  RET
;********************************************
;          处理温度数据程序
;********************************************
CONVERT_T: MOV  	A,TEMP_DATA_H
          ANL 	A,#80H
		  JZ 	TEMPC1
		  CLR 	C
		  MOV 	A,TEMP_DATA_L
		  CPL  	A
		  ADD 	A,#01H
		  MOV 	TEMP_DATA_L,A
		  MOV 	A,TEMP_DATA_H
		  CPL 	A
		  ADDC 	A,#00H
		  MOV 	TEMP_DATA_H,A
		  MOV 	A,TEMP_DATA_L
          ANL  	A,#0FH
		  MOV 	DPTR,#TABLE3
		  MOVC 	A,@A+DPTR
		  MOV  	LCD_0,A
		  MOV 	A,TEMP_DATA_L
		  ANL 	A,#0F0H
		  SWAP 	A
		  MOV 	TEMP_DATA_L,A
		  MOV 	A,TEMP_DATA_H
		  ANL 	A,#0FH
		  SWAP 	A
		  ORL  	A,TEMP_DATA_L
		  MOV  	B,#100
		  DIV  	AB
		  MOV   LCD_3,#2DH;'-'
		  SJMP  TEMPC2
TEMPC1:   MOV 	A,TEMP_DATA_L
          ANL  	A,#0FH
		  MOV 	DPTR,#TABLE3
		  MOVC 	A,@A+DPTR
		  MOV  	LCD_0,A
		  MOV 	A,TEMP_DATA_L
		  ANL 	A,#0F0H
		  SWAP 	A
		  MOV 	TEMP_DATA_L,A
		  MOV 	A,TEMP_DATA_H
		  ANL 	A,#0FH
		  SWAP 	A
		  ORL  	A,TEMP_DATA_L
		  MOV 	B,#100
		  DIV 	AB
		  MOV 	DPTR,#TABLE2
		  MOVC 	A,@A+DPTR
		  MOV  	LCD_3,A
TEMPC2:	  MOV  	A,#10
		  XCH 	A,B
		  DIV 	AB
		  MOV  	DPTR,#TABLE2
		  MOVC 	A,@A+DPTR
		  MOV 	LCD_2,A
		  MOV 	A,B
		  MOV  	DPTR,#TABLE2
		  MOVC 	A,@A+DPTR
		  MOV   LCD_1,A
		  RET
;**************************************
;           显示程序
;**************************************
DISPLAY: MOV   P1,#0C0H
		 CALL  ENABLE
		 CALL  WRITE3
         RET
ENABLE:  CLR   RS			  ;RS=0,写到旨令寄存器
         CLR   RW			  ;R/W=0
		 CLR   E			  ;E=1--0使能
		 CALL  DELAY		  ;调用延时子程序
		 SETB  E			  ;E=1禁止
		 RET
WRITE1:  MOV   R1,#00H		  ;取码指针
A1:      MOV   A,R1			  ;到TABLE取码
         MOVC  A,@A+DPTR
		 CALL  WRITE2		  ;调用写入到数据寄存器子程序
		 INC   R1			  ;取码指针加1
		 CJNE  A,#00H,A1	  ;是否取到结束码00H
		 RET
WRITE3:  MOV   R2,#7				  ;显示8位
         MOV   R1,#32H				  ;从左至右显示	
A2:      MOV   A,@R1
		 CALL  WRITE2
		 INC   R1					  ;地址减1
		 DJNZ  R2,A2				  ;8位是否显示完
		 MOV   R2,#7
		 RET
WRITE2:  MOV   P1,A			  ;将数据码写入数据寄存器
         SETB  RS 			  ;RS=1
		 CLR   RW			  ;R/W=0
		 CLR   E			  ;E=1--0 使能
		 CALL  DELAY
		 SETB  E			  ;E=1 禁止
		 RET
DELAY:   MOV   R4,#05		  ;延时子程序
D1:      MOV   R5,#0FFH
         DJNZ  R5,$
		 DJNZ  R4,D1
		 RET
TABLE1:  DB    'Temperature is :',00H
TABLE2:  DB    30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,3AH
TABLE3:  DB    30H,31H,31H,32H,33H,33H,34H,34H,35H,36H,36H,37H,38H,38H,39H,39H
  		 END

⌨️ 快捷键说明

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