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

📄 ds1820m01.asm

📁 18B20汇编程序
💻 ASM
字号:
;-------------------------------------------------------------------------------------
;公司名称:CFIT
;模 块 名: DS18B20测温实验源程序(晶振为12M)
;创 建 者:刘襄随
;修 改 者:
;功能描述: 整数部分为2EH的低4位+2FH的高4位,将他们组成一个新字节就是实际测量温度
;          12位转化时每一位的精度为0.0625度,小数部分为2FH的低4位,实际温度要乘0.0625
;其他说明:
;时    间:2007年7月21日
;完成时间:2007年8月3日
;版    本:V1.0
;-------------------------------------------------------------------------------------
BE_OUT BIT P1.2
DS1820_BIT BIT P2.6
BW_BIT BIT P2.5
SW_BIT BIT P2.4
GW_BIT BIT P2.3
DSW_BIT BIT P2.2
DGW_BIT BIT P2.1

ROM_BIT BIT 20H

FUSU_BIT BIT 01H
SANSHUO_BIT BIT 02H

ONE_BIT BIT 03H

BW EQU 30H
SW EQU 31H
GW EQU 32H
DSW EQU 33H
DGW EQU 34H

ARM_L_TEMP EQU 35H
ARM_H_TEMP EQU 36H
SANSHUO_DAT EQU 37H

L_TEMP EQU 38H
H_TEMP EQU 39H

DIS_1 EQU 40H
DIS_2 EQU 41H
DIS_3 EQU 42H
DIS_4 EQU 43H
DIS_5 EQU 44H
DOT   EQU 45H
ZHENGSHU EQU 46H

ISP_CONTR EQU 0E7H ;电源
WDT_CONTR EQU 0E1H ;看门狗

;-------------------------------------------------------------------------------------
ORG  0000H
LJMP  MAIN

ORG  0003H       ;INT0外中断入口
;LJMP INT0

ORG  000BH       ;T0定时器不(溢出)中断入口
LJMP INT_T0

ORG  0013H       ;INT1外中断1入口
;LJMP INT1

ORG  001BH       ;T1定时器不(溢出)中断入口
;LJMP INT_T1

ORG  0023H       ;PS串行口中断
;LJMP

ORG  002EH       ;定时器/计数器0溢出或T2EX端负跳变(52子系列)

;-------------------------------------------------------------------------------------

MAIN:MOV    SP,   #70H	 ;设置栈指
     MOV    TMOD, #21H;01H
     MOV    TH0,  #0D8H
     MOV    TL0,  #0F0H
     SETB   ET0	 ;允许T0中断
     SETB   TR0  ;启动计数器0
     SETB   EA   ;开CPU中断

     MOV   SCON, #50H
     ;MOV   TMOD, #20H
     MOV   TH1 , #0FDH;3H;
     MOV   TL1 , #0FDH;3H;设置波特率为4800
     ;ORL   PCON, #80H ;
     SETB  TR1

     ; MOV SANSHUO_DAT,#00H
      MOV P1,#0FFH
      MOV P0,#0FFH
      MOV P2,#0FFH
      MOV P3,#0FFH
      CLR ROM_BIT
      SETB SANSHUO_BIT


GET_T:MOV WDT_CONTR,#00111100B;喂狗
     aCALL KEY
     aCALL TO_PC
     aCALL GET_TEMPER
     aCALL JISAN
     aCALL LEDXSZ
     AJMP  GET_T

;------ 从DS18B20中读温度数据程序 ------

GET_TEMPER:CLR EA
           SETB DS1820_BIT
           LCALL RST18B20 ;复位DS18B20
           JB 00H,DSS2
           RET

DSS2: MOV A,#0CCH ;跳过ROM匹配
       LCALL WR18B20
       MOV A,#44H ;向DS18B20发出温度转换命令
       LCALL WR18B20
       LCALL RST18B20 ;准备读温度前先复位DS18B20
       JNB ONE_BIT,ONE_NO1
       MOV A,#0CCH           ;▲单只时用此条指令
       AJMP ONE_YES1
ONE_NO1:MOV A,#055H          ;▲单只时去掉此条指令
ONE_YES1:LCALL WR18B20
         JB ONE_BIT,ONE_DS18B20
         LCALL WR_ROM         ;▲单只时去掉此条指令
ONE_DS18B20:MOV A,#0BEH;向DS18B20发出读温度命令
            LCALL WR18B20
            LCALL RE18B20;读出温度数据
            RET

RE18B20:MOV R7,#9   ;设置要读的字节总数
        MOV R0,#2FH ;设置读的字节存储起始内存地址
        LCALL RE0
        MOV L_TEMP,2FH
        MOV H_TEMP,2FH-1
        SETB EA
        RET

;两支DS18B20时测量程序
WR_ROM:MOV R7,#8 ;读特定序号(通过序号操作特定的传感头)送数顺序为先器件号,最后为CRC
WR_ROM1:MOV A,R7
        ;JB ROM_BIT,DS2
        JB SANSHUO_BIT,DS2
DS1: MOV DPTR,#DB1_ROM
     AJMP DSOK
DS2: MOV DPTR,#DB2_ROM
DSOK:  MOVC A,@A+DPTR
       LCALL WR18B20
       DJNZ R7,WR_ROM1
       RET


DB0_ROM:DB 00H 090H 00H 00H 00H 0F7H 0B8H 04cH 028H ;此序列号件已坏.后8位为探头的序号
DB1_ROM:DB 00H 0A5H 00H 00H 00H 0F7H 0BEH 08H 028H
DB2_ROM:DB 00H 0BEH 00H 00H 00H 0F7H 8FH 0D1H 028H



INT_T0:CLR TR0
       PUSH ACC
       PUSH PSW
       MOV    TH0,  #0D8H
       MOV    TL0,  #0F0H
       INC  SANSHUO_DAT
       MOV A,SANSHUO_DAT
       CJNE A,#200,NO_300MS
       MOV SANSHUO_DAT,#00H
       CPL  SANSHUO_BIT

NO_300MS:
         SETB TR0
         POP PSW
         POP ACC

      RETI


  include "RE1820.asm" ;读一个字节(8 BIT)操作
  include "WR1820.asm" ;写一个字节(8 BIG)操作
  include "RET1820.asm";复位
  include "SCON.asm"   ;串口发送
  include "XS.asm"     ;显示
  include "KEY.asm"
  include "YS_BEEP.asm";延时和声音子程序
  include "JISAN.asm" ;计算温度子程序
  include "ARM_HL.asm" ;设置报警温度
  include "XUHAO.ASM";读一个DS18B20的序列号程序(共9个字节)串口显示

END

⌨️ 快捷键说明

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