📄 ds1620.asm
字号:
;*******************************************************************************************
; DS1620.asm - DS1620采集温度的主程序
;*******************************************************************************************
include "DS1620.inc"
ThermPort: equ 00h
ThermMaskBits: equ 07h
ThermData: equ 01h
ThermClock: equ 02h
ThermReset: equ 04h
gbThermCommand: equ 30h
gbThermDataValueLow: equ 31h
gbThermDataValueHigh: equ 32h
gbThermPortValue: equ 33h
gbThermTHValueLow: equ 34h
gbThermTHValueHigh: equ 35h
gbThermTLValueLow: equ 36h
gbThermTLValueHigh: equ 37h
gbThermTempLow: equ 78h
gbThermTempHigh: equ 79h
;********************************************************************************************
; ThermInitialize()
;**********************************************************************************************
ThermInitialize:
mov a,ThermReadConfig
call ThermPortRead8
mov a,[gbThermDataValueLow]
and a,ThermControlOneShot | ThermControlCPUUse
cmp a,ThermControlCPUUse
jz ThermInitDone
mov a,[gbThermDataValueLow]
and a,~(ThermControlOneShot | ThermControlCPUUse)
or a,ThermControlCPUUse | 08h
mov [gbThermDataValueLow],a
mov a,ThermWriteConfig
call ThermPortWrite8
mov a,10
call SysDelayMS
ThermInitDone:
mov a,ThermStartConvert
mov [gbThermCommand],a
call ThermPortResetHigh
call ThermPortCommandWrite
call ThermPortResetLow
ret
;*******************************************************************************
; ThermReadTemperature()
;*******************************************************************************
ThermReadTemperature:
mov a,0
mov [gbThermDataValueLow],a
mov [gbThermDataValueHigh],a
mov a,ThermReadTemp
Call ThermPortRead9
mov a,[gbThermDataValueLow]
mov [gbThermTempLow],a
mov a,[gbThermDataValueHigh]
mov [gbThermTempHigh],a
ret
;*******************************************************************************
; ThermSetTH()
;*******************************************************************************
ThermSetTH:
mov a,ThermReadTempHigh
Call ThermPortRead9
mov a,[gbThermDataValueLow]
cmp a,[gbThermTHValueLow]
jnz WriteTempTH
mov a,[gbThermDataValueHigh]
cmp a,[gbThermTHValueHigh]
jz ThermSetTHDone
WriteTempTH:
mov a,[gbThermTHValueLow]
mov [gbThermDataValueLow],a
mov a,[gbThermTHValueHigh]
mov [gbThermDataValueHigh],a
mov a,ThermWriteTempHigh
call ThermPortWrite9
mov a,10
call SysDelayMS
ThermSetTHDone:
ret
;*******************************************************************************
; ThermSetTL()
;*******************************************************************************
ThermSetTL:
mov a,ThermReadTempLow
Call ThermPortRead9
mov a,[gbThermDataValueLow]
cmp a,[gbThermTLValueLow]
jnz WriteTempTL
mov a,[gbThermDataValueHigh]
cmp a,[gbThermTLValueHigh]
jz ThermSetTLDone
WriteTempTL:
mov a,[gbThermTLValueLow]
mov [gbThermDataValueLow],a
mov a,[gbThermTLValueHigh]
mov [gbThermDataValueHigh],a
mov a,ThermWriteTempLow
call ThermPortWrite9
mov a,10
call SysDelayMS
ThermSetTLDone:
ret
;***********************************************************************************
; ThermPortResetHigh()
;***********************************************************************************
ThermPortResetHigh:
iord ThermPort
or a,ThermReset
iowr ThermPort
mov [gbThermPortValue],a
ret
;*******************************************************************************
; ThermPortResetLow()
;*******************************************************************************
ThermPortResetLow:
mov a,[gbThermPortValue]
and a,~ThermReset
iowr ThermPort
ret
;*******************************************************************************
; ThermWaitForDone()
;*******************************************************************************
ThermWaitForDone:
mov a,ThermReadConfig
call ThermPortRead8
mov a,[gbThermDataValueLow]
and a,ThermControlDone
jz ThermWaitForDone
ret
;*******************************************************************************
; ThermPortRead8()
;*******************************************************************************
ThermPortRead8:
mov [gbThermCommand],a
mov a,0
mov [gbThermDataValueLow],a
call ThermPortResetHigh
call ThermPortCommandWrite
call ThermPortRead8Bits
call ThermPortResetLow
ret
;*******************************************************************************
; ThermPortWrite8()
;*******************************************************************************
ThermPortWrite8:
mov [gbThermCommand],a
call ThermPortResetHigh
call ThermPortCommandWrite
call ThermPortWrite8Bits
call ThermPortResetLow
ret
;*******************************************************************************
; ThermPortRead9()
;*******************************************************************************
ThermPortRead9:
mov [gbThermCommand],a
mov a,0
mov [gbThermDataValueLow],a
mov [gbThermDataValueHigh],a
call ThermPortResetHigh
call ThermPortCommandWrite
call ThermPortRead9Bits
call ThermPortResetLow
ret
;*******************************************************************************
; ThermPortWrite9()
;*******************************************************************************
ThermPortWrite9:
mov [gbThermCommand],a
call ThermPortResetHigh
call ThermPortCommandWrite
call ThermPortWrite9Bits
call ThermPortResetLow
ret
;*******************************************************************************
; ThermPortCommandWrite()
;*******************************************************************************
ThermPortCommandWrite:
mov a,[gbThermDataValueLow]
push a
mov a,[gbThermCommand]
mov [gbThermDataValueLow],a
call ThermPortWrite8Bits
pop a
mov [gbThermDataValueLow],a
ret
;*******************************************************************************
; ThermPortRead8Bits()
;*******************************************************************************
ThermPortRead8Bits:
mov a,1
push a
pop x
mov a,8
ThermPortRead8BitLoop:
push a
;*********************************************
mov a,[gbThermPortValue]
or a,ThermData
mov [gbThermPortValue],a
iowr ThermPort
mov a,[gbThermPortValue]
and a,~ThermClock
mov [gbThermPortValue],a
iowr ThermPort
iord ThermPort
and a,ThermData
jnz ThermPortRead8BitValue1
ThermPortRead8BitValue0:
jmp ThermPortRead8BitClock
ThermPortRead8BitValue1:
push x
pop a
or [gbThermDataValueLow],a
;jmp ThermPortRead8BitClock
ThermPortRead8BitClock:
mov a,[gbThermPortValue]
or a,ThermClock
mov [gbThermPortValue],a
iowr ThermPort
push x
pop a
asl a
push a
pop x
;*********************************************
pop a
dec a
jnz ThermPortRead8BitLoop
ret
;*******************************************************************************
; ThermPortWrite8Bits()
;*******************************************************************************
ThermPortWrite8Bits:
mov a,1
push a
pop x
mov a,8
ThermPortWrite8BitLoop:
push a
push x
pop a
and a,[gbThermDataValueLow]
jnz ThermPortWrite8BitValue1
ThermPortWrite8BitValue0:
mov a,[gbThermPortValue]
and a,~ThermData
mov [gbThermPortValue],a
iowr ThermPort
jmp ThermPortWrite8BitClock
ThermPortWrite8BitValue1:
mov a,[gbThermPortValue]
or a,ThermData
mov [gbThermPortValue],a
iowr ThermPort
;jmp ThermPortWrite8BitClock
ThermPortWrite8BitClock:
mov a,[gbThermPortValue]
and a,~ThermClock
mov [gbThermPortValue],a
iowr ThermPort
push x
pop a
asl a
push a
pop x
mov a,[gbThermPortValue]
or a,ThermClock
mov [gbThermPortValue],a
iowr ThermPort
pop a
dec a
jnz ThermPortWrite8BitLoop
ret
;*******************************************************************************
; ThermPortRead9Bits()
;*******************************************************************************
ThermPortRead9Bits:
mov a,1
push a
pop x
mov a,8
ThermPortRead9BitLLoop:
push a
mov a,[gbThermPortValue]
or a,ThermData
mov [gbThermPortValue],a
iowr ThermPort
mov a,[gbThermPortValue]
and a,~ThermClock
mov [gbThermPortValue],a
iowr ThermPort
iord ThermPort
and a,ThermData
jnz ThermPortRead9BitLValue1
ThermPortRead9BitLValue0:
jmp ThermPortRead9BitLClock
ThermPortRead9BitLValue1:
push x
pop a
or [gbThermDataValueLow],a
;jmp ThermPortRead9BitLClock
ThermPortRead9BitLClock:
mov a,[gbThermPortValue]
or a,ThermClock
mov [gbThermPortValue],a
iowr ThermPort
push x
pop a
asl a
push a
pop x
pop a
dec a
jnz ThermPortRead9BitLLoop
mov a,[gbThermPortValue]
or a,ThermData
mov [gbThermPortValue],a
iowr ThermPort
mov a,[gbThermPortValue]
and a,~ThermClock
mov [gbThermPortValue],a
iowr ThermPort
iord ThermPort
and a,ThermData
jnz ThermPortRead9BitHValue1
ThermPortRead9BitHValue0:
jmp ThermPortRead9BitHClock
ThermPortRead9BitHValue1:
mov a,1
mov [gbThermDataValueHigh],a
;jmp ThermPortRead9BitHClock
ThermPortRead9BitHClock:
mov a,[gbThermPortValue]
or a,ThermClock
mov [gbThermPortValue],a
iowr ThermPort
ret
;*******************************************************************************
; ThermPortWrite9Bits()
;*******************************************************************************
ThermPortWrite9Bits:
mov a,1
push a
pop x
mov a,8
ThermPortWrite9BitLLoop:
push a
push x
pop a
and a,[gbThermDataValueLow]
jnz ThermPortWrite9BitLValue1
ThermPortWrite9BitLValue0:
mov a,[gbThermPortValue]
and a,~ThermData
mov [gbThermPortValue],a
iowr ThermPort
jmp ThermPortWrite9BitLClock
ThermPortWrite9BitLValue1:
mov a,[gbThermPortValue]
or a,ThermData
mov [gbThermPortValue],a
iowr ThermPort
;jmp ThermPortWrite9BitLClock
ThermPortWrite9BitLClock:
mov a,[gbThermPortValue]
and a,~ThermClock
mov [gbThermPortValue],a
iowr ThermPort
push x
pop a
asl a
push a
pop x
mov a,[gbThermPortValue]
or a,ThermClock
mov [gbThermPortValue],a
iowr ThermPort
pop a
dec a
jnz ThermPortWrite9BitLLoop
mov a,[gbThermDataValueHigh]
and a,ThermData
jnz ThermPortWrite9BitHValue1
ThermPortWrite9BitHValue0:
mov a,[gbThermPortValue]
and a,~ThermData
mov [gbThermPortValue],a
iowr ThermPort
jmp ThermPortWrite9BitHClock
ThermPortWrite9BitHValue1:
mov a,[gbThermPortValue]
or a,ThermData
mov [gbThermPortValue],a
iowr ThermPort
;jmp ThermPortWrite9BitHClock
ThermPortWrite9BitHClock:
mov a,[gbThermPortValue]
and a,~ThermClock
mov [gbThermPortValue],a
iowr ThermPort
nop
nop
nop
nop
nop
mov a,[gbThermPortValue]
or a,ThermClock
mov [gbThermPortValue],a
iowr ThermPort
ret
;=====================文件完毕==========================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -