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

📄 gpf_ds18b20(dangezhuanhuan).asm

📁 用DS18B20来显示当前的温度
💻 ASM
字号:
;=========================================================
;copyright belong to 贵鹏斐	(单个温度转换)

;       信电学院
;                  2008.8.13
;=========================================================
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				   ; 数据线接P1.7口
;=========================================================
        ORG 0000H 
        AJMP MAIN 
        ORG 0030H 
MAIN:
 		mov  P1MDOUT,   #0FFh		   ;配置端口P1,P2	   		 
		mov  OSCICN,    #081h		   
    	mov  XBR1,      #0C0h 		   
		anl  PCA0MD,    #0BFh		   ;关看门狗
    	mov  PCA0MD,    #000h
        MOV  SP,#60H 
		MOV  40H,#00H
		MOV  41H,#00H
		MOV  42H,#00H
		MOV  43H,#00H
		lcall GET_TEMP 				   ;调用温度转换子程序
        SJMP  MAIN 
;=========================================================
DS18B20_INIT:						   ;初始化子程序
  		 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
;==========================================================
GET_TEMP: 
        CLR PSW.4 

        SETB PSW.3      				;设置工作寄存器当前所在的区域,1区
        CLR EA          				;使用 ds1820 一定要禁止任何中断产生 
        lcall DS18B20_INIT				;调用初始化子程序
        MOV A,#0CCH      
        LCALL write     				;送入跳过 ROM 命令 
        MOV A, #44H 
        LCALL write     				;送入温度转换命令
		lcall DS18B20_INIT 				;温度转换完全再次初始化ds18b20
		MOV A,#0CCH      
        LCALL write     				;送入跳过 ROM 命令 
        MOV A,#0BEH 
        LCALL write     				;送入读温度暂存器命令 
        LCALL read       
        MOV R7,A        				;读出温度值低字节存入 R7 
        LCALL read 
        MOV R6,A        				;读出谩度值高字节存入 R6 
        SETB EA 
        RET 
        
		END 

⌨️ 快捷键说明

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