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

📄 ds18b20.txt

📁 主要是数字温度传感器DS18B20的读写子程序,已验证可以使用
💻 TXT
字号:
;---------------------------------------------------DS18B20子程序--------------------------------------------

;------------水温采集与显示--------------------------------------------
;所用到的地址有22H,36H,37H,38H
TEMPERATURE:LCALL READTEMP;温度转换开始
       LCALL READTEMP1;读出温度子程序
       LCALL CONVTEMP;处理BCD码子程序
       LCALL HEX2BCD1;BCD码转换
       LCALL DISP;显示温度
       ;LJMP MAIN1
       RET

DELAY:MOV R7,#200
  DD: MOV R6,#10
  DDD: MOV R5,#50
      NOP
DDDD: DJNZ R5,DDDD
      DJNZ R6,DDD
      DJNZ R7,DD
      RET

;********************************开始转换************************************
READTEMP:LCALL INITDS1820;复位
MOV A,#0CCH
LCALL WRITEDS1820;跳过ROM	
MOV R6,#34H
DJNZ R6,$
MOV A,#44H
LCALL WRITEDS1820;开始转换
MOV R6,#34H
DJNZ R6,$
RET
;**********************************************************
;读出温度子程序
;**********************************************************
READTEMP1:
LCALL INITDS1820;先复位
MOV A,#0CCH
LCALL WRITEDS1820;跳过ROM
MOV R6,#34H
DJNZ R6,$
MOV A,#0BEH
LCALL WRITEDS1820;开始转换
MOV R6,#34H
DJNZ R6,$;延时
MOV R5,#02H
MOV R0,#36H
READTEMP2:
LCALL READDS1820
MOV @R0,A
INC R0
DJNZ R5,READTEMP2;第一个字节存在36H,第二个字节存在37H
RET
;***********************************************************
;BCD码转换
;***********************************************************
HEX2BCD1:
MOV B,#064H
DIV AB
MOV R7,A
MOV A,#0AH
XCH A,B
DIV AB
SWAP A
ORL A,B
MOV 22H,A
RET

;***********************************************************
;写DS18B20的程序,从DS18B20中定一个字节数据,该子程序的入口是A
;***********************************************************
WRITEDS1820:
MOV R7,#08H
SETB P3.0
NOP
NOP
WRITEDS1820LOP:
CLR P3.0;下降沿写一次
MOV R6,#07H;延时
DJNZ R6,$
RRC A
MOV P3.0,C
MOV R6,#34H
DJNZ R6,$
SETB P3.0
DJNZ R7,WRITEDS1820LOP
RET


;*********************************************
;读DS18B20的程序,从DS18B20中读出一个字节的数据
;*********************************************
READDS1820:
MOV R7,#08H
SETB P3.0
NOP
NOP
READDS1820LOOP:CLR P3.0
NOP
NOP
NOP
SETB P3.0
MOV R6,#07H;延时15微秒
DJNZ R6,$
MOV C,P3.0;每上升沿取一次数
MOV R6,#3CH;延时120微秒
DJNZ R6,$
RRC A
SETB P3.0
DJNZ R7,READDS1820LOOP
MOV R6,#3CH;延时120微秒
DJNZ R6,$
RET
;**********************************************
;复位子程序
;***********************************************
INITDS1820:
SETB P3.0;先将数据口置1
NOP
NOP
CLR P3.0;再将数据口置0主要的效果是清除存在的标志位
MOV R6,#0A0H
DJNZ R6,$
MOV R6,#0A0H
DJNZ R6,$;延时480微秒
SETB P3.0;将数据口置1
MOV R6,#32H;延时70微秒
DJNZ R6,$
MOV R6,#3CH
LOOP1820:
MOV C,P3.0;取一次数据
JC INITDS1820OUT
DJNZ R6,LOOP1820
MOV R6,#064H;延时200微秒
DJNZ R6,$
SJMP INITDS1820
RET
INITDS1820OUT:SETB P3.0
RET
;****************************************************
;处理温度BCD码
;****************************************************
CONVTEMP:
MOV A,36H;低位温度存在36H的高四位
ANL A,#11110000B
SWAP A;将低四位屏蔽掉,再将高四位放回低四位
MOV 38H,A;把转换好的温度存入38H 
MOV A,37H;高位温度存在37H的低三位
ANL A,#00000111B;将高五位屏蔽掉
SWAP A;再将转换好的低四位放回到高四位
ORL A,38H;将都转换好的高低四位相加,结果存在A里
RET


DISP:MOV A,22H
MOV P2,A
RET

⌨️ 快捷键说明

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