Created
September 25, 2012 09:10
-
-
Save rafalw/3780776 to your computer and use it in GitHub Desktop.
3 efekty świetlne na 8 LED-ów i mikrokontroler.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
' 3 efekty świetlne na 8 LED-ów i mikrokontroler. | |
$regfile = "attiny2313.dat" | |
$crystal = 4000000 | |
$hwstack = 40 | |
$swstack = 16 | |
$framesize = 32 | |
' Poniższa dyrektywa musi być aktywna dla avrdude, stk500.exe oraz AVRStudio; | |
' Programator USBASP z poziomu Bascoma wymaga binarnego wsadu do EEPROM (domyślnie) | |
'$eepromhex | |
$eeprom | |
' Definicje efektów świetlnych | |
' 1 - Od lewej do prawej i z powrotem | |
Leftright: | |
Data 128 , 64 , 32 , 16 , 8 , 4 , 2 , 1 , 2 , 4 , 8 , 16 , 32 , 64 | |
' 2 - Od lewej do prawej czwórkami | |
Leftrightfour: | |
Data 129 , 66 , 36 , 24 , 36 , 66 | |
' 3 - Tylko do prawej | |
Toright: | |
Data 128 , 64 , 32 , 16 , 8 , 4 , 2 , 1 | |
' 4 - Tylko do lewej | |
Toleft: | |
Data 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128 | |
$data | |
' Czas wyświetlania (dla efektu nie sterowanego timerem) | |
Const Lr4 = 16 | |
' Port B jako wyjścia | |
Config Portb = &B11111111 | |
' Stan spoczynkowy portu B to 0 | |
Portb = &B00000000 | |
' Bity 6, 5 i 4 portu D jako wejścia | |
Config Portd = &B1000111 | |
' Stan spoczynkowy portu D to 1 | |
Portd = &B1111111 | |
' Wyświetlaniem normalnej linijki będzie sterował timer0 - następna dioda zapalana co ok. 16ms | |
Config Timer0 = Timer , Prescale = 256 | |
' Włączamy obsługę przerwań i przerwanie timera 0 | |
Enable Interrupts | |
Enable Timer0 | |
' Ustawiamy podprogram obsługi przerwania timera 0 | |
On Timer0 Przesun_linijke | |
' Funkcja realizująca efekt świetlny (deklaracja) | |
' address - adres w EEPROM początku tablicy z definicją efektu | |
' maxcount - maksymalna wartość licznika pętli (liczba elementów w/w tablicy - 1) | |
Declare Sub Effect(address As Byte , Byval Maxcount As Byte) | |
Dim I As Byte , Tmp As Byte ' licznik pętli, zmienna pomocnicza do wyznaczania adresu w EEPROM | |
Dim Iters As Byte ' licznik pętli dla timera Timer0 | |
Dim Addr As Byte ' zmienna przechowująca adres początku tabeli w pamięci EEPROM | |
' Okazuje się, że port D nie od razu ma wartości spoczynkowe ustalone... | |
Portd.3 = 1 | |
Portd.4 = 1 | |
Portd.5 = 1 | |
Iters = 0 | |
Do | |
' W pętli sprawdzane są po kolei bity od najmłodszego do najstarszego, | |
' więc wyzerowanie kilku na raz będzie zinterpretowane jako naciśnięcie | |
' jednego (tego, który pierwszy został wyzerowany); może to sprawiać wrażenie | |
' losowości. | |
If Pind.3 = 0 Then ' efekt czwórek | |
Addr = Loadlabel(leftrightfour) | |
Effect Addr , 5 | |
Elseif Pind.4 = 0 Then ' efekt "do prawej" | |
Addr = Loadlabel(toright) | |
Effect Addr , 7 | |
Elseif Pind.5 = 0 Then ' efekt "do lewej" | |
Addr = Loadlabel(toleft) | |
Effect Addr , 7 | |
End If | |
Loop | |
End | |
' Funkcja realizująca efekt świetlny (definicja) | |
Sub Effect(address As Byte , Byval Maxcount As Byte) | |
Stop Timer0 | |
For I = 0 To Maxcount | |
Tmp = Address + I | |
Readeeprom Portb , Tmp | |
Waitms Lr4 | |
Next I | |
Start Timer0 | |
End Sub | |
' Podprogram obługi przerwania - bez pętli itp., maks. krótki | |
Przesun_linijke: | |
Addr = Loadlabel(leftright) | |
Tmp = Addr + Iters | |
Readeeprom Portb , Tmp | |
Iters = Iters + 1 | |
Iters = Iters Mod 14 | |
Return |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment