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

📄 deng1.asm

📁 是一个温度检测和显示,汇编语言
💻 ASM
字号:
;*********************************************************
; 变量定义区
;*********************************************************
 DCLK BIT  P1.0
 DIN  BIT  P1.1
 LOAD BIT  P1.2
 DOUT BIT  P1.3
 SHUJU BIT P2.0
 TIMER1 DATA 3AH
 TIMER2 DATA 39H
 TIMER3 DATA 38H
 WENDU  EQU    37H    ;实际温度地址
 WENDUD  EQU    35H    ;温度低位地址
 WENDUG    EQU    36H    ;温度高位地址
 FLAG   BIT 00H
;*********************************************************
; 主程序
;*********************************************************
 ORG    0000H
 AJMP   0030H
 ORG    0030H


MAIN:
 LCALL GET_WENDU
 RET
 
GET_WENDU:
  SETB SHUJU
S1:
  LCALL INIT_1820
  JB FLAG,S2
  RET
S2:
  MOV A,#0CCH    ;ROM匹配命令
  LCALL XIEB20
  MOV A,#044H       ;发出温度转换命令
  LCALL XIEB20
  LCALL INIT_1820
  MOV A,#0BEH ; 发写暂存存储器命令
  LCALL XIEB20
  LCALL DU18B20
  RET
     
 ;-----------初始化DS18B20程序----------------------
INIT_1820:
   SETB SHUJU                 ;初始化DS18B20程序
   NOP
   CLR SHUJU                  ;DS18B20总线为低电平复位
   MOV R0,#250

L1:
   DJNZ R0,L1                ;保持总线复位电平500us
   SETB SHUJU                ;释放总线
   NOP
   NOP
   MOV  R1,#25H
L2:
   JNB SHUJU,L3
   DJNZ R1,L2                 ;释放总线,保持60us
   LJMP L4
L3:
   SETB FLAG
   LJMP L5
L4:
   CLR FLAG
   LJMP L7
L5:
   MOV R2,#064H;
L6:
   DJNZ R2,L6
L7:
   SETB SHUJU
   RET


;写入18B20指令
;===========================================================
XIEB20:
   MOV    R2,#8          ;一共8位数据
   CLR    C
XIE:
    CLR    SHUJU          ;开始写入DS18B20总线要处于复位(低)状态
    NOP
    NOP
    MOV    R3,#06
    DJNZ   R3,$          ;总线复位保持18微妙以上
    RRC    A              ;把一个字节DATA 分成8个BIT环移给C
    MOV    SHUJU,C        ;写入一个BIT
    MOV    R3,#23
    DJNZ   R3,$            ;等待46微妙
    SETB   SHUJU          ;重新释放总线
    NOP
    NOP
    DJNZ   R2,XIE          ;写入下一个BIT
    SETB   SHUJU
    RET
;----------------------------
;--------------------------------------------------------------
;                      读18B20温度
;***********************************************************
DU18B20:
;------------------------------
;读温度子程序
;从DS18B20中读出温度低位、高位,
;存入35H,36H
;****************************************************
 MOV    R4,#2
    MOV    R1,#35H          ; 存入35H,36H
RE00:      MOV    R2,#8
RE01:
    CLR    C
    SETB    SHUJU
    NOP
    NOP
    CLR    SHUJU            ;读前总线保持为低
    NOP
    NOP
    NOP
    SETB    SHUJU            ;开始读总线释放
    MOV    R3,#06          ;延时15微妙
    DJNZ    R3,$
    MOV    C,SHUJU          ;从DS18B20总线读得一个BIT
    MOV    R3,#23
    DJNZ    R3,$            ;等待46微妙
    RRC    A                ;把读得的位值环移给A
    NOP
    NOP
    DJNZ    R2,RE01          ;读下一个BIT
    MOV    @R1,A
    INC    R1
    DJNZ    R4,RE00
    LCALL WDCZ
    RET
WDCZ:
        MOV  A,WENDUD        ;整数部分
        ANL  A,#0F0H            ;取出高四位
        SWAP  A
        MOV  WENDUD,A
        MOV A,WENDUG
        ANL A,#0FH
        SWAP  A
        ORL  A,WENDUD            ;重新组合温度数据
        MOV  WENDU,A          ;重新组合的温度数据存入WENDU
        LCALL  HEX2BCD1
        MOV  WENDUD,A            ;(A)=十位数和个位数
        ANL  A,#0F0H
        SWAP  A
        MOV  75H,A              ;十位数 BCD
        MOV  A,WENDUD
        ANL  A,#0FH
        MOV  74H,A              ;个位数 BCD
        LCALL DELAY_1S
        LJMP START ;调数码管显示程序
        RET
;==============================================================
;单字节十六进制转BCD
;入口:(A)=单字节十六进制的温度值
;出口:(A)=十位数和个位数
;==============================================================
HEX2BCD1:
        MOV  B,#0AH
        DIV  AB
        SWAP  A
        ORL  A,B              ;(A)=个位数和十位数
        RET
;延时子程序
;**********************************************
DELAY2:MOV R5,#01H
H0: MOV R7,#0FFH
H1: DJNZ R7,H1
DJNZ R5,H0
RET
;*********************************************************
; 初始化CH451子程序
;*********************************************************

INIT_451:
MOV SP,#60H
CLR  DIN        ;先低后高,输出上升沿通知CH451选择4线串行接口
NOP
 SETB  DCLK       ;置为默认的高电平
 SETB  DIN
 SETB  LOAD
 SETB  DOUT
 RET
;***********************************
;数码管显示程序
;***********************************
START:
MOV B,#04H ;设置CH451
MOV A,#07H ;关看门狗开显示键盘
NOP
LCALL WRITE
MOV B,#05H;设置显示参数
MOV A,#080H;BCD译码

⌨️ 快捷键说明

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