PIC kommandon
PIC kommandon
Hej, jag för söker få en PIC att "PORTB,0 = databit1" Hur gör man det? Jag försökte med:
RAD80 movfw databit1
RAD81 movwf PORTB,0
Men då säger den bara "81 illegal charekter (,)"
Så hur ska man då göra om man inte kan använda det komandot för bara en bit?
//Daniel A
RAD80 movfw databit1
RAD81 movwf PORTB,0
Men då säger den bara "81 illegal charekter (,)"
Så hur ska man då göra om man inte kan använda det komandot för bara en bit?
//Daniel A
Jag skulle beskrivit lite mer bättre. Men jag vill at om databit1 som är en bit, (1 eller 0) är 0 (Edit: Jag menar så klart 1!!!) så skall utgången bli hög. Om den är 0 så skall utgången bli låg. Dvs. Det är inga register jag ska flytta utan det är bara bitar. Något mer jag var otydlig med?
Tack!
//Daniel A
Tack!
//Daniel A
databit1 är förmodligen 0 eller 1, dvs dom binära signalerna... och han försöker förmodligen lägga ut en 1:a eller 0:a på RB0...
squiz3r: om "databit1" är känd vid kompilering (dvs har ett fast värde) är det bättre om du sätter/nollar biten med "BSF PORTB,0", "BCF PORTB,0" respektive. Om du vill toggla (dvs ändra från 0 -> 1 och 1 -> 0) kan du använda:
(var länge sedan jag skrev PIC asm så ovanstående kan innehålla fel men jag hoppas att du förstår principen)
Om variabeln inte är känd så får du använda BTFSC, BTFSS, BSF, BCF...
Du ska inte ha med "RAD80" och "RAD81" i koden eftersom assemblatorn inte förstår det.
squiz3r: om "databit1" är känd vid kompilering (dvs har ett fast värde) är det bättre om du sätter/nollar biten med "BSF PORTB,0", "BCF PORTB,0" respektive. Om du vill toggla (dvs ändra från 0 -> 1 och 1 -> 0) kan du använda:
Kod: Markera allt
MOVLW 0b00000001 ;ladda W med XOR-mask
XORWF PORTB, 1 ;kör XOR-mask med PORTB och spara i PORTB
Om variabeln inte är känd så får du använda BTFSC, BTFSS, BSF, BCF...
Du ska inte ha med "RAD80" och "RAD81" i koden eftersom assemblatorn inte förstår det.
Seven11: "RAD80" och "RAD81" skrev jag bara här för att ni skulle se vilken rad felmedelandet syftade på. Min "databit1" är inte ett fast värde utan den beror på vad ingångarna har för värde. Men om jag använder "BTFSS" komandona, så får jag väll göra så här:
Edit: OBS! databit1 är inte en variabel, utan det är en ingång på PIC'en.
//Daniel A
Kod: Markera allt
...
btfss databit1
bcf PORTB,0
btfsc databit1
bsf PORTB,0
....
//Daniel A
squiz3r: assemblatorn behöver veta vilken bit du vill testa också, dvs
DÅ kommer PORTB0 att sättas om bit 0 i databit1 är 1 och nollas annars.
EDIT: anledningen till ditt felmeddelande förut är pga att MOVWF inte har någon andra operator (MOVWF = "MOVe W to F"), det är MOVF som har.
Kod: Markera allt
btfss databit1,0
bcf PORTB,0
btfsc databit1,0
bsf PORTB,0
EDIT: anledningen till ditt felmeddelande förut är pga att MOVWF inte har någon andra operator (MOVWF = "MOVe W to F"), det är MOVF som har.
Du svarade på din egen fråga.sodjan skrev:Vad skulle problemet vara ?
Det är av den anledningen jag är rätt försiktig med macros och liknande, om det skulle till sig att jag behöver kodhjälp från någon annan. Det är lätt hänt att glömma skicka med en eller ett par #define, och förvirringen blir då ganska stor.