logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

AT89C2051 error 13. Unknown interrupt in file. Kawałek kodu.

michał154 11 Lut 2007 15:56 2031 18
REKLAMA
  • #1 3556554
    michał154
    Poziom 12  
    Posty: 68
    Pomógł: 1
    Ocena: 2
    Witam
    Mam taki kawałek kodu i wywala mi "Error 13: Unknown interrupt in file..."

    Priority Set , Serial
    Enable Serial
    Enable Interrupts
    On Serial Przerwanie_rs232

    Proszę o pomoc
  • REKLAMA
  • #2 3556663
    markosik20
    Poziom 33  
    Posty: 2261
    Pomógł: 208
    Ocena: 147
    Jak to już było mówione
    Cytat:
    wróżka ma dzisiaj wolne

    Co wywala błąd, kompilator,programator?
    Jaki kawałek kodu? Duży, mały? :)
  • REKLAMA
  • #3 3556846
    michał154
    Poziom 12  
    Posty: 68
    Pomógł: 1
    Ocena: 2
    sorki mój błąd
    Błąd wywala program bascom-8051. A kawałek kodu wygląda tak:

    Priority Set , Serial
    Enable Serial
    Enable Interrupts
    On Serial Przerwanie_rs232

    Jest on samym początku całego programu.a Błąd wygląda jak: "Error 13: Unknown interrupt in file..."
  • #4 3557373
    redart
    Poziom 23  
    Posty: 529
    Pomógł: 51
    Ocena: 30
    michał154 napisał:

    "Error 13: Unknown interrupt in file..."


    No przecież pisze o co chodzi! Nieznane przerwanie, nieznane bo go nie określiłeś. UART musi mieć chociaż kawałek Timera...
    Masz tu fragment helpa do bascoma:

    Przykład:
    
    Priority Set Serial                  'ustaw UART na wyższym poziomie 
    Enable Serial                        'włącz przerwanie Int0 
    Enable Timer0                        'włącz przerwanie Timer0
    Enable Interrupts                    'włącz system przerwań
    On Serial Label                      'skocz do Label jeśli wystąpi przerwanie UART
    Do                                   'jakaś pusta pętelka
    Loop
    
    Label:                               'początek programu obsługi
       Print "Wystąpiło przerwanie UART" 'drukuj komunikat
    Return  


    Korzystaj z pliku pomocy bascoma, to bardzo ułatwia sprawę.
  • #5 3690066
    michał154
    Poziom 12  
    Posty: 68
    Pomógł: 1
    Ocena: 2
    Wklepałem przykład bo bascoma i ten sam błąd. Czemu? Niby wszytko ok a wywala błąd w pierwszej linijce programu. Ryłem w pliku pomocy, robiłem jak karzą i kicha. Ręce odpadają. aż się odechciewa :(
    Pozdro
  • #6 3690078
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    To wywal przecinek z ...
    
    Priority Set , Serial
    

    Poza tym , w/w przykład jest do bani , bo nie sprawdza i nie zeruje flagi , która była powodem przerwania.
    Piotrek
  • #7 3690821
    michał154
    Poziom 12  
    Posty: 68
    Pomógł: 1
    Ocena: 2
    Bez tego przecinka to wywala jeszcze jeden błąd:
    " Error 12: ,expected [SERIAL] In File c:\PROGRAM FILES\........."

    Więc gdzieś ten przecinek musi być, chyba że polecenie nie takie. HGW co go boli
    Pozdro
  • #8 3691224
    szymtro
    Poziom 30  
    Posty: 1421
    Pomógł: 101
    Ocena: 59
    zumek ma racje - coś poknociłeś.
    $regfile = "89c2051.dat"
    $crystal = 11059200
    '$noinit
    '------------------------------------------------
    On Serial Przerwanie_rs232
    Priority Set Serial
    '------------------------------------------------
    Dim Ala As Byte
    '------------------------------------------------
    Enable Serial
    Enable Interrupts
    '------------------------------------------------
    Do
    Loop
    '------------------------------------------------
    Przerwanie_rs232:
       If Scon.0 = 1 Then         'przerwanie od odbioru
          Scon.0 = 0                 'skasowanie flagi info o przerwaniu RX
       Else
          Scon.1 = 0                 'skasowanie flagi info o przerwaniu TX
       End If
    Return

    Wersja 208, kompiluje się bez żadnych błędów a czy działa? Jak tam nie ma programu to jak ma działać.
  • REKLAMA
  • #9 3692339
    michał154
    Poziom 12  
    Posty: 68
    Pomógł: 1
    Ocena: 2
    A wiec sprawa wygląda następująco. Program wygląda tak:

    Priority Set Serial
    Enable Serial
    Enable Interrupts
    On Serial Przerwanie_rs232

    Scon = &H50
    Pcon = Pcon Or 128

    Config Timer1 = Timer , Mode = 2 , Gate = Internal
    Th1 = 253 ' 19200bps

    Start Timer1

    Set P3.0
    Set P3.1

    Dim Receive As Bit
    Dim Dane As Byte

    Receive = 0

    Reset P3.7 : Set P3.5 : Set P3.2 : Set P1.3 : Set P1.0 : Reset P1.6 : Set P1.4 'disable 1 i 2 i LED B

    'Program główny

    Do

    If Receive = 1 Then
    Select Case Dane
    Case 0 : Goto Potwierdz
    Case 1 : Goto Xstep1
    Case 2 : Goto Xstep2
    Case 3 : Goto Xstep3
    Case 4 : Goto Xstep4
    Case 5 : Goto Xstep5
    Case 6 : Goto Xstep6
    Case 7 : Goto Xstep7
    Case 8 : Goto Xstep8
    Case 9 : Goto Xstop
    Case 10 : Goto Xystopdiodab
    Case 11 : Goto Ystep1
    Case 12 : Goto Ystep2
    Case 13 : Goto Ystep3
    Case 14 : Goto Ystep4
    Case 15 : Goto Ystep5
    Case 16 : Goto Ystep6
    Case 17 : Goto Ystep7
    Case 18 : Goto Ystep8
    Case 19 : Goto Ystop
    Case 20 : Goto Ini
    Case 21 : Goto Pendown
    Case 22 : Goto Penup
    Case 23 : Goto Diodar
    Case Is > 23 : Goto Potwierdz
    End Select

    '1 silnik

    Xstep1:
    Reset P3.2 : Set P3.3 : Set P3.5 '+ 0
    Goto Potwierdz

    Xstep2:
    Reset P3.2 : Set P3.3 : Reset P3.5 : Set P3.4 '+ +
    Goto Potwierdz

    Xstep3:
    Set P3.2 : Reset P3.5 : Set P3.4 '0 +
    Goto Potwierdz

    Xstep4:
    Reset P3.2 : Reset P3.3 : Reset P3.5 : Set P3.4 '- +
    Goto Potwierdz

    Xstep5:
    Reset P3.2 : Reset P3.3 : Set P3.5 '- 0
    Goto Potwierdz

    Xstep6:
    Reset P3.2 : Reset P3.3 : Reset P3.5 : Reset P3.4 '- -
    Goto Potwierdz

    Xstep7:
    Set P3.2 : Reset P3.5 : Reset P3.4 '0 -
    Goto Potwierdz

    Xstep8:
    Reset P3.2 : Set P3.3 : Reset P3.5 : Reset P3.4 '+ -
    Goto Potwierdz

    '2 Silnik

    Ystep1:
    Reset P1.0 : Set P1.1 : Set P1.3 '+ 0
    Goto Potwierdz

    Ystep2:
    Reset P1.0 : Set P1.1 : Reset P1.3 : Set P1.2 '+ +
    Goto Potwierdz

    Ystep3:
    Set P1.0 : Reset P1.3 : Set P1.2 '0 +
    Goto Potwierdz

    Ystep4:
    Reset P1.0 : Reset P1.1 : Reset P1.3 : Set P1.2 '- +
    Goto Potwierdz

    Ystep5:
    Reset P1.0 : Reset P1.1 : Set P1.3 '- 0
    Goto Potwierdz

    Ystep6:
    Reset P1.0 : Reset P1.1 : Reset P1.3 : Reset P1.2 '- -
    Goto Potwierdz

    Ystep7:
    Set P1.0 : Reset P1.3 : Reset P1.2 '0 -
    Goto Potwierdz

    Ystep8:
    Reset P1.0 : Set P1.1 : Reset P1.3 : Reset P1.2 '+ -
    Goto Potwierdz

    'pen

    Pendown:
    Set P3.7
    Goto Potwierdz

    Penup:
    Reset P3.7
    Goto Potwierdz

    'stop

    Xstop:
    Set P3.5 : Set P3.2 'disable 1
    Receive = 0
    Goto Potwierdz

    Ystop:
    Set P1.3 : Set P1.0 'disable 2
    Receive = 0
    Goto Potwierdz

    Xystopdiodab:
    Set P3.5 : Set P3.2 : Set P1.3 : Set P1.0 : Reset P3.7 : Reset P1.6 : Set P1.4 'disable 1 i 2 oraz penup
    Receive = 0
    Goto Potwierdz

    Diodar:
    Reset P1.4 : Set P1.6
    Receive = 0
    Goto Potwierdz

    Ini:
    Receive = 0
    Sbuf = 111
    Goto Potwierdz

    Potwierdz:
    Receive = 0
    End If

    Loop

    End

    Przerwanie_rs232: 'obsługa przerwania rs232

    'przerwanie z odbiornika
    If Scon.0 = 1 Then
    Dane = Sbuf
    Receive = 1
    End If

    'wyzerowanie wska?ników przerwania RI i TI
    Scon = Scon And &B11111100
    Return


    Autor programu mówi że u niego się kompiluje i wszystko śmiga bez zarzutu. Dostałem od niego zgodę na wykorzystanie programu i lub ewentualne jego przerobienie na bascom AVR. Żeby go przerobić na AVR muszę to odpalić na tym procku i męczę sie z tym od dłuższego czasu. Mam wersję 2.0.13.0 bascoma i jak wyłączę error file to też się kompiluje ale nie działa. Dostałem nawet oryginalny plik od autora i kicha nie działa. Spróbuję go przerobić według powyższego wzoru, ale widzę to marnie bo dopiero zaczynam, w szkole też nie umieją pomóc. Przerabiam to w budzie co lekcje a że tam nie ma sprzętu albo czegoś brakuje albo kompy nie działają to jest tak jak jest. Gdzie sie nie pytam to mi mówią patrz do pliku pomocy. Patrze robie według niego i h***a to działa. :evil:
    A jak chciałem napisać coś według książki to tam było tak dajnie napisane że bez pomocy elektrody się nie obyło :please:
    Biorę sie do dzieła i "pozdro4all"
    Jakby coś dało się z tym zrobić to proszę dać znać
    Jeszcze raz "pozdr o" dla wszystkich
  • REKLAMA
  • #10 3692502
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Chłopie :!: Wpisz sobie w kod na początku $regfile = "89c2051.dat" , albo ustaw w opcjach globalnych ten proc , bo jak na razie , to kompilujesz kod dla pierwszego z brzegu proca , czyli 80515C.
    Napisz , kto/co wysyła dane do proca. Czy to jakiś program na PC , czy z poziomu hyperterminala wysyłasz dane, a może jeszcze inaczej :?:
    Poza tym , instrukcje Goto zaprowadzą Cię kiedyś na manowce ;)
    W tym przypadku zamiast Select Case , użyłbym On Zmienna Gosub/Goto.


    Piotrek
  • #11 3693233
    michał154
    Poziom 12  
    Posty: 68
    Pomógł: 1
    Ocena: 2
    Dane wysyłane są z kompa do proca a ten steruje końcówkami mocy do silników krokowych.

    Wpisałem na początku zgodnie z zaleciemi ;) komendę
    $regfile = "89c2051.dat
    i jeszcze $baud = 19200 i $crystal = 11059200

    Jest dobrze bo nie wywala błędu ale nadal jest oporny i nie chce współpracować
  • #12 3693330
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    michał154 napisał:
    Dane wysyłane są z komputera do proca a ten steruje końcówkami mocy do silników krokowych.

    A jakież to tajne dane wysyła PeCet do proca :?:
    Czy to 1,2,3,4 ... a może "1","2","3","4" ... czy muszę Cię ciągnąć za język :?: :D
    Piotrek
  • #13 3693566
    michał154
    Poziom 12  
    Posty: 68
    Pomógł: 1
    Ocena: 2
    Hmmm
    Aż tak głęboko nie wnikałem. Proc ma za zadanie wysterować końcówkę mocy - zapodać kolejność faz. W sumie cały projekt jest opisany na stronce http://www.plotpage.webpark.pl/ Pozdrowienia dla autora
    Jeśli konieczne to wypytam co i jak :) O co jeszcze wypytać żeby było za jednym razem ??? :)
    Pozdro
  • #14 3693859
    szymtro
    Poziom 30  
    Posty: 1421
    Pomógł: 101
    Ocena: 59
    Popatrzyłem na ten program co wkleiłeś i musze powiedzieć ze jest nadzwyczaj prosty - bajt danych z rs i zależnie od wartosci skacze w odpowiednie miejsce. Nie ma potwierdzenia żadnego odsyłąnego - tylko odbiór.

    Popatrz na to ze dwa dni i sma dojdziesz do tego co trzeba przerobić żeby zadziałąło z avr - ja mówie że to jeden wieczór. Pytanie tylko po co to przerabiać - zastosuj to co autor i napewno zadziała.
  • #15 3767842
    michał154
    Poziom 12  
    Posty: 68
    Pomógł: 1
    Ocena: 2
    Witam są święta więc czas się przypomnieć, i korzystając z okazji to Wszystkiego Najlepszego, smacznego jajka itp:)
    Wracając do programu. Zainstalowałem Bascoma na windzie 98 i wrzuciłem programik w oryginalnej wersji jakież było moje zdziwienie jak wcisnąłem przycisk F7. Wywaliło błąd owszem ale nie ten co w XP.

    W XP w linijce z kodem:
    PRIORITY SET SERIAL wyrzucało błąd "Error 13: Unknown interrupt in file..."

    W 98 w tej samej linijce wywala błąd "Error 5 : Wrong variable or variable not dimensioned In File...."

    Więc teraz już zupełnie zgłupiałem. Program nadal nie współpracuje, bascom robi co chce i w ogóle kicha.
    Pozdrawiam wszystkich
  • #16 3768289
    bogdan_p
    Poziom 39  
    Posty: 3849
    Pomógł: 525
    Ocena: 120
    program kompiluje się bez żadnego problemu Win 2000 , Bascom ver 2.0.11.0 całość masz w załączniku
    program do obsługi plotera masz napisany w Dos-ie , dla tego musisz odblokować dostęp do portów jeżeli używasz systemów opartych na technologi NT lub pracuj w czystym Dos-ie , Win 95 , Win 98 przecież ta uwaga jest na stronie autora projektu
    Załączniki:
    • ploter.rar (3.52 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #17 3769915
    michał154
    Poziom 12  
    Posty: 68
    Pomógł: 1
    Ocena: 2
    Witam
    Wszystko sie zgadza. tylko czemu bascom w zależności od systemu kompiluje z innymi błędami albo że na 98 skompiluje a na xp nie.
    Udało mi sie skompilować na 98 programik ale... nadal nie współpracuje. na płytce nic nie reaguje po podłączeniu. I znowu w kropce.

    Dodano po 4 [godziny] 16 [minuty]:

    Jakiś tam postęp jest. Doszedłem do stanu w którym sie świeci dioda gotowości i dalej już nic... Po podłączeniu kontrolki diodowej na Rx i Tx widać jak komp przesyła sygnał ale proc ani drgnie
    Pozdrawiam
  • #18 3788944
    michał154
    Poziom 12  
    Posty: 68
    Pomógł: 1
    Ocena: 2
    Sprawdziłem, poryłem i problem jest w tym, że procek jakby sie nie komunikował przez UART. Sam UART działa bo sprawdzałem programem Simpleterm. Komp wysyła i odbiera dane, Proca też zmusiłem żeby wysyłał coś na kompa, tylko nie wiem jak go zmusić do odbierania danych. Ryje po necie coś nie mogę znaleźć jak zrobić żeby działało
    Pozdrawiam
  • #19 3962300
    michał154
    Poziom 12  
    Posty: 68
    Pomógł: 1
    Ocena: 2
    Przerobiłem an AVR.
    Temat zamykam i pozdrawiam wszystkich

Podsumowanie tematu

✨ Problem dotyczył błędu "Error 13: Unknown interrupt in file..." podczas kompilacji programu w Bascom-8051 dla mikrokontrolera AT89C2051. Błąd wynikał z niepoprawnej deklaracji przerwania UART oraz braku odpowiedniego ustawienia pliku rejestru procesora ($regfile = "89c2051.dat"). Usunięcie przecinka w poleceniu "Priority Set Serial" oraz poprawne zdefiniowanie przerwania "On Serial Przerwanie_rs232" wraz z obsługą flag przerwań w rejestrze SCON rozwiązało problem kompilacji. Dodatkowo wskazano na konieczność ustawienia parametrów komunikacji szeregowej, takich jak $baud i $crystal. Pomimo kompilacji, autor miał trudności z komunikacją UART, gdzie mikrokontroler nie odbierał danych, choć nadawanie działało. Sugerowano sprawdzenie konfiguracji sprzętowej i oprogramowania PC, a także zwrócenie uwagi na system operacyjny, gdyż Bascom zachowywał się różnie na Windows 98 i XP. Ostatecznie autor przerobił projekt na platformę AVR i zamknął temat. Wskazano również, że program steruje silnikami krokowymi poprzez odbierane dane z komputera PC i że oryginalny projekt pochodzi ze strony http://www.plotpage.webpark.pl/.
Wygenerowane przez model językowy.
REKLAMA