Popełniłem taki oto program. Dane przesyłane przez port LPT przez 3 linie (D0 - SCK, D1 - MOSI, D2 - /SS). Teoretycznie procesor powinien być ustawiony w tryb slave
Po odebraniu 16 zmian stanu na lini SCK procesor wywołuje przerwanie - ustawia zmienną Transmisja i wpada w warunek sprawdzający w petli głównej. Kłopot, że nie wychodzi z pętli głównej i zachowuje się tak jakby non stop odbierał przerwanie - nie chce przestać migać diodą.
Co robię nie tak? Flaga przerwanie zerowana jest w USISR. Więc nie powinien wskakiwać w przerwanie. Nie wiem już co tu jest nie tak
$regfile = "ATtiny2313.DAT"
$crystal = 4000000
Dioda_led Alias Portb.2
Ddrb.2 = 1 'wyjscie - podpieta LED
'konfiguracja portow dla SPI
Ddrb.7 = 0 : Portb.7 = 1 'wejscie - CLK
Ddrb.6 = 0 : Portb.6 = 1 'wejscie - MOSI
Ddrb.5 = 0 : Portb.5 = 1 'wejscie - MISO
Ddrb.4 = 0 : Portb.4 = 1 'wejscie - SS
Dim Transmisja As Byte
Dim Zmienna As Byte
Dim I As Byte
Declare Sub Led
On Uci_ovflw Odebrano
Usisr = &B00000000
Usicr = &B01011000
Enable Interrupts
Transmisja = 0
Do
If Transmisja = 1 Then
Transmisja = 0
If Zmienna = 3 Then
Led : Led : Led
End If
If Zmienna = 0 Then
Led
End If
If Zmienna = 255 Then
Led : Led
End If
Usicr = &B01011000
End If
Loop
End
Sub Led
Reset Dioda_led : Waitms 200 : Set Dioda_led : Waitms 200
End Sub
Odebrano:
Transmisja = 1
Zmienna = Usidr
Usidr = 0
Usisr = 0
Usicr = 0
ReturnPo odebraniu 16 zmian stanu na lini SCK procesor wywołuje przerwanie - ustawia zmienną Transmisja i wpada w warunek sprawdzający w petli głównej. Kłopot, że nie wychodzi z pętli głównej i zachowuje się tak jakby non stop odbierał przerwanie - nie chce przestać migać diodą.
Co robię nie tak? Flaga przerwanie zerowana jest w USISR. Więc nie powinien wskakiwać w przerwanie. Nie wiem już co tu jest nie tak