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.:
1 | get_lcd_pattern: |
2 | movwf TEMP |
3 | movlw high DataTable |
4 | movwf PCLATH |
5 | movls low DataTable |
6 | addwf TEMP,W |
7 | btfsc STATUS,C |
8 | incf PCLATH,F |
9 | movwf PCL |
10 | DataTable: |
11 | DT H'00', H'80', H'C0', H'94', H'D4' |
Peter
>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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.