Sida 1 av 1

mpasm fråga

Postat: 21 februari 2009, 10:31:43
av Bosen
Jag vill ändra status på en bit.... men för enkelhetens skull säger vi såhär:
Jag vill blinka med en led som sitter på RB1. men jag vill inte att dom andra pinnarna på porten påverkas.
detta är vad jag vill uppnå:

Kod: Markera allt

if RB1=true then RB1=false
else RB1=true
Innan har jag löst det ungefär såhär:

Kod: Markera allt

btfss  portb, 1
goto  1
bcf    portb, 1
goto  2
1    bsf portb, 1
2    
om man skall ändra status på hela porten så kan man ju använda comf
...men finns det något kommando man kan annvända för att bara ändra status på en pinne?

Re: mpasm fråga

Postat: 21 februari 2009, 11:26:58
av Icecap
XOR!

00000000 XOR 00010000 = 00010000

Om du använder XORWF kan du uppnå detta på ett enkelt sätt.

MOVLW b'00000001' ; Vilken (vilka...) bit som ska växlas
XORWF PORTA, F ; Växla bit-läget på alla som W har '1' på

Detta växlar läge på PORTA bit 0

Re: mpasm fråga

Postat: 21 februari 2009, 11:42:40
av Bosen
tackar...... ska läsa vidare på XORF

Re: mpasm fråga

Postat: 21 februari 2009, 13:01:43
av vfr
Se bara till att du inte har några andra bitar på port A som ingångar, annars får du problem med RMW (Read-Modify-Write). Det är alltid säkrare att ha utgångsstatus liggande i ett RAM-register och sedan "skugga" det ut till det riktiga registret. Ingen kritik alls, bara ett tips...

Re: mpasm fråga

Postat: 21 februari 2009, 14:02:02
av Icecap
Nja... på en PIC18 kan man ju använda LAT-registret och är en portpinne ingång kan det väl knappast påverka. Kanske om pull-up beror på "utgångens" läge kan det vara ett problem men det skulle vara det hela.

Re: mpasm fråga

Postat: 21 februari 2009, 14:16:06
av JockeE
Bosen nämner inte vilken PIC han använder, men om det är PIC18 så finns instruktionen BTG för att växla en bit.

Angående problemet (?) som vfr tar upp. Det spelar väl endast roll om man har en ingång som senare sätts till utgång, utan att först verifiera läget på utgången.

Re: mpasm fråga

Postat: 21 februari 2009, 16:05:10
av vfr
Det är iofs riktigt. En bit som är definierad som ingång permanent kvittar ju hur den är satt som utgång. Men det är också lätt att missta sig. T.ex analogingångarna som läses som 0 om dom inte är deaktiverade. Är då pinnen satt som utgång så kan det bli lite oväntade resultat. :)

Fast just i det här fallet var kanske inte risken så stor som jag lät göra sken av. Om man däremot växlar en pinne mellan ingång och utgång, för att t.ex köra den som "open collector"-utgång, så kan man absolut få problem. Bättre att vara medveten om problemen innan dom infräffar.