hejka właśnie skleciłem taki programik sterujący (jak narazie) step/dir na 3 silniki na atmedzie8535 i mam taki problem: z dwoma przerwaniami działa rewelacja ale jeśli załączę trzecie przerwanie to przy kompilacji wyskakuje mi taki błąd:
error : 5 Line : 18 No more space for BIT [EICRA]
poniżej przedstawiam sklecony przezemnie programik na mój procek(mega8535):
'************************************************************
'* Program obsługi serownika silnika krokowego z mikrokrokiem *
'* dla procesora Mega8535 - wersja unipolarna *
'* (c) george2002 2004-09-11 *
'************************************************************
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
$regfile = "m8535.dat" 'wybór procka
$crystal = 8000000 'wartość użytego kwarcu
Config Porta = Output 'konfiguracja portów
Config Portb = Input 'konfiguracja portów
Config Portc = Output 'konfiguracja portów
Config Portd = Input 'konfiguracja portów
Config Int0 = Falling 'konfiguracja przewrania 0
Config Int1 = Falling 'konfiguracja przewrania 1
Config Int2 = Falling 'konfiguracja przewrania 2
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim Krokx As Byte 'zmienne
Dim Kroky As Byte 'zmienne
Dim Krokz As Byte 'zmienne
Dim Krokix(8) As Byte 'zmienne
Dim Krokiy(8) As Byte 'zmienne
Dim Krokiz(8) As Byte 'zmienne
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Enable Interrupts 'włączenie przerwań
Set Portd.2 'podciąganie wewnętrzne procka-przerwanie 0
Set Portd.3 'podciąganie wewnętrzne procka-przerwanie 1
Set Portd.4 'podciąganie wewnętrzne procka-dirx
Set Portd.5 'podciąganie wewnętrzne procka-diry
Set Portd.6 'podciąganie wewnętrzne procka-dirz
Set Portb.2 'podciąganie wewnętrzne procka-przerwanie 2
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Krokx = 1 'wartość początkowa
Kroky = 1 'wartość początkowa
Krokz = 1 'wartość początkowa
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Enable Int0 'włączenie przerwania 0
Enable Int1 'włączenie przerwania 1
Enable Int2 'włączenie przerwania 2
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
On Int0 Krokx Nosave 'procedura obsługi 0 przrwania
On Int1 Kroky Nosave 'procedura obsługi 1 przrwania
On Int2 Krokz Nosave 'procedura obsługi 2 przrwania
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Krokix(1) = &B11110001 'tablica kroków x
Krokix(2) = &B11110011 'tablica kroków x
Krokix(3) = &B11110010 'tablica kroków x
Krokix(4) = &B11110110 'tablica kroków x
Krokix(5) = &B11110100 'tablica kroków x
Krokix(6) = &B11111100 'tablica kroków x
Krokix(7) = &B11111000 'tablica kroków x
Krokix(8) = &B11111001 'tablica kroków x
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Krokiy(1) = &B10001111 'tablica kroków y
Krokiy(2) = &B11001111 'tablica kroków y
Krokiy(3) = &B01001111 'tablica kroków y
Krokiy(4) = &B01101111 'tablica kroków y
Krokiy(5) = &B00101111 'tablica kroków y
Krokiy(6) = &B00111111 'tablica kroków y
Krokiy(7) = &B00011111 'tablica kroków y
Krokiy(8) = &B10011111 'tablica kroków y
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Krokiz(1) = &B10000000 'tablica kroków z
Krokiz(2) = &B11000000 'tablica kroków z
Krokiz(3) = &B01000000 'tablica kroków z
Krokiz(4) = &B01100000 'tablica kroków z
Krokiz(5) = &B00100000 'tablica kroków z
Krokiz(6) = &B00110000 'tablica kroków z
Krokiz(7) = &B00010000 'tablica kroków z
Krokiz(8) = &B10010000 'tablica kroków z
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Do 'pętla
'pętla
Loop 'pętla
End 'koniec programu
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Krokx: 'obsługa 1 przerwania
Disable Interrupts 'wyłączenie przerwań
If Pind.4 = 0 Then 'jeżeli pind.4 ma stan niski to:
If Krokx > 2 Then Decr Krokx Else Krokx = 8 'jeżeli krokx większy od 2 wtedy zmniejsz krokx w przeciwnym wypadku krokx równa się 8
Elseif Pind.4 = 1 Then 'innaczej jeśeli pind.4 ma stan wysoki to:
If Krokx < 8 Then Incr Krokx Else Krokx = 1 'jeżeli krokx mniejszy od 8 wtedy zwiększ krokx w przeciwnim wypadku krokx równa się 1
End If 'koniec warunku
Portc = Krokix(krokx) And Krokiy(kroky) 'wyjście kroków na port c
Enable Interrupts 'włączenie przerwań
Return 'powrót do miejsca wywołania
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Kroky: 'obsługa 1 przerwania
Disable Interrupts 'wyłączenie przerwań
If Pind.5 = 0 Then 'jeżeli pind.5 ma stan niski to:
If Kroky > 2 Then Decr Kroky Else Kroky = 8 'jeżeli kroky większy od 2 wtedy zmniejsz kroky w przeciwnym wypadku kroky równa się 8
Elseif Pind.5 = 1 Then 'innaczej jeśeli pind.5 ma stan wysoki to:
If Kroky < 8 Then Incr Kroky Else Kroky = 1 'jeżeli kroky mniejszy od 8 wtedy zwiększ kroky w przeciwnim wypadku kroky równa się 1
End If 'koniec warunku
Portc = Krokiy(kroky) And Krokix(krokx) 'wyjście kroków na port c
Enable Interrupts 'włączenie przerwań
Return 'powrót do miejsca wywołania
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Krokz: 'obsługa 1 przerwania
Disable Interrupts 'wyłączenie przerwań
If Pind.6 = 0 Then 'jeżeli pind.6 ma stan niski to:
If Krokz > 2 Then Decr Krokz Else Krokz = 8 'jeżeli krokz większy od 2 wtedy zmniejsz krokz w przeciwnym wypadku krokz równa się 8
Elseif Pind.6 = 1 Then 'innaczej jeśeli pind.6 ma stan wysoki to:
If Krokz < 8 Then Incr Krokz Else Krokz = 1 'jeżeli krokz mniejszy od 8 wtedy zwiększ krokz w przeciwnim wypadku krokz równa się 1
End If 'koniec warunku
Porta = Krokiz(krokz) 'wyjście kroków na port a
Enable Interrupts 'włączenie przerwań
Return
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
i teraz mam do kolegów piszących coś w bascom pytanie:
wg noty katalogowej mega8535 ma 3 zewnętrzne przerwania 0, 1 i 2
co można zrobić bo to 2 przerwanie chodziło ???
albo jak to zrobić ???
dzięki z wskazówki
george2002
PS.
Załączam też notę katalogową mega8535
