📄 ds1820m01.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 + -