Code:
; Termo LED 7 seg
'======================================================================================
@ DEVICE pic16F628A, intOSC_osc_noclkout, WDT_OFF, PWRT_ON, MCLR_OFF, LVP_OFF, CPD_OFF
INCLUDE "DT_INTS-14.bas" ' Base Interrupt System
INCLUDE "ReEnterPBP.bas" ' Include if using PBP interrupts
DEFINE OSC 4
CMCON = 7
VRCON = 0
INTCON = 0
Common_4 VAR PORTA.1
Common_3 VAR PORTA.0
Common_2 VAR PORTA.7
Common_1 VAR PORTA.6
DQ VAR PORTA.4
DP VAR PORTB.2
Temp Var Byte
Temperature Var Word
TempC Var Word
I Var Byte
Sign Var Word
Float Var Word
V Var Word
Dummy Var Byte
Busy Var Bit
DIGIT_0 VAR BYTE
DIGIT_1 VAR BYTE
DIGIT_2 VAR BYTE
DIGIT_3 VAR BYTE
digit Var BYTE
DS18B20_12bit CON %01111111 ' 750ms, 0.0625°C
Data @0,20,215,76,69,135,37,36,87,4,5,255
PortA=%00000100
TrisA=%00111000
PortB=%11111111
TrisB=%00000000
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler TMR1_INT, _DISP, PBP, yes
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
@ INT_ENABLE TMR1_INT ; enable Timer 1 interrupts
T1CON = $1
' Init Sensor 1
OWOUT DQ, 1, [$CC, $4E, 0, 0, DS18B20_12bit]
OWOut DQ, 1, [$CC, $48] ' Start temperature conversion
OWOut DQ, 1, [$CC, $B8]
OWOut DQ, 1, [$CC, $BE]
Pause 50
OWIn DQ, 2, [temperature.byte0, temperature.byte1]
Main:
' Start temp.conv.Sensor1
OWOut DQ, 1, [$CC, $44]
OWOut DQ, 1, [$CC, $BE]
OWIn DQ, 2, [temperature.byte0, temperature.byte1]
If Temperature.15 then
Temperature= ~Temperature +1
Sign = 1
Endif
Dummy = 625 * Temperature
TempC = DIV32 10
TempC = (Temperature & $7FF) >> 4
Float = ((Temperature.Lowbyte & $0F ) * 25 )>>2
Temperature = TempC*100 + Float
If Sign=1 then
V= 10000 - Temperature
else
V= 10000 + Temperature
EndIf
If V >= 10000 then
Temperature=V-10000
sign = " "
else
Temperature=10000-V
sign = "-"
EndIf
Temperature=Temperature/10
Gosub Selectie
Goto Main
'======================================================================================
Selectie :
If sign = "-" then
PortB = %11101111
else
PortB = %11111111
endif
IF Temperature DIG 2 = 0 THEN
digit = " "
else
digit = Temperature dig 2
ENDIF
read digit, DIGIT_2
digit = Temperature dig 1
read digit, DIGIT_1
digit = Temperature dig 0
read digit, DIGIT_0
Return
'======================================================================================
Disp:
T1CON.0 = 0 ; stop timer
TMR1H = %11111100
TMR1L = %00011111
T1CON.0 = 1 ; restart timer
Common_1 = 1 : PAUSE 1 : Common_1 = 0
PortB = DIGIT_2
Common_2 = 1 : PAUSE 1 : Common_2 = 0
PortB = DIGIT_1
Common_3 = 1 : DP = 0 : PAUSE 1 : Common_3 = 0 : DP = 1
PortB = DIGIT_0
Common_4 = 1 : PAUSE 1 : Common_4 = 0
@ INT_RETURN
...but I have some errors :
Bookmarks