'************* Konfiguracja uC ***************** '*********************************************** $regfile = "attiny2313.dat" $crystal = 8000000 'internal RC oscilator Config Portb = &B11111111 : Portb = &B11111111 Config Portd = &B00001110 : Portd = &B11111111 Config Timer0 = Timer , Prescale = 8 Enable Timer0 : On Timer0 Prztimer0 Enable Interrupts '********** Konfiguracja uC Koniec ************ '****************** Nazwy ******************* '*********************************************** Rd Alias Portb.7 Gd Alias Portb.6 Bd Alias Portb.5 Rdt Alias Portd.3 Gdt Alias Portd.1 Bdt Alias Portd.2 I1 Alias Pind.4 I2 Alias Pind.5 Isw Alias Pind.0 '************* Nazwy Koniec **************** '****************** Zmienne ******************* '*********************************************** Dim Licznik As Byte Dim Rgb(3) As Byte Dim Rgb2(3) As Byte Dim Pomoc As Byte Dim Flaga As Bit Dim Dzielnik As Word Dim Dzielnik2 As Byte Dim Szybkosc As Byte Dim N As Byte Dim Arg As Word Dim Wartosc As Word Dim Pozycja As Word Dim Rgb_mode As Bit Dim Cur_color As Byte Dim Sw_l As Byte , Sw_f As Byte Dim Tryb As Byte , Rezultat As Integer Dim Autosave As Byte , X As Byte '************* Zmienne Koniec **************** '************ Warunki Poczatkowe *************** '*********************************************** Cur_color = 1 Autosave = 250 Readeeprom X , 1 If X <= 10 Then Rgb2(1) = X Else Rgb2(1) = 1 Readeeprom X , 2 If X <= 10 Then Rgb2(2) = X Else Rgb2(2) = 1 Readeeprom X , 3 If X <= 10 Then Rgb2(3) = X Else Rgb2(3) = 1 Readeeprom X , 4 If X <= 100 And X >= 1 Then Szybkosc = X Else Szybkosc = 1 '******* Warunki Poczatkowe Koniec *********** '************** Petla glowna ****************** '*********************************************** Do Rezultat = 0 Select Case Tryb Case 0: If I1 = 1 And I2 = 1 Then Incr Tryb 'jezeli dwa rozwarte Case 1: If I1 = 1 And I2 = 0 Then Rezultat = 1 Incr Tryb End If If I1 = 0 And I2 = 1 Then Rezultat = -1 Incr Tryb End If Case 2: If I1 = 0 And I2 = 0 Then Incr Tryb Case 3: If I1 = 1 And I2 = 0 Then Rezultat = -1 Tryb = 0 End If If I1 = 0 And I2 = 1 Then Rezultat = 1 Tryb = 0 End If End Select If Rezultat <> 0 Then Autosave = 0 If Rezultat = 1 Then If Rgb_mode = 1 Then Decr Szybkosc If Szybkosc <= 1 Then Szybkosc = 1 Else Incr Rgb2(cur_color) If Rgb2(cur_color) >= 10 Then Rgb2(cur_color) = 10 End If Else If Rgb_mode = 1 Then Incr Szybkosc If Szybkosc >= 100 Then Szybkosc = 100 Else Decr Rgb2(cur_color) If Rgb2(cur_color) >= 250 Then Rgb2(cur_color) = 0 End If End If End If If Flaga = 1 Then 'co 32ms Flaga = 0 'autosave If Autosave < 250 Then Incr Autosave If Autosave = 250 Then X = Rgb2(1) Writeeeprom X , 1 X = Rgb2(2) Writeeeprom X , 2 X = Rgb2(3) Writeeeprom X , 3 X = Szybkosc Writeeeprom X , 4 End If End If 'animacja If Rgb_mode = 1 Then Incr Dzielnik2 If Dzielnik2 >= Szybkosc Then Dzielnik2 = 0 Rdt = 0 Gdt = 0 Toggle Bdt Incr Pozycja If Pozycja = 900 Then Pozycja = 0 Gosub Pozycja_do_rgb End If Else For N = 1 To 3 Rgb(n) = Rgb2(n) * Rgb2(n) Next N Select Case Cur_color Case 1 : Rdt = 1 Gdt = 0 Bdt = 0 Case 2 : Rdt = 0 Gdt = 1 Bdt = 0 Case 3 : Rdt = 0 Gdt = 0 Bdt = 1 End Select End If 'switch w impulsatorze If Isw = 0 Then If Sw_l < 100 Then Incr Sw_l If Sw_l = 4 Then Sw_f = 1 If Sw_l = 50 Then Sw_f = 2 End If Else Sw_l = 0 If Sw_f = 1 Then Sw_f = 0 Incr Cur_color If Cur_color = 4 Then Cur_color = 1 End If If Sw_f = 2 Then Sw_f = 0 Toggle Rgb_mode End If End If End If Loop End '************ Petla glowna Koniec ************** '************ Przerwanie timer 0 *************** '*********************************************** Prztimer0: Timer0 = 128 Incr Licznik If Licznik = 100 Then Licznik = 0 If Licznik >= Rgb(1) Then Reset Rd Else Set Rd If Licznik >= Rgb(2) Then Reset Gd Else Set Gd If Licznik >= Rgb(3) Then Reset Bd Else Set Bd Incr Dzielnik If Dzielnik = 250 Then Dzielnik = 0 Set Flaga End If Return '******** Przerwanie timer 0 Koniec ************ '************ Inne Etykiety *************** '*********************************************** Przelicz: 'funkcja \_ _ _ _/^^^ If Arg > 899 Then Arg = Arg - 900 If Arg > 100 And Arg < 500 Then Wartosc = 0 If Arg <= 100 Then Wartosc = 100 - Arg If Arg >= 500 And Arg <= 600 Then Wartosc = Arg - 500 If Arg > 600 Then Wartosc = 100 Return Pozycja_do_rgb: Arg = Pozycja Gosub Przelicz Rgb(1) = Wartosc Arg = Pozycja + 300 Gosub Przelicz Rgb(2) = Wartosc Arg = Pozycja + 600 Gosub Przelicz Rgb(3) = Wartosc Return