Assembler Anfängerfrage

Gast #3208679
Lesenswert?

Hallo,

kann mir bitte jemand erklären, warum man folgenden Code verwendet um in 
einem PIC PORTA als Ausgang zu setzen ?
1
BSF 03h,5      ;Go to Bank 1
2
MOVLW 06h      ;Put 00110 into W
3
MOVWF 85h      ;Move 00110 onto TRISA
4
BCF 03h,5

Kann man alternativ auch einfach  mit dem BSF Befehl die einzelnen BITS 
in PORT A setzen anstatt zuerst ins W Register zu schreiben und dann das 
gesamte zu kopieren ?

Als Beispiel :
1
BSF 85h,1
2
BSF 85h,2
Damit wären doch auch die beiden BITs gesetzt ??
#3208719
Lesenswert?

wollte ich eigentlich noch schreiben, habe aber irrtümlich RETURN 
gedrückt.
Also:
Wenn zwischen den einzelnen "bsf" (und auch "bcf") Anweisungenen ein 
Interrupt auftritt und die Interruptroutine eine bestimmte Konfiguration 
von PortA voraussetzt, ist die 2. Methode nicht Optimal bzw. Fatal.
Gast #3208724
Lesenswert?

ok, vielen Dank schonmal.

Ich dachte das hängt vielleicht damit oder auch damit zusammen, dass man 
immer erst in BANK 1 wechseln muss um die BITs so zu setzen.
Weil bei der zweiten Variante würde der Wechsel von BANK 0 zu BANK 1 ja 
wegfallen.
#3208789
Lesenswert?

Es gibt noch einen guten Grund, nicht in jedem Falle mit
bsf, bcf, rlf, rrf
die PORT-Bits zu manipulieren, nämlich das "Read Modify Write Problem"!

Siehe dazu sehr ausführlich: 
[http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic/help/rmw.htm]
oder auf deutsch: 
[http://www.sprut.de/electronic/pic/fallen/fallen.html#inout]

Falls das Problem in bestimmten Fällen (siehe URL's) auftritt, ist die 
sicherste Lösung hierfür ein Schattenregister zu verwenden:
1
   movf  PORTx,W    ;zu ändernder PORTx
2
   movwf shdwPORT   ;PORTx in Schattenregister kopieren
3
   bsf   shdwPORT,3 ;z.B. Bit 3 setzen  = 1
4
   bcf   shdwPORT,6 ;z.B. Bit 6 löschen = 0
5
   movf  shdwPORT,W ;Portkopie mit geänderten Bits über das
6
   movwf PORTx      ;WREG wieder in den PORTx kopieren.
mfG Ottmar

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren