Der Prozessor fängt beim Einschalten oder Reset immer an der Speicherstelle 0 an
Dort steht dann meist ein Goto Start
Dieser Start ist dann das Hauptprogramm, was sich etwas weiter hinten im Code befindet.
Der Grund dafür ist: An Speicherstelle 4 befindet sich der Interrupt-Vector
und da soll natürlich drüber weg gesprungen werden.
Code:
MAIN_CODE CODE
ORG 0 ; Reset Vector, hier gehts immer los nach dem Einschalten
goto Main ; hier steht normalereise ein Goto Hauptprogramm
ORG 4 ; addresse des Interrupt vectors ist fest und immer an Adresse 4 bei diesem Chip
goto InterruptCode
; hier ist nun die Speicherstelle 5
Main:
....
....
goto Main ; Hauptschleife
InterruptCode:
Hier ist noch ein Beispiel:
Der obere Speicher 0..3 wird hier direkt mit Code gefüllt. Ab Speicherstelle 4 beginnt die Interrupt Funktion
Das Hauptprogramm liegt dann irgendwo weiter hinten....
Code:
ResetVector CODE H'0000' ; always fixed to address 0x0000
NOP
NOP
clrf STATUS
goto main
;--------------------------------------------------------------------
; I N T E R R U P T - V E C T O R
;
InterruptVector CODE H'0004' ; always fixed to address 0x0004
Interrupt:
movwf Save_Wreg
swapf STATUS,W
movwf Save_Status
btfsc INTCON,TMR0IF ; Timer 0 ; 1 ms Interrupt
goto TIMER0_Interrupt
InterruptEnd:
swapf Save_Status,W
movwf STATUS
swapf Save_Wreg,F
swapf Save_Wreg,W
retfie
;--------------------------------------------------------------------
TIMER0_Interrupt:
bcf INTCON,TMR0IF
goto InterruptEnd
;--------------------------------------------------------------------
main:
;
goto main
Auszug aus dem Datenblatt:

Siro
Lesezeichen