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

📄 ds18b20.asm

📁 DS18B20驱动程序,已通过实物认证.
💻 ASM
字号:
CONFIG12 EQU 1FH         ;DS18B20的转换精度选择(0、R1、R2、1、1、1、1、1)
                         ;                           0   0   9位测量
                         ;                           0   1   10位测量
                         ;                           1   0   11位测量
                         ;                           1   1   12位测量
TEMPH    EQU 40H         ;高位温度原始数据的读入地址
TEMPL    EQU 41H         ;低位温度原始数据的读入地址
DAT      EQU P2.2        ;DS18B20与单片机通信的口线

  ORG 0000H
  LJMP START
  ORG 0030H
START:
  LCALL INIT             ;调用初始化子程序
MAIN:
  LCALL RDTEMP           ;调用读子程序,从DS18B20中读取出温度值
  LCALL DIVV             ;调用运算子程序
  LCALL DISPLAY          ;调用显示子程序显示当前温度值
  LJMP MAIN

INIT:
  LCALL RESET            ;调用DS18B20复位子程序
  MOV A,#CONFIG12        ;将DS18B20的转换精度控制数据写入DS18B20
  LCALL WRITE
  RET

RDTEMP:
  LCALL RESET            ;调用DS18B20复位子程序
  MOV A,#0CCH            ;使DS18B20跳过读序列号的操作
  LCALL WRITE
  MOV A,#44H             ;命令DS18B20启动温度转换操作
  LCALL WRITE
  LCALL RESET            ;在重新写入命令之前再次进行复位操作
  MOV A,#0CCH
  LCALL WRITE
  MOV A,#0BEH            ;从DS18B20中将转换好的温度数据读出命令
  LCALL WRITE
  LCALL READ             ;调用读程序将低8位温度数据读入A
  MOV TEMPL,A            ;将低8位温度数据存入TEMPL寄存器中
  LCALL READ
  MOV TEMPH,A
  RET

DIVV:                    ;数据处理子程序,负责将温度数据转换为BCD码
  MOV A,41H              
  MOV B,#16
  DIV AB                 ;将温度数据低8位除以16,那么商中得到低8位温度数据的整数部分
  MOV 74H,A              ;将低8位温度数据的整数部分暂存于74H中
  MOV A,B                ;将余数(即小数部分)转存于A中
  MOV B,#10
  MUL AB                 ;将小数部分的余数乘以10,求小数点后1位
  MOV B,#16
  DIV AB                 ;然后再除以16,因为小数部分的二进制数是实际表示的温度的16倍
  MOV 70H,A              ;将小数点后1位的数据存入70H中
  MOV A,40H
  MOV B,#16
  MUL AB                 ;将温度数据高8位乘以16,因为它们所表示的温度是实际数据的16倍
  ADD A,74H              ;将高8位中的整数部分数据加上低8位中的整数部分数据得到整数温度
  MOV B,#10              
  DIV AB                 ;将整数温度除以10求出温度的个位
  MOV 71H,B              ;将温度BCD码的个位数据(除完后的余数)存入71H中
  MOV B,#10
  DIV AB                 ;将上一次除法运算的商再除以10,求出温度的十位
  MOV 72H,B              ;将温度BCD码的十位数据(除完后的余数)存入72H中
  RET

DISPLAY:
  MOV P0,#0FFH
  MOV A,72H
  MOV DPTR,#TAB
  MOVC A,@A+DPTR
  MOV P1,A
  CLR P0.0
  LCALL DLIMS
  MOV P0,#0FFH
  MOV A,71H
  MOV DPTR,#TAB
  MOVC A,@A+DPTR
  MOV P1,A
  CLR P0.1
  LCALL DLIMS
  MOV P0,#0FFH
  RET

RESET:
LA:
  SETB DAT
  MOV R2,#200
LB:
  CLR DAT
  DJNZ R2,LB
  SETB DAT
  MOV R2,#30
LC:
  DJNZ R2,LC
  CLR C
  ORL C,DAT
  JC LB
  MOV R6,#80
LD:
  ORL C,DAT
  JC LP
  DJNZ R6,LD
  SJMP LA
  DJNZ R6,LD
LP:
  MOV R2,#250
LF:
  DJNZ R2,LF
  RET

WRITE:
  MOV R3,#8
WR1A:
  SETB DAT
  MOV R4,#8
  RRC A
  CLR DAT
WR2A:
  DJNZ R4,WR2A
  MOV DAT,C
  MOV R4,#30
WR3A:
  DJNZ R4,WR3A
  DJNZ R3,WR1A
  SETB DAT
  RET

READ:
  CLR EA
  MOV R6,#8
RD1A:
  CLR DAT
  MOV R4,#6
  NOP
  SETB DAT
RD2A:
  DJNZ R4,RD2A
  MOV C,DAT
  RRC A
  MOV R5,#30
RD3A:
  DJNZ R5,RD3A
  DJNZ R6,RD1A
  SETB DAT
  RET

DLIMS:
  MOV R6,#15H
DLL1:
  MOV R7,#20H
DLL2:
  DJNZ R7,DLL2
  DJNZ R6,DLL1
  RET

TAB:
  DB 0C0H 0F9H 0A4H 0B0H 99H
  DB 92H  83H  0F8H 80H  98H



⌨️ 快捷键说明

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