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

📄 18b2.asm

📁 18b20通过对外界温度的采集把收集的信号通过数据转换和处理后通过数码管进行显示。
💻 ASM
字号:
TEMPER_L EQU  36H ;从DS18B20中读回高位,低位暂存区
      TEMPER_H EQU 35H ;
      TEMPER_NUM EQU 60H;温度值存储
      TEMPER_GE EQU 61H
      TEMPER_SHI EQU 62H
      TEMPER_SAVE EQU 63H
      FLAG1  BIT   00H
      FLAG2  BIT   01H
      
      DQ     BIT   P2.7;单总线口
        ORG  0000H
        AJMP MAIN
        ORG  0030H
      MAIN: MOV SP,#70H 
                 LCALL   GET_TEMPER 
                 LCALL   TEMPER_COV 
          LCALL   DISPLAY
                 LJMP    MAIN
                 NOP 
      ;**************************************************
      ;读出转换后的温度值 
      ;**************************************************
      GET_TEMPER: 
                SETB      DQ ; 定时入口 
      BCD:      LCALL     INIT_1820 
                JB            FLAG1,S22 
                LJMP      BCD ; 若DS18B20不存在则返回 
      S22:     LCALL     DELAY1 
               MOV        A,#0CCH ; 跳过ROM匹配------0CC命令
               LCALL     WRITE_1820 
      MOV A,#44H ; 发出温度转换命令 
      LCALL WRITE_1820 
      NOP 
      LCALL DELAY 
      CBA:LCALL INIT_1820 
      JB FLAG1,ABC 
      LJMP CBA 
      ABC:LCALL DELAY1 
      MOV A,#0CCH ; 跳过ROM匹配 
      LCALL WRITE_1820 
      MOV A,#0BEH ; 发出读温度命令 
      LCALL WRITE_1820 
      LCALL READ_18200 ;READ_1820 
      RET 
      ;**************************************************************
      ;读DS18B20的程序,从DS18B20中读出一个字节的数据 
      ;**************************************************************
      READ_1820: 
      MOV R2,#8 
      RE1: 
      CLR C 
      SETB DQ 
      NOP 
      NOP 
      CLR DQ 
      NOP 
      NOP 
      NOP 
      SETB DQ 
      MOV R3,#7 
      DJNZ R3,$ 
      MOV C,DQ 
      MOV R3,#23 
      DJNZ R3,$ 
      RRC A 
      DJNZ R2,RE1 
      RET 
      ;******************************************************
      ;写DS18B20的程序 
      ;******************************************************
      WRITE_1820: 
      MOV R2,#8 
      CLR C 
      WR1: 
      CLR DQ 
      MOV R3,#6 
      DJNZ R3,$ 
      RRC A 
      MOV DQ,C 
      MOV R3,#23 
      DJNZ R3,$ 
      SETB DQ 
      NOP 
      DJNZ R2,WR1 
      SETB DQ 
      RET
      ;**************************************************** 
      ;读DS18B20的程序,从DS18B20中读出两个字节的温度数据 
      ;****************************************************
      READ_18200: 
      MOV R4,#2 ; 将温度高位和低位从DS18B20中读出 
      MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H) 
      RE00: 
      MOV R2,#8 
      RE01: 
      CLR C 
      SETB DQ 
      NOP 
      NOP 
      CLR DQ 
      NOP 
      NOP 
      NOP 
      SETB DQ 
      MOV R3,#7 
      DJNZ R3,$ 
      MOV C,DQ 
      MOV R3,#23 
      DJNZ R3,$ 
      RRC A 
      DJNZ R2,RE01 
      MOV @R1,A 
      DEC R1 
      DJNZ R4,RE00 
      RET 
      ;;**************************************************** 
      ;将从DS18B20中读出的温度数据进行转换
      ;;****************************************************  
      TEMPER_COV: 
      MOV A,#0F0H 
      ANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值 
      SWAP A 
      MOV TEMPER_NUM,A ;得到低四位
      MOV A,TEMPER_L 
      JNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值 
      INC TEMPER_NUM 

      TEMPER_COV1: 
	  mov temper_ge,temper_num
      MOV A,TEMPER_H 
      ANL A,#07H 
     
      ;得到高四位,再与低四位相或得到值
      MOV b,#16
	   mul ab
	   add a,temper_ge
	   mov b,#10
	   div ab
	   mov temper_shi,a

	   mov temper_ge,b        ; 保存变换后的温度数据 
    	lcall display
      RET
      ;;**************************************************** 
      ;将16进制的温度数据转换成压缩BCD码 
      ;;****************************************************
      
      
   
    
  
    
    
     
      ;****************************************************
      ;DS18B20初始化程序 
      ;;****************************************************
      INIT_1820: 
      SETB DQ 
      NOP 
      CLR DQ 
      MOV R0,#250
      TSR1: 
      DJNZ R0,TSR1 ; 延时520us 
      SETB DQ 
      MOV R0,#25H ;96US-25H 
      TSR2: 
      DJNZ R0,TSR2 
      JNB DQ,TSR3;如D0为低则复位成功,DS18B20存在 
      LJMP TSR4 ; 延时 
      TSR3: 
      SETB FLAG1 ; 置标志位,表示DS1820存在 
      LJMP TSR5 
      TSR4: 
      CLR FLAG1 ; 清标志位,表示DS1820不存在 
      LJMP TSR7 
      TSR5: 
      MOV R0,#06BH ;200US 
      TSR6: 
      DJNZ R0,TSR6 ; 延时 
      TSR7: 
      SETB DQ ;拉高总线
      RET 
      ;*************************************************
      ;数码显示程序
      ;*************************************************
      Display:
       MOV DPTR,#disptab
       MOV  A,TEMPER_GE
       MOVC A,@A+DPTR
	   add a,#80h
       MOV P0,A
       setb P2.1
       CALL DELAY
       CALL DELAY
       clr P2.1
       MOV DPTR,#disptab
       MOV  A,TEMPER_SHI
       MOVC A,@A+DPTR
       MOV P0,A
       setb P2.0
       CALL DELAY
       CALL DELAY
       clr P2.0
       RET
	  DELAY:
      MOV R6,#250;延时500us
      DJNZ R6,$ 
      RET 
      DELAY1:MOV R7,#20H 
      DJNZ R7,$ 
      RET 
      disptab:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
                
				  end

⌨️ 快捷键说明

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