📄 f84 232 temperture.txt
字号:
; 接收
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 + -