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

📄 ds1620.asm

📁 USB2.0原理与工程开发光盘(第二版)
💻 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 + -