Witam,
Napisalem wieksza czesc kodu lecz po drodze napotkalem na przeszkode w postaci waita przy odczytywaniu temeratury. Chcialbym calkowicie zrezygnowac z waitow, bitwaitow itp wiec mysle nad wykorzystaniem timera.
Napisalem maly programik testujacy lecz nie do konca dziala prawidlowo
Problem w tym, ze nie wiem gdzie zerowac zmienna pomonicza 'pom'. oraz kawalek
jest wykonywany w kazdej petli a powinien raz przy pelnym odczycie.
Czy ide w dobrym kierunku ? Jak mozna to przerobic ?
Szukalem, lecz nie moglem znalesc innego kodu w ktorym jasno by bylo wyjasnione jak zastapic timerem waity (bede potrzebowal tego rownierz do obslugi drgania stykow).
Pozdrawiam
Napisalem wieksza czesc kodu lecz po drodze napotkalem na przeszkode w postaci waita przy odczytywaniu temeratury. Chcialbym calkowicie zrezygnowac z waitow, bitwaitow itp wiec mysle nad wykorzystaniem timera.
Napisalem maly programik testujacy lecz nie do konca dziala prawidlowo
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Timer0 = Timer , Prescale = 64 '8MHz/64/250/500 = 1 sekunda
Config 1wire = Portd.0
On Timer0 Przerwanie
Enable Interrupts
Enable Timer0
Dim Licznik As Integer
Dim Pom As Byte
Dim I As Integer 'zmienne do odczytu temp.
Dim S As Single
Dim T As String * 4
Deflcdchar 0 , 6 , 9 , 6 , 32 , 32 , 32 , 32 , 32 ' znak stopnia
Declare Sub Pomiar
Timer0 = 6
Licznik = 0 'flaga do zliczania 252us
Pom = 0 'flaga pomocnicza do okreslenia czy uplynelo 252us
Do
Call Pomiar()
Pom = 0
Loop
End
Sub Pomiar()
1wreset
1wwrite &HCC
1wwrite &H44
'Waitms 250 'to chce zastapic timerem
Start Timer0
If Pom = 1 Then
1wreset
1wwrite &HCC
1wwrite &HBE
I = 1wread(2)
S = I / 16
T = Fusing(s , "##.#")
Stop Timer0
End If
'If Menu = 2 Then
Locate 1 , 3
Lcd "Temp:" ; T ; Chr(0) ; "C "
Lowerline
Lcd " "
'End If
'If Menu = 3 Then
'Locate 2 , 1
'Lcd "Temp:" ; T ; Chr(0) ; "C "
'End If
End Sub
Przerwanie:
Counter0 = Counter0 + 6 '256-6=250
Incr Licznik
'If Licznik = 500 Then 'jeśli zmienna licznik równa się 500 (czyli
'odliczone zostało 500*2ms=1sek), to
'Toggle Portb.0
'Licznik = 0
'End If
If Licznik = 126 Then 'odliczanie 252ms
Pom = 1
Licznik = 0
End If
Return
Problem w tym, ze nie wiem gdzie zerowac zmienna pomonicza 'pom'. oraz kawalek
1wreset
1wwrite &HCC
1wwrite &H44jest wykonywany w kazdej petli a powinien raz przy pelnym odczycie.
Czy ide w dobrym kierunku ? Jak mozna to przerobic ?
Szukalem, lecz nie moglem znalesc innego kodu w ktorym jasno by bylo wyjasnione jak zastapic timerem waity (bede potrzebowal tego rownierz do obslugi drgania stykow).
Pozdrawiam
