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

📄 gpf2_ds18b20(duxulie).asm

📁 读DS18B20的序列号
💻 ASM
字号:
;=======================================================================
;copyright belong to 贵鹏斐(读单个DS18B20温度传感器的序列号)         
;               信电学院
;               2008.8.16
;=======================================================================
P1MDOUT   DATA  0A5H                   ; Port 1 Output Mode Configuration   
XBR1      DATA  0E2H                   ; Port I/O Crossbar Control 1   
OSCICN    DATA  0B2H                   ; Internal Oscillator Control   
PCA0MD    DATA  0D9H                   ; PCA Mode   
DQ        EQU    P1.7   
   
    	ORG 0000H
		AJMP MAIN
		ORG 0030H
MAIN:
		MOV  P1MDOUT, #0FFH
    	MOV  XBR1,    #0C0H  
    	ANL  PCA0MD,  #0BFH
  		MOV  PCA0MD,  #000H
		MOV  OSCICN,  #081H
		MOV  SP,      #60H
		CLR EA
		LCALL INT						   ; 调用初始化子程序
		MOV A,#33H
		LCALL WRITE	
	    MOV R0,#8
		MOV R1,#40H
LOOP:	LCALL READ
		MOV @R1,A
		INC R1
		DJNZ R0,LOOP		 
		MOV 48H,#0FFH
		MOV 49H,#0FFH
		MOV 4AH,#0FFH
		MOV 4BH,#0FFH
		SETB EA
		SJMP $
;==========================================================================
INT:					   			   ;初始化子程序
  		 CLR EA						   ;使用ds18b20一定要禁止任何中断的产生
		 SETB DQ
		 NOP
         NOP
      L0:CLR  DQ					   ;总线为低复位电平
		 call delay500us			   ;总线复位电平保持500us
		 SETB DQ					   ;释放总线
		 MOV R2,#50
      L1:djnz R2,L1					   ;延时25us
		 clr C						   ;清存在标志
		 orl C,DQ					   
		 jc L0 						   ;存在?不存在则从来
		 mov R3,#80
      L5:orl C,DQ
		 jc L3
		 nop
		 djnz R3,L5
		 sjmp L0
      L3:mov R2,#240
      L2:nop
		 djnz R2,L2
		 ret
;==========================================================================
delay500us:
		mov r6,#200
lpr6:
		nop
		nop
		djnz r6,lpr6
		ret
;==========================================================================
WRITE:			    					;向DS18B20写操作命令子程序
    	CLR EA
		MOV R3,#8						;写入DS18B20的bit数,一个字节8个bit
   WR1:	SETB DQ
        MOV R4,#8
		RRC A							;把一个字节分成8个位循环移给C
		CLR DQ							;开始写入ds18b20要求处于复位低电平
   WRR2:nop
      	djnz R4,WRR2 	
		MOV DQ,C						;写入一个位
        MOV R4,#40
    WR3:nop
  		DJNZ R4,WR3
		DJNZ R3,WR1						;写入下一位
		SETB DQ
		ret
;==========================================================
READ:
		CLR EA
		MOV R3,#8						;连续读8个BIT
    RE1:CLR DQ							;读前总线保持为低
		NOP
		NOP
		SETB DQ							;开始读,总线释放
        MOV R4,#4
    RE2:NOP
		DJNZ R4,RE2
		MOV C,DQ						;从ds18b20总线读一个位
		RRC A							;把读到的位循环位移给A
		MOV R4,#45
    RE3:NOP
		DJNZ R4,RE3
		DJNZ R3,RE1						;读下一位
		SETB DQ
		ret
;==========================================================       
        END

⌨️ 快捷键说明

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