Hallo
wie mache ich setzen ich die original bank?????????????
SWAPF STATUS_TEMP, W ;Swap STATUS_TEMP register into W
;(sets bank to original state)
MOVWF STATUS ;Move W into STATUS register
SWAPF W_TEMP, F ;Swap W_TEMP
SWAPF W_TEMP, W ;Swap W_TEMP into W
um Interruptroutine
SAVING STATUS AND W REGISTERS IN RAM
MOVWF W_TEMP ;Copy W to TEMP register
SWAPF STATUS, W ;Swap status to be saved into W
CLRF STATUS ;bank 0, regardless of current bank, Clears IRP,RP1,RP0
MOVWF STATUS_TEMP ;Save status to bank zero STATUS_TEMP register
:
:(ISR) ;Insert user code here
:
SWAPF STATUS_TEMP, W ;Swap STATUS_TEMP register into W
> hier habe ich problem wie mach ich es;(sets bank to original state)
MOVWF STATUS ;Move W into STATUS register
SWAPF W_TEMP, F ;Swap W_TEMP
SWAPF W_TEMP, W ;Swap W_TEMP into W
Hallo Messung,
das hatten wir doch schon mal im Thread
[Beitrag "Re: Interrupts SAVING STATUS AND W REGISTERS IN RAM"]
in dem Moment in dem movwf STATUS wie nachstehend abgearbeitet ist, ist
Dein Programm wieder bereit zum Abarbeiten der Register in der Bank, aus
welcher heraus die ISR eingetreten ist.
Nochmals: Lies im Datenblatt des PIC16F84 nach wie der Interrupt und das
Banking behandelt wird! Schade natürlich falls Du englisch nicht
verstehst, dann gibt es aber genügend deutschsprachige Seiten - Link von
sprut habe ich Dir ja schon mal im oben verlinkten Thread gegeben!
ISR_Ende
swapf tmp_STATUS,w
movwf STATUS ; Zugleich zurück zur usrpünglichen Bank
swapf tmp_W,f ; WREG wieder herstellen
swapf tmp_W,w ;
RETFIE ; zurück zum Aufrufspunkt der ISR
mach's gut
Ottmar
Am einfachsten nimmt man ne Architektur, die keine Bänke kennt.
Dann gehts ganz normal nach dem RETI dort weiter, wo der Interrupt kam.
Für Banking gibts heutzutage keinen Grund mehr. Je nach Programmgröße
nimmt man 16, 32 oder 64bit linearen Adreßraum.
Peter
Danke
ich habe so das problem gelöst damit ich es abgeben kann
so ist mir latte wenn net geklapt hat der läuft jetzt nicht mehr weg
DEZZAHLEN:
movwf sicher
movlw d'10'
subwf sicher,f
btfsc STATUS,0
return
movlw d'10'
addwf sicher,w
addwf PCL, F
retlw '0' ; Ziffer 0
retlw '1' ; Ziffer 1
retlw '2' ; Ziffer 2
retlw '3' ; Ziffer 3
retlw '4' ; Ziffer 4
retlw '5' ; Ziffer 5
retlw '6' ; Ziffer 6
retlw '7' ; Ziffer 7
retlw '8' ; Ziffer 8
retlw '9' ; Ziffer 9
Dominik S. schrieb:> Guter Witz...> Um was geht es?
Es geht offensichtlich um den Pic16f84 und die Interruptbehandlung mit
Bankumschaltung, alle haben das gerafft, nur Du nicht ;-)
Es ist schon erstaunlich, das es immer wieder User gibt, welche sich die
(vergebene?) Mühe machen und auf so reudige Threads antworten....
@wil1
Ich bewundere Dich für Deine Geduld, jetzt wurden die Hausaufgaben doch
noch rechtzeitig fertig!
Der Dank wird Dir bestimmt auf ewigkeiten hinterher schleichen, auch
wenn unser Gast "Messuung" nicht den Anstand hatte es zwischen seinen
kaum vertändlichen Kauderwelsch zu erwähnen.
Messuung schrieb:> ich habe so das problem gelöst damit ich es abgeben kann
Sicher?
Der Code kann klappen, muß aber nicht.
Bei RETLW muß man immer auch das Überschreiten der Pagegrenze
berücksichtigen.
Z.B.:
>Sicher?
ja es war so:
er hat bei INTERRUPT status geendert und so hatte ich
in
DEZIMAL:
movwf eins ;hier die Zahl zu bearbeiten rein laden
clrf zähn
UMWANDELN:
movlw d'10'
subwf eins,f ;subtrahiere zahlenwert - 10
incf zähn,f ;zehner +1
btfsc STATUS,0 ;Carryabfrage
goto UMWANDELN
decf zähn,f ;Zahl nach überlaauf 0X bis 9X
movlw d'10'
addwf eins,w ;addiere die Einer in Zahlenwert
movwf eins ;rest 0 bis 9
RETURN
nicht immer ergebnis 9>
so nemmen wir an er hat jetzt 247
so muss er das abzählen und landet in anderem program
addwf PCL, F
retlw '0' ; Ziffer 0
retlw '1' ; Ziffer 1
retlw '2' ; Ziffer 2
retlw '3' ; Ziffer 3
retlw '4' ; Ziffer 4
retlw '5' ; Ziffer 5
retlw '6' ; Ziffer 6
retlw '7' ; Ziffer 7
retlw '8' ; Ziffer 8
retlw '9' ; Ziffer 9
dabke noch mal
Pompete schrieb:> @wil1> Der Dank wird Dir bestimmt auf ewigkeiten hinterher schleichen, auch> wenn unser Gast "Messuung" nicht den Anstand hatte es zwischen seinen> kaum vertändlichen Kauderwelsch zu erwähnen.
Na ja, ist von mir auch ein wenig egoistisch, denn so beschäftige ich
mich wieder mal mit diesen Themen und es bleibt dann besser in der
Erinnerung haften... :-)
mfg Ottmar