Witam! Czy może mi ktoś pomóc w przerobieniu kodu do węża aby nie stosować Waitms tylko licznik, timer. Zależy mi aby była płynna regulacja prędkości zapalania kolejnych ledów na portach. Czy można zastosować zmienną typu integer w celu rozszerzenia reg.prędkości?[]
$regfile = "m8def.dat" 'zadeklarowanie użytego procesora
$crystal = 1000000
Config Pind.0 = Input
Portd.0 = 1
Szybko Alias Pind.0
Config Pind.1 = Input
Portd.1 = 1
Wolno Alias Pind.1
Config Pinb.0 = Output
Portb.0 = 0
Led_1 Alias Portb.0
Config Pinb.1 = Output
Portb.1 = 0
Led_2 Alias Portb.1
Config Pinb.2 = Output
Portb.2 = 0
Led_3 Alias Portb.2
Config Pinb.3 = Output
Portb.3 = 0
Led_4 Alias Portb.3
Config Pinb.4 = Output
Portb.4 = 0
Led_5 Alias Portb.4
Config Pinb.5 = Output
Portb.5 = 0
Led_6 Alias Portb.5
Config Pinb.6 = Output
Portb.6 = 0
Led_7 Alias Portb.6
Config Pinb.7 = Output
Portb.7 = 0
Led_8 Alias Portb.7
Enable Interrupts
Dim Tempo As Byte At &H62
Tempo = 255
Do
If Szybko = 0 Then Gosub Szybciej
If Wolno = 0 Then Gosub Wolniej
Led_8 = 1
Led_1 = 0
Waitms Tempo
If Szybko = 0 Then Gosub Szybciej
If Wolno = 0 Then Gosub Wolniej
Led_1 = 1
Led_2 = 0
Waitms Tempo
If Szybko = 0 Then Gosub Szybciej
If Wolno = 0 Then Gosub Wolniej
Led_2 = 1
Led_3 = 0
Waitms Tempo
If Szybko = 0 Then Gosub Szybciej
If Wolno = 0 Then Gosub Wolniej
Led_3 = 1
Led_4 = 0
Waitms Tempo
If Szybko = 0 Then Gosub Szybciej
If Wolno = 0 Then Gosub Wolniej
Led_4 = 1
Led_5 = 0
Waitms Tempo
If Szybko = 0 Then Gosub Szybciej
If Wolno = 0 Then Gosub Wolniej
Led_5 = 1
Led_6 = 0
Waitms Tempo
If Szybko = 0 Then Gosub Szybciej
If Wolno = 0 Then Gosub Wolniej
Led_6 = 1
Led_7 = 0
Waitms Tempo
If Szybko = 0 Then Gosub Szybciej
If Wolno = 0 Then Gosub Wolniej
Led_7 = 1
Led_8 = 0
Waitms Tempo
Loop
End
Szybciej:
If Tempo < 0 Then Tempo = 0
Decr Tempo
Return
Wolniej:
If Tempo > 255 Then Tempo = 255
Incr Tempo
Return
Re: Przeróbka programu "Wąż"
z tego co widzę to (jak dla mnie) jest kilka błędów. na przykład tu:
już w tym widzę co najmniej 2 błędy.
1 - zmienna byte przyjmuje wartości od 0 do 255 więc mniejsza od 0 nie będzie nigdy
2 - co w ogóle robi ta etykieta? dajmy na to że zmienna Tempo przyjęła by wartość mniejszą niż 0 i co wtedy? instrukcja THEN sprowadzi ją do wartości 0 a linijkę niżej instrukcja DECR spowrotem zmniejszy jej wartość poniżej 0 i tak wkoło. tak samo jest w etykiecie Wolniej.
a co do zamiany WAITMS na timer to trzeba dodać zmienna typu (na przykład) WORD i przy naciskaniu przycisków zwiększać lub zmniejszać jej wartość, a następnie wpisywać wartość tej zmiennej do timera.
a pomijając to wszystko to (jak dla mnie) program w ogole źle jest napisany i jakoś tak chaotycznie. trzeba by go całkowicie przebudować, albo napisać od początku.
tyle na początek.
Moja strona w powijakach
Re: Przeróbka programu "Wąż"
Dzięki, za zainteresowanie ,program zaczerpnięty gdzieś z netu, niby działa ale ta regulacja prędkości jest do bani. Kolego matrix,jeśli to nie problem dla Ciebie to możesz podać przykład w Bascom jak przy naciskaniu przycisków zwiększać lub zmniejszać wartość zmiennej, a następnie wpisywać wartość tej zmiennej do timera.
Re: Przeróbka programu "Wąż"
mówisz i masz jakiś tam gotowy soft. program napisany na szybko, ale kompilator błędów nie wywala więc można wnioskować że będzie działać ok. nie sprawdzałem.
zapomniałem dodać. co ile ma być wywoływane przerwanie? w jakich granicach? bo trzeba odpowiednio dobra timery i podział. w tym przykładzie będzie to mało zauważalne.
Moja strona w powijakach