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

📄 f84 232 temperture.txt

📁 pic系列单片机得控制程序 主要进行温度采集和转换控制
💻 TXT
📖 第 1 页 / 共 2 页
字号:
                      
                      
; 接收
receive               btfsc   PORTA, 0        ; Auf Startbit warten
                      goto    $-1
                      movlw   baudrate
                      movwf   delay
rxbaudwait            decfsz  delay
                      goto    $-1
                      movlw   baudrate
                      movwf   delay
                      decfsz  count
                      goto    recvnextbit
                      movlw   .9
                      movwf   count
                      retlw   0
recvnextbit           bcf     STATUS, C
                      btfsc   PORTA, 0
                      bsf     STATUS, C
                      rrf     rcreg
                      goto    rxbaudwait
                      
                      
write_one             bcf PORTA, 2
                      call delay_7us          ; 7 us warten
                      bsf PORTA, 2
                      call delay_80us         ; 80 us warten
                      
                      return


write_zero            bcf PORTA, 2
                      call delay_80us         ; 80 us warten
                      bsf PORTA, 2

                      return
                      
                      
init_ds1820           bsf STATUS, RP0         ; Bank 1
                      bcf TRISA, 2            ; RA2 Ausgang
                      bcf STATUS, RP0         ; Bank 0
                      
                      bcf PORTA, 2
                      call delay_600us        ; 600 us low -> Reset
                      bsf PORTA, 2
                      
                      bsf STATUS, RP0         ; Bank 1
                      bsf TRISA, 2            ; RA2 Eingang
                      bcf STATUS, RP0         ; Bank 0
                      
                      call delay_50us         ; 50 us Pause
                      
init_ds1820_loop      btfsc PORTA, 2
                      goto init_ds1820_loop   
                      return
                      
                      
write_ds1820          bsf STATUS, RP0         ; Bank 1
                      bcf TRISA, 2            
                      bcf STATUS, RP0         ; Bank 0
                      
                      movlw 0x08
                      movwf KEY
                      
write_ds1820_loop     rrf ds1820, f           
                      nop
                      
                      btfss STATUS, C
                      goto $+3
                      call write_one
                      goto $+2
                      call write_zero
                      
                      decfsz KEY, f
                      goto write_ds1820_loop  
                      
                      bsf STATUS, RP0         ; Bank 1
                      bsf TRISA, 2           
                      bcf STATUS, RP0
                      
                      return
                      
                      
read_ds1820           clrf ds1820
                      bcf STATUS, C
                      
                      movlw 0x08
                      movwf KEY
                      
read_ds1820_loop      bsf STATUS, RP0         ; Bank 1
                      bcf TRISA, 2            ; RA2 Ausgang
                      bcf STATUS, RP0         ; Bank 0
                      
                      bcf PORTA, 2            ; Low
                      nop
                      bsf STATUS, RP0         ; Bank 1
                      bsf TRISA, 2            ; RA2 Eingang
                      bcf STATUS, RP0         ; Bank 0
                      bsf PORTA, 2            ; High, wird nicht ausgegeben
                      nop
                      nop
                      nop
                      nop
                      nop
                      nop
                      bsf STATUS, C
                      btfss PORTA, 2          ; Bus samplen
                      bcf STATUS, C
                      rrf ds1820, f           ; Nach rechts verschieben
                      
                      call delay_80us         ; 80 us Pause
                      
                      decfsz KEY, f
                      goto read_ds1820_loop   ;  bis alle 8 Bits empfangen
                      
                      return
                      
                      
read_temp             call init_ds1820        ; DS1820 
                      
                      call delay_600us
                      
                      movlw 0xCC
                      movwf ds1820
                      call write_ds1820       ; ROM-Kommando 0xCC: Skip ROM
                      
                      call delay_600us
                      
                      movlw 0x44
                      movwf ds1820
                      call write_ds1820       ; Kommando 0x44: Convert Temperature
                      
                      call delay_1s
                      
                      call init_ds1820
                      
                      call delay_600us
                      
                      movlw 0xCC
                      movwf ds1820
                      call write_ds1820       ; ROM-Kommando 0xCC: Skip ROM
                      
                      movlw 0xBE
                      movwf ds1820
                      call write_ds1820       ; Kommando 0xBE: Read Scratchpad
                      
                      call read_ds1820
                      movf ds1820, w
                      movwf temp1             ; Temperatur LSB
                      
                      call read_ds1820
                      movf ds1820, w
                      movwf temp2             ; Temperatur MSB
                      
                      return
                      
                      
convert_temp          bcf rest, 1
                      movf temp2, w
                      sublw 0xFF
                      btfss STATUS, Z         ; Negative Temperatur?
                      goto $+4
                      comf temp1, f           ; Ja, 2-er Komplement bilden
                      incf temp1, f
                      bsf rest, 1           

                      movf temp1, w           
                      movwf loops
                      
                      bcf rest, 0
                      bcf rest, 2
                      
                      bcf STATUS, C
                      rrf temp1, f            
                      
                      bcf STATUS, C
                      rlf temp1, w            
                      
                      subwf loops, w          
                      btfss STATUS, Z
                      bsf rest, 0             
                      
                      return
                      
                      
main                  bsf STATUS, RP0         ; Bank 1
                      movlw B'11111101'
                      movwf OPTION_REG        ; Pull-up ein
                      movlw B'00000000'
                      movwf TRISB             ; PortB all Outputs
                      movlw B'11110001'
                      movwf TRISA             ; 
                      bcf STATUS, RP0         ; Bank 0
                      clrf PORTB
                      movlw B'00000000'
                      movwf INTCON           
                      
                      bsf PORTA, 1
                      bsf PORTA, 2            
                      bcf PORTA, 3
                      
                      clrf rest              
loop                  call read_temp        
                      call send_temp
                      call convert_temp       
                      
                      movf temp1, w
                      movwf bin                      
                      call bin2bcd          
                      
                      btfss rest, 1
                      goto $+4               
                      movlw '-'
                      movwf txreg
                      call send
                      
                      btfsc rest, 1
                      goto $+4
                      movlw '+'
                      movwf txreg
                      call send              
                      
                      movf huns, w
		      movwf txreg
                      call send               
                      
                      movf tens, w
		      movwf txreg
                      call send               
                      
                      movf ones, w
                      movwf txreg
                      call send               
                      
                      movlw '.'
                      movwf txreg
                      call send            
                      
                      btfss rest, 0
                      goto $+3
                      movlw '5'
                      goto $+2
                      movlw '0'
                      movwf txreg
                      call send               
                      
                      movlw D'13'
                      movwf txreg
                      call send
                      movlw D'10'
                      movwf txreg
                      call send
                      
                      goto loop

                      sleep                    
                      end

⌨️ 快捷键说明

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