Wątpliwości z wektorem przerwań

To forum jest dla wszystkich pasjonatów wiecznie młodych mikrokontrolerów '51. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Wątpliwości z wektorem przerwań

Post autor: mr_x » 16 sty 2011, 21:58

Od pewnego czasu zajmuję się dochodzeniem, jak działa Monitor w AVT-2250 z 8051.
W kodzie jest coś takiego

Kod: Zaznacz cały

	org	0000h
	ljmp	X06b1				;skok do START (właściwy początek programu)


;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;################### Wektory obsługi przerwań oraz skoki do nich ###############
	org	0003h
	ljmp	X0113				;przerwanie INT0

	org	000Bh
	ljmp	X0121				;przerwanie T0

	org	0013h
	ljmp	X01e4				;przerwanie INT1

	org	001Bh
	ljmp	X01f2				;przerwanie T1

	org	0023h
	ljmp	X0200				;przerwanie UART

	org	002Bh
	ajmp	X020e				;przerwanie T2
;-------------------------------------------------------------------------------

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;"druga para" wektorów przerwań
	org	0033h
	ljmp	X081c

	org	003Bh
	ljmp	X082a

	org	0043h
	ljmp	X0838

	org	004Bh
	ljmp	X0846

	org	0053h
	ljmp	X0854

	org	005Bh
	ljmp	X0862
;-------------------------------------------------------------------------------
Adresy 03h, 0Bh, 13h, 1Bh, 23h oraz 2Bh są jak najbardziej zrozumiałe. Nie rozumiem tylko, po co w kodzie autor umieścił pozostałe wektory? Czy może ktoś wie? Czy to tylko do jakichś celów, czy może jednak jest jakiś mikrokontroler w rodzinie 8051, który posiada takie wektory przerwań?

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 17 sty 2011, 9:59

Bo można startować program z RAM i te drugie, wektory odnoszą się właśnie do RAMU.
Ogólnie zrobione jest to trochę jak w PC, przerwanie powoduje skok nie od razu do podprogramu przerwania, a do tablicy wektorów przerwań i dopiero z tamtąd pobierany jest właściwi adres skoku do procedury.

Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Post autor: mr_x » 17 sty 2011, 12:19

No tak, rozumiem, ale mi chodzi o to, jak np. może dojść do skoku pod wektor 0033h, skoro mikrokontroler 8051 nie posiada przerwania o takim adresie?

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 17 sty 2011, 15:18

Bo te drugie przerwania to przerwania programowe, nie sprzętowe, wywoływane programowo.

Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Post autor: mr_x » 17 sty 2011, 15:35

Mam już cały kod z AVT-2250 zdisasemblowany i nigdzie nie ma procedury wywołującej akurat te adresy. Chyba, że poprzez manipulację DPTR, bo to jedyna możliwość wymuszenia takiego skoku.

ODPOWIEDZ