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

📄 18b20.asm

📁 18b20的c程序+串口通讯+595显示温度
💻 ASM
字号:
 DIN EQU P2.4
 BEE EQU P2.1
 TEMPER_L EQU 29H       ;保存读出温度的低8位
 TEMPER_H EQU 28H       ;保存读出温度的高8位
 FLAG1 EQU 30H          ;是否检测到DS18B20标志位(位)
 D_BIT EQU 31H          ;数码管小数位存放内存位置(位)
 TEM_BIT EQU 32H        ;负温度标志位
 GGE EQU 21H          ;数码管个位数存放内存位置
 SHI EQU 22H          ;数码管十位数存放内存位置

ORG 0000H
JMP MAIN
ORG 0030H
MAIN:     NOP
LOOP:
        MOV SP,#60H
     MOV SCON,#50H              ;设定串口工作方式为1,REN=1允许接收
     MOV TMOD,#20H              ;定时器1工作方式为2
     ANL PCON,#7FH              ;SMOD=0
     MOV TL1,#0FDH              ;设定波特率为9600
     MOV TH1,#0FDH              ;
;     SETB EA
;     SETB EX0
     SETB IT0
     SETB TR1                   ;开启定时器1  
	LCALL INIT_1820               ;初始化1820

	  JB FLAG1,LOOP1

;	  CLR BEE
          AJMP $
LOOP1:    SETB BEE
	  MOV A,#0CCH     ;跳过ROM匹配
          LCALL WRITE_1820
          MOV A,#44H      ;发出温度转换命令
          LCALL WRITE_1820
          LCALL DELAY     ;等待温度转换的完成
          LCALL DELAY
          LCALL DELAY
          LCALL DELAY
          LCALL DELAY
          LCALL DELAY
          LCALL DELAY
          LCALL DELAY
          LCALL DELAY
          LCALL DELAY
          LCALL DELAY
          LCALL DELAY
          LCALL INIT_1820 ;复位DS18B20
          MOV A,#0CCH
          LCALL WRITE_1820
          MOV A,#0BEH     ;发出读温度命令
          LCALL WRITE_1820
          LCALL READ_1820
          MOV R7,#4
	  MOV  R5,TEMPER_L   
          
	  MOV R6,TEMPER_H
AAA:          
	  MOV A,R6
	  RRC A
	  MOV R6,A

	  MOV A,R5
	  RRC A
	  MOV R5,A
          DJNZ R7,AAA
	  MOV A,R5
	  MOV B,#10
	  DIV AB
	  SWAP A
	  ADD A,B
	  LCALL SEND
	  MOV R7,#50
BBB:	  LCALL DELAY
          DJNZ R7,BBB
	  LJMP LOOP

INIT_1820:               ;DS18B20复位初始化程序
          SETB DIN
          NOP
          CLR DIN
          MOV R0,#255       ;主机发出延时537微秒的复位低脉冲
          DJNZ R0,$
          SETB DIN
          NOP
          NOP
          NOP
          MOV R0,#15
	  DJNZ R0,$              ;判断18B20是否存在
          JNB P2.4,TSR3
          LJMP TSR4
TSR3:     SETB FLAG1
          LJMP TSR5
TSR4:     CLR FLAG1
          LJMP TSR7
TSR5:     MOV R0,#6BH     ;时序要求延时
TSR6:     DJNZ R0,TSR6
TSR7:     SETB DIN
RET
WRITE_1820:                ;写DS18B20子程序(有具体的时序要求)
     MOV R2,#8             ;有8位数据
     CLR C
WR1: CLR DIN
     MOV R3,#6             ;时序要求的延时
     DJNZ R3,$
     RRC A                 ;把数据依次写入DS18B20
     MOV DIN,C
     MOV R3,#23            ;时序要求的延时
     DJNZ R3,$
     SETB DIN
     NOP
     DJNZ R2,WR1
     SETB DIN
     RET
READ_1820:                 ;读DS18B20的程序,从DS18B20读出2个字节的温度数据
     MOV R4,#2             ;将温度的最高位和最地位从DS18B20中读出
     MOV R1,#29H           ;低位存入29H,高位存入28H
RE00:MOV R2,#8
RE01:CLR C
     SETB DIN
     NOP
     NOP
     CLR DIN
     NOP
     NOP
     NOP
     SETB DIN
     MOV R3,#9                  ;时序延时
RE02:DJNZ R3,$
     MOV C,DIN
     MOV R3,#23                 ;时序延时
RE03:DJNZ R3,$
     RRC A
     DJNZ R2,RE01
     MOV @R1,A
     DEC R1
     DJNZ R4,RE00
     RET
DELAY:MOV R3,#80h
   D1:MOV R4,#0fEh
      DJNZ R4,$
      DJNZ R3,D1
      RET
SEND:
     MOV SBUF,A
     NOP
     JNB TI,$                   ;检测标志位,等带数据传送完毕
     CLR TI
     RET


     END
;*****************************************

⌨️ 快捷键说明

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