Potrzebuje pomocy z Bascomem! Oto moj plik zrodlowy, program ma (w podstawowej wersji) dzialac jak automat schodowy, a po kompilacji i programowaniu obojetnie jak ustawie zworki(wedle schematu) swiatlo wylacza sie po tym samym czasie(ok7,8s)... Czemu??? Jakby co to SW1 jest do ustawiania czasu(wedle BCD) a SW2 do ustawiania trybu(jak na razie tylko kilka jest zaimplementowanych). Wlacznik zwiera do masy... Oto zrodlo:
'Program do pracy dyplomowej !Wylacznik schodowy i cos ponadto!
Dim Czas As Byte , Tryb As Byte , Jedynkaczas As Byte , Dwojkaczas As Byte
Dim Czworkaczas As Byte , Jedynkatryb As Byte , Dwojkatryb As Byte
Dim Czworkatryb As Byte , Osemkatryb As Byte , Trybpomoc As Byte , Trybpomocdwa As Byte
Dim Osemkaczas As Byte , Czaspomoc As Byte , Czaspomocdwa As Byte , Czasik As Byte
Config Portb = Input : Portb = &B11111111 'wedle schematu
Config Portd = &B0111100 : Portd = &B1000011 'dipswitche to wejscia...
Config Timer1 = Timer , Prescale = 1024
Config Aci = Off
Enable Interrupts
Enable Timer1
On Timer1 Doliczanie
Do
If Pinb.7 = 0 Then 'wszystko zczytane z dipswitchy
Jedynkaczas = 1 'jest zamieniane na kod BCD
Else 'moze troche nieelegancko
Jedynkaczas = 0 'ale powinno dzialac...
End If
If Pinb.6 = 0 Then
Dwojkaczas = 2
Else
Dwojkaczas = 0
End If
If Pinb.5 = 0 Then
Czworkaczas = 4
Else
Czworkaczas = 0
End If
If Pinb.4 = 0 Then
Osemkaczas = 8
Else
Osemkaczas = 0
End If
Czaspomoc = Jedynkaczas + Dwojkaczas 'zsumuj kod bcd
Czaspomocdwa = Czworkaczas + Osemkaczas
Czas = Czaspomoc + Czaspomocdwa 'i zamien na dziesietny(recznie)
If Pinb.3 = 0 Then 'to samo z dipswitchami
Jedynkatryb = 1 'od ustawiania trybu...
Else
Jedynkatryb = 0
End If
If Pinb.2 = 0 Then
Dwojkatryb = 2
Else
Dwojkatryb = 0
End If
If Pinb.1 = 0 Then
Czworkatryb = 4
Else
Czworkatryb = 0
End If
If Pinb.0 = 0 Then
Osemkatryb = 8
Else
Osemkatryb = 0
End If
Trybpomoc = Jedynkatryb + Dwojkatryb 'znowu zamiana na decimal
Trybpomocdwa = Czworkatryb + Osemkatryb 'z kodu BCD
Tryb = Trybpomoc + Trybpomocdwa 'koniec wyboru czasu
Debounce Pind.6 , 0 , Wlaczanie , Sub 'gdy zostanie przycisniety
Loop
End
Wlaczanie:
Select Case Czas 'wybor czasu wylacznia
Case 0 'czasy wylaczen
Czasik = 254 '7 sekund
Case 1
Czasik = 253 '14 sekund
Case 2
Czasik = 252 '21 sekund
Case 3
Czasik = 251 '28 sekund
Case 4
Czasik = 248 '50 sekund
Case 5
Czasik = 247 '60 sekund
Case 6
Czasik = 244 '80 sekund
Case 7
Czasik = 241 '100 sekund
Case 8
Czasik = 238 '2 minuty
Case 9
Czasik = 230 '2,5 minuty
Case 10
Czasik = 221 '4 minuty
Case 11
Czasik = 204 '6 minut
Case 12
Czasik = 186 '8 minut
Case 13
Czasik = 127 '15 minut
Case 14
Czasik = 84 '20 minut
Case 15
Czasik = 1 '30 minut
Case Else 'w innym przypadku...
Czasik = 252 '10 sekund
End Select
Timer1 = 1
Select Case Tryb
Case 0 'tryb zerowy-
Set Portd.5 'wszystkie zarowki
Set Portd.4 'sa zapalane na ustalony
Set Portd.3 'czas...
Set Portd.2
Return
Case 1
Set Portd.2
Bitwait Pind.6 , Reset
Set Portd.3
Reset Portd.2
Bitwait Pind.6 , Reset
Set Portd.4
Reset Portd.3
Bitwait Pind.6 , Reset
Set Portd.5
Reset Portd.4
Return
Case 2
Set Portd.2
Set Portd.3
Bitwait Pind.6 , Reset
Set Portd.4
Set Portd.5
Reset Portd.2
Reset Portd.3
Bitwait Pind.6 , Reset
Gosub Wylacz
Case 3
Set Portd.2
Set Portd.3
Set Portd.4
Set Portd.5
Bitwait Pind.6 , Reset
Return
Case Else
Set Portd.5 'wszystkie zarowki
Set Portd.4 'sa zapalane na ustalony
Set Portd.3 'czas...
Set Portd.2
Return
End Select
Return
Doliczanie:
Incr Czasik
If Czasik >= 120 Then
Reset Portd.2
Reset Portd.3
Reset Portd.4
Reset Portd.5
End If
Return
Wylacz:
Reset Portd.2
Reset Portd.3
Reset Portd.4
Reset Portd.5
Return
'Program do pracy dyplomowej !Wylacznik schodowy i cos ponadto!
Dim Czas As Byte , Tryb As Byte , Jedynkaczas As Byte , Dwojkaczas As Byte
Dim Czworkaczas As Byte , Jedynkatryb As Byte , Dwojkatryb As Byte
Dim Czworkatryb As Byte , Osemkatryb As Byte , Trybpomoc As Byte , Trybpomocdwa As Byte
Dim Osemkaczas As Byte , Czaspomoc As Byte , Czaspomocdwa As Byte , Czasik As Byte
Config Portb = Input : Portb = &B11111111 'wedle schematu
Config Portd = &B0111100 : Portd = &B1000011 'dipswitche to wejscia...
Config Timer1 = Timer , Prescale = 1024
Config Aci = Off
Enable Interrupts
Enable Timer1
On Timer1 Doliczanie
Do
If Pinb.7 = 0 Then 'wszystko zczytane z dipswitchy
Jedynkaczas = 1 'jest zamieniane na kod BCD
Else 'moze troche nieelegancko
Jedynkaczas = 0 'ale powinno dzialac...
End If
If Pinb.6 = 0 Then
Dwojkaczas = 2
Else
Dwojkaczas = 0
End If
If Pinb.5 = 0 Then
Czworkaczas = 4
Else
Czworkaczas = 0
End If
If Pinb.4 = 0 Then
Osemkaczas = 8
Else
Osemkaczas = 0
End If
Czaspomoc = Jedynkaczas + Dwojkaczas 'zsumuj kod bcd
Czaspomocdwa = Czworkaczas + Osemkaczas
Czas = Czaspomoc + Czaspomocdwa 'i zamien na dziesietny(recznie)
If Pinb.3 = 0 Then 'to samo z dipswitchami
Jedynkatryb = 1 'od ustawiania trybu...
Else
Jedynkatryb = 0
End If
If Pinb.2 = 0 Then
Dwojkatryb = 2
Else
Dwojkatryb = 0
End If
If Pinb.1 = 0 Then
Czworkatryb = 4
Else
Czworkatryb = 0
End If
If Pinb.0 = 0 Then
Osemkatryb = 8
Else
Osemkatryb = 0
End If
Trybpomoc = Jedynkatryb + Dwojkatryb 'znowu zamiana na decimal
Trybpomocdwa = Czworkatryb + Osemkatryb 'z kodu BCD
Tryb = Trybpomoc + Trybpomocdwa 'koniec wyboru czasu
Debounce Pind.6 , 0 , Wlaczanie , Sub 'gdy zostanie przycisniety
Loop
End
Wlaczanie:
Select Case Czas 'wybor czasu wylacznia
Case 0 'czasy wylaczen
Czasik = 254 '7 sekund
Case 1
Czasik = 253 '14 sekund
Case 2
Czasik = 252 '21 sekund
Case 3
Czasik = 251 '28 sekund
Case 4
Czasik = 248 '50 sekund
Case 5
Czasik = 247 '60 sekund
Case 6
Czasik = 244 '80 sekund
Case 7
Czasik = 241 '100 sekund
Case 8
Czasik = 238 '2 minuty
Case 9
Czasik = 230 '2,5 minuty
Case 10
Czasik = 221 '4 minuty
Case 11
Czasik = 204 '6 minut
Case 12
Czasik = 186 '8 minut
Case 13
Czasik = 127 '15 minut
Case 14
Czasik = 84 '20 minut
Case 15
Czasik = 1 '30 minut
Case Else 'w innym przypadku...
Czasik = 252 '10 sekund
End Select
Timer1 = 1
Select Case Tryb
Case 0 'tryb zerowy-
Set Portd.5 'wszystkie zarowki
Set Portd.4 'sa zapalane na ustalony
Set Portd.3 'czas...
Set Portd.2
Return
Case 1
Set Portd.2
Bitwait Pind.6 , Reset
Set Portd.3
Reset Portd.2
Bitwait Pind.6 , Reset
Set Portd.4
Reset Portd.3
Bitwait Pind.6 , Reset
Set Portd.5
Reset Portd.4
Return
Case 2
Set Portd.2
Set Portd.3
Bitwait Pind.6 , Reset
Set Portd.4
Set Portd.5
Reset Portd.2
Reset Portd.3
Bitwait Pind.6 , Reset
Gosub Wylacz
Case 3
Set Portd.2
Set Portd.3
Set Portd.4
Set Portd.5
Bitwait Pind.6 , Reset
Return
Case Else
Set Portd.5 'wszystkie zarowki
Set Portd.4 'sa zapalane na ustalony
Set Portd.3 'czas...
Set Portd.2
Return
End Select
Return
Doliczanie:
Incr Czasik
If Czasik >= 120 Then
Reset Portd.2
Reset Portd.3
Reset Portd.4
Reset Portd.5
End If
Return
Wylacz:
Reset Portd.2
Reset Portd.3
Reset Portd.4
Reset Portd.5
Return