Koda: |
$baud 9600 Dim T1 As byte Dim T2 As byte Dim T3 As byte T1=13 T2=54 T3=86 Do Printbin T1 Wait 1 Printbin T2 wait 1 Printbin T3 Wait 1 Loop |
Koda: |
x=Inkey() If x>0 Then Locate 1,1 : LCD "T1: "; x waitms 100 End If |
Koda: |
$regfile = "m168pdef.dat" $crystal = 8000000 ' $baud = 9600 $hwstack = 100 $swstack = 100 $framesize = 100 Dim Temp_arr(50) As Byte Dim Temp_arr_s As String * 50 Dim St_rx As Byte Dim Rs_rx_f As Bit Dim D As Byte Dim S1_1ms As Word Dim Zacasni_str As String * 20 Dim Sek_f As Bit Dim T1 As Single Dim T2 As Single Dim T3 As Single St_rx = 1 Const Oddajnik = 0 '------------------------------------------------------------------------------- Const Timer0reload = 125 Config Timer0 = Timer , Prescale = 64 Load Timer0 , Timer0reload On Ovf0 Timer0_isr Enable Ovf0 Start Timer0 '------------------------------------------------------------------------------- Enable Urxc 'RxD interrupt flag On Urxc Rec_isr 'define serial receive ISR St_rx = 1 '------------------------------------------------------------------------------- Enable Interrupts '------------------------------------------------------------------------------- Do If Sek_f = 1 Then Reset Sek_f Zacasni_str = Fusing(t1 , "#.##") Print "T1 = " ; Zacasni_str Zacasni_str = Zacasni_str + Fusing(t2 , "#.##") Print "T2 = " ; Zacasni_str Zacasni_str = Zacasni_str + Fusing(t3 , "#.##") Print "T3 = " ; Zacasni_str End If If Rs_rx_f = 1 Then Reset Rs_rx_f If Left(temp_arr_s , 2) = "T1" Then Locate 1 , 1 Lcd Temp_arr_s End If If Left(temp_arr_s , 2) = "T2" Then Locate 1 , 8 Lcd Temp_arr_s End If If Left(temp_arr_s , 2) = "T3" Then Locate 1 , 14 Lcd Temp_arr_s End If End If Loop '------------------------------------------------------------------------------- Rec_isr: D = Inkey() Temp_arr(st_rx) = D Incr St_rx If D = 13 Then Set Rs_rx_f St_rx = 1 End If If St_rx > 10 Then St_rx = 1 Return '------------------------------------------------------------------------------- ' '------------------------------------------------------------------------------- Timer0_isr: Load Timer0 , Timer0reload Incr S1_1ms If S1_1ms = 1000 Then S1_1ms = 0 Set Sek_f End If Return |
igo je napisal/a: |
Kolikšno je območje temperatur?
Najlažje je temperaturam pred pošiljanjem prišteti konstanto in jo po sprejemu spet odšteti. Ampak podatek mora biti po novem Unsigned 16-biten (ne poznam tipov spremenljivk v Bascomu). Na oddajni strani: T1 = 1100 + IzmerjenaT1 T2 = 2200 + IzmerjenaT2 T3 = 3300 + IzmerjenaT3 Na sprejemni strani: NapakaTemp=0 If (Tsprejeta - 3300) > 0 T3 = Tsprejeta - 3300 Else if (Tsprejeta - 2200) > 0 T2 = Tsprejeta - 2200 ElseIf (Tsprejeta - 1100) > 0 T1 = Tsprejeta - 1100 Else NapakaTemp = 1 (sprejeto je nekaj čudnega, potrebno je ignorirati) Če so možne tudi negativne T, pač na sprejemni strani preveriš z za 100 manjšo številko If (Tsprejeta - 3200) > 0 T3 = Tsprejeta - 3300 ... |
Koda: |
sprejeto = Inkey() (8-bitni podatek 0 ... 255) ;========== Preverjanje sprejetega podatka If sprejeto = 251 Then Naslov = 251 End If If sprejeto = 252 Then Naslov = 252 End If If sprejeto = 253 Then Naslov = 253 End If If sprejeto < 250 Then If Naslov = 251 Then T1 = sprejeto - konstantaT1 End If If Naslov = 252 Then T2 = sprejeto End If If Naslov = 253 Then T3 = sprejeto End If End If ;========== Sedaj je možno izpisati T1, T2 in T3 na LCD |
Koda: |
;Oddajna stran: T1 = Tb + 121 ; IzmerjenaT1 + konstantaT1 T2 = Tp + 122 T3 = Tz + 123 ;Oddajno zaporedje: Pribtbin 121 Printbin T1 Printbin 122 Printbin T2 Printbin 123 Printbin T3 ;in to lepo kroži ;------------------------------------------------------------- sprejeto = Inkey() (8-bitni podatek 0 ... 255) ;========== Preverjanje sprejetega podatka If sprejeto = 121 Then Naslov = 121 End If If sprejeto = 122 Then Naslov = 122 End If If sprejeto = 123 Then Naslov = 123 End If If Naslov = 121 Then T1 = sprejeto - konstantaT1 End If If Naslov = 122 Then T2 = sprejeto End If If Naslov = 123 Then T3 = sprejeto End If End If ;========== Sedaj je možno izpisati T1, T2 in T3 na LCD |
igo je napisal/a: |
Od kod 121, 122 in 123?
Zakaj si izpustil If sprejeto < 250 ? Potem daj tam kvečjemu If sprejeto < 120 , da ločiš temperature in naslove. Seveda je po tem največji dovoljen razpon od T1 manjši od 120°C. In zakaj na oddajni strani prišteješ 121, 122 in 123, na sprejemni strani jih pa ne odšteješ? KonstantaT1 mora biti večja od abslutne vrednosti najbolj negativne T1izmerjena. Če je T1izmerjena lahko -30°C, mora biti konstantaT1 vsaj 35, da bo vsota vedno pozitivna. |
Koda: |
If Stevec_odd => 60 Then T1 = Tb + 121 T2 = Tz1 + 122 T3 = Tp + 123 Printbin 121 Waitms 100 Printbin T1 Waitms 100 Printbin 122 Waitms 100 Printbin T2 Waitms 100 Printbin 123 Waitms 100 Printbin T3 Waitms 100 Stevec_odd = 0 End If |
Koda: |
Sprejeto = Inkey() Waitms 100 If Sprejeto = 121 Then Naslov = 121 End If If Sprejeto = 122 Then Naslov = 122 End If If Sprejeto = 123 Then Naslov = 123 End If If Sprejeto > 120 Then If Naslov = 121 Then T1 = Sprejeto - 121 End If If Naslov = 122 Then T2 = Sprejeto - 122 End If If Naslov = 123 Then T3 = Sprejeto - 123 End If End If Locate 1 , 1 : Lcd "Tb: " Locate 1 , 5 : Lcd T1 ; Spc(2) Locate 1 , 8 : Lcd "Tz1: " Locate 1 , 13 : Lcd T2 ; Spc(2) Locate 2 , 1 : Lcd "Tp: " Locate 2 , 5 : Lcd T3 ; Spc(2) |