Rem Sterownik silnika krokowego do przodu i do tyłu Rem Wyjściami na cewki silnika są cztery najstarsze bity Portu B (PinB.4 do PinB.7) Rem Prędkość obrotową określa się wartością zmiennej czas w ms $crystal = 4000000 'Deklaracja częstotliwości kwarcu $regfile "attiny2313.dat" 'Deklaracja modelu procesora Config Portb = Output 'Konfiguracja portu B (wszystkie linie jako wyjścia) Portb = &B00000000 'Stan początkowy portu B (wszystkie linie w stanie niskim) Config Portd = Input 'Konfiguracja Portu D (wszystkie linie jako wejścia) Portd = &B1111111 'Stan początkowy linii portu D (wszystkie linie w stanie wysokim) Dim I As Byte 'Definicja zmiennej bajtowej licznika kroków Dim Czas As Byte 'Definicja zmiennej bajtowej czasu opóźnienia pomiędzy krokami Declare Sub Wprawo 'Deklaracja procedury generującej sekwencję oprotów w prawo Declare Sub Wlewo 'Deklaracja procedury generującej sekwencję oprotów w lewo Declare Sub Opoznienie 'Deklaracja procedury opóźniającej kolejne kroki Czas = 1 'Startowa wartość zmiennej czas Do 'Początek pętli nieskończonej If Pind.0 = 0 And Pind.1 = 1 Then Wprawo 'Badanie stanu pinu wejściowego (kierunek obrotu) If Pind.1 = 0 And Pind.0 = 1 Then Wlewo 'Badanie stanu pinu wejściowego (kierunek obrotu) If Pind.0 = 1 And Pind.1 = 1 Then Portb = &B00000000 'Jeśli oba w stanie niskim silnik nie pracuje If Pind.2 = 0 Then Czas = 1 'Badanie stanu pinu wejściowego (prędkość obrotu na podstawie przypisanego opóźnienia) If Pind.3 = 0 Then Czas = 3 'Badanie stanu pinu wejściowego (prędkość obrotu na podstawie przypisanego opóźnienia) If Pind.4 = 0 Then Czas = 5 'Badanie stanu pinu wejściowego (prędkość obrotu na podstawie przypisanego opóźnienia) If Pind.5 = 0 Then Czas = 15 'Badanie stanu pinu wejściowego (prędkość obrotu na podstawie przypisanego opóźnienia) If Pind.6 = 0 Then Portb = &B10010000 'Badanie pinu odpowiedzialnego za hamulec Loop 'Koniec pętli nieskończonej Sub Wprawo : 'procedura generowania sekwencji obracającej w prawo For I = 0 To 7 'liczymy w pęli skończonej od 0 do 7 Portb = Lookup(i , Sekwencja_1) 'w każdym stanie licznika przypisujemy do portu sekwencję z tabeli danych Call Opoznienie 'Wywołujemy procedurę opuźnienie Next 'Następny krok End Sub 'koniec procedury Sub Wlewo : For I = 0 To 7 Portb = Lookup(i , Sekwencja_2) Call Opoznienie Next End Sub Sub Opoznienie : 'procedura opuźnienie Waitms Czas End Sub Sekwencja_1: 'Dane do sekwencji obracającej w prawo Data &B10000000 , &B11000000 , &B01000000 , &B01100000 , &B00100000 , &B00110000 , &B00010000 , &B10010000 Sekwencja_2: 'Dane do sekwencji obracającej w lewo Data &B10010000 , &B00010000 , &B00110000 , &B00100000 , &B01100000 , &B01000000 , &B11000000 , &B10000000