?? ds1820m01.asm
字號(hào):
;-------------------------------------------------------------------------------------
;公司名稱:CFIT
;模 塊 名: DS18B20測溫實(shí)驗(yàn)源程序(晶振為12M)
;創(chuàng) 建 者:劉襄隨
;修 改 者:
;功能描述: 整數(shù)部分為2EH的低4位+2FH的高4位,將他們組成一個(gè)新字節(jié)就是實(shí)際測量溫度
; 12位轉(zhuǎn)化時(shí)每一位的精度為0.0625度,小數(shù)部分為2FH的低4位,實(shí)際溫度要乘0.0625
;其他說明:
;時(shí) 間:2007年7月21日
;完成時(shí)間: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定時(shí)器不(溢出)中斷入口
LJMP INT_T0
ORG 0013H ;INT1外中斷1入口
;LJMP INT1
ORG 001BH ;T1定時(shí)器不(溢出)中斷入口
;LJMP INT_T1
ORG 0023H ;PS串行口中斷
;LJMP
ORG 002EH ;定時(shí)器/計(jì)數(shù)器0溢出或T2EX端負(fù)跳變(52子系列)
;-------------------------------------------------------------------------------------
MAIN:MOV SP, #70H ;設(shè)置棧指
MOV TMOD, #21H;01H
MOV TH0, #0D8H
MOV TL0, #0F0H
SETB ET0 ;允許T0中斷
SETB TR0 ;啟動(dòng)計(jì)數(shù)器0
SETB EA ;開CPU中斷
MOV SCON, #50H
;MOV TMOD, #20H
MOV TH1 , #0FDH;3H;
MOV TL1 , #0FDH;3H;設(shè)置波特率為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中讀溫度數(shù)據(jù)程序 ------
GET_TEMPER:CLR EA
SETB DS1820_BIT
LCALL RST18B20 ;復(fù)位DS18B20
JB 00H,DSS2
RET
DSS2: MOV A,#0CCH ;跳過ROM匹配
LCALL WR18B20
MOV A,#44H ;向DS18B20發(fā)出溫度轉(zhuǎn)換命令
LCALL WR18B20
LCALL RST18B20 ;準(zhǔn)備讀溫度前先復(fù)位DS18B20
JNB ONE_BIT,ONE_NO1
MOV A,#0CCH ;▲單只時(shí)用此條指令
AJMP ONE_YES1
ONE_NO1:MOV A,#055H ;▲單只時(shí)去掉此條指令
ONE_YES1:LCALL WR18B20
JB ONE_BIT,ONE_DS18B20
LCALL WR_ROM ;▲單只時(shí)去掉此條指令
ONE_DS18B20:MOV A,#0BEH;向DS18B20發(fā)出讀溫度命令
LCALL WR18B20
LCALL RE18B20;讀出溫度數(shù)據(jù)
RET
RE18B20:MOV R7,#9 ;設(shè)置要讀的字節(jié)總數(shù)
MOV R0,#2FH ;設(shè)置讀的字節(jié)存儲(chǔ)起始內(nèi)存地址
LCALL RE0
MOV L_TEMP,2FH
MOV H_TEMP,2FH-1
SETB EA
RET
;兩支DS18B20時(shí)測量程序
WR_ROM:MOV R7,#8 ;讀特定序號(hào)(通過序號(hào)操作特定的傳感頭)送數(shù)順序?yàn)橄绕骷?hào),最后為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 ;此序列號(hào)件已壞.后8位為探頭的序號(hào)
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" ;讀一個(gè)字節(jié)(8 BIT)操作
include "WR1820.asm" ;寫一個(gè)字節(jié)(8 BIG)操作
include "RET1820.asm";復(fù)位
include "SCON.asm" ;串口發(fā)送
include "XS.asm" ;顯示
include "KEY.asm"
include "YS_BEEP.asm";延時(shí)和聲音子程序
include "JISAN.asm" ;計(jì)算溫度子程序
include "ARM_HL.asm" ;設(shè)置報(bào)警溫度
include "XUHAO.ASM";讀一個(gè)DS18B20的序列號(hào)程序(共9個(gè)字節(jié))串口顯示
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -