Sida 1 av 1

Språkkonstruktion i MPASM

Postat: 27 augusti 2012, 11:48:18
av jpalsson
Hej,

Efter ett 15 årigt upphåll från elektronik och assemblervärlden så känner jag
att det skulle vara lite kul att testa lite kopplingar igen, så jag har skaffat
en picprogrammerare och några kretsar.

Jag sitter och tittar i en Gooligum tutorial och undrar över en språkkonstruktion,
(Källa: http://www.gooligum.com.au/tutorials/mi ... id_A_1.pdf)

Det står:
movlw ~(1<<GP1) ;configure GP1 (only) as an output

Sedan, ett par rader ner säger man att man också kunnat skriva,

movlw b'111101'

Inte tycker jag att "~(1<<GP1)" bidrar till läsbarheten direkt..
Ni som kör PIC, brukar ni använda den här typen av konstruktioner ?


Mvh

/Johan

Re: Språkkonstruktion i MPASM

Postat: 27 augusti 2012, 11:50:17
av AndersG
Ni som kör PIC, brukar ni använda den här typen av konstruktioner ?
Nej. Även om jag tycker att detta är kul:

http://www.ioccc.org/

:)

Re: Språkkonstruktion i MPASM

Postat: 27 augusti 2012, 12:03:45
av sodjan
> movlw ~(1<<GP1) ;

Jag tycker det där är en C'ism som inte hör hemma i ASM kod.
Även om det kanske fungerar så är det väldigt ovanligt i ASM.

> movlw b'111101'

Det är bättre men hade varit tydligare om man anger 8 bitar i värdet.
Alltså oavsett om den aktuella registret har 8 aktiva bitar.
Alltså : movlw b'00111101', då är det ingen tvekan.

Jag skulle antingen använda en binär parameter som i exempel ovan
eller för att göra koden riktigt tydlig (lite onödigt tydligt kanske):

Kod: Markera allt

   banksel   TRISIO
   bsf       TRISIO, TRISIO0
   bcf       TRISIO, TRISIO1
   bsf       TRISIO, TRISIO2
   bsf       TRISIO, TRISIO4
   bsf       TRISIO, TRISIO5
Notera att TRISIO3 är låst till "1" och inte behöver anges specifikt.

Re: Språkkonstruktion i MPASM

Postat: 27 augusti 2012, 12:19:31
av Krille Krokodil
Förstår inte varför man ska hålla på och skifta i koden??? Det bör väl vara tydligare att definiera GP1 som 0b00000010 och sedan bara behöva skriva ~GP1 eller om man skall sätta fler portar som utgång ~(GP1 | GP4 | GP5).

Re: Språkkonstruktion i MPASM

Postat: 27 augusti 2012, 12:25:45
av AndersG
Nej. Jag tycker att det är viktigare att koden är lätt att läsa.

Re: Språkkonstruktion i MPASM

Postat: 27 augusti 2012, 12:30:57
av sodjan
Detta är dessutom i initieringsdelen och det finns ingen anledning
till "smart" programmering. Tydlighet är viktigast som AndersG sa.

Re: Språkkonstruktion i MPASM

Postat: 27 augusti 2012, 12:50:45
av Icecap
Jag brukar definiera sådana saker i "klarspråk" i början:
#define LED_Red 0x02 ; Connected to GP1

Senare i programmet kan man sedan skriva:
movlw ~LED_Red ; Value to turn off red LED

Såklart kan man skriva:
#define LED_Red (1<<GP1) ; Connected to GP1
om man vill, det har ingen betydelse längre ner i programmet och man använde de redan definierade värden.

Re: Språkkonstruktion i MPASM

Postat: 27 augusti 2012, 12:57:20
av sodjan
Vad har "~" för funktion där?
Sen så talar du väl om GPIO, inte TRISIO ??

Det är ju lite andra avväganden (kodstorlek, prestanda o.s.v)
för kod inne "i main", så att säga, än i init-delen.

För att göra det som jag tror att du gör skulle jag skriva :

Kod: Markera allt

#define   LED_Red   GPIO, GP2
...
...
   bcf    LED_Red
...
Varför MOVLW över huvudtaget?

Re: Språkkonstruktion i MPASM

Postat: 27 augusti 2012, 18:26:32
av Mr Andersson
~ är bit-invertering.

Re: Språkkonstruktion i MPASM

Postat: 27 augusti 2012, 18:29:12
av sodjan
Jo, det är jag med på, men varför använda den där?
Koden blir ju inte tydligare/klararde av det, IMHO.

Re: Språkkonstruktion i MPASM

Postat: 27 augusti 2012, 18:32:47
av jpalsson
Hej och tack för alla svar :)

Men, då är jag ju inte fel ute då, jag blev då väldigt förbryllad
när jag såg "<<" i assemblerkod i den första "tutorial" jag öppnat om PIC
och tänkte för mig själv "det här blir en uppförsbacke..."
Nej, lättläst och enkelt ska det vara precis som de exempel ni givit.
(Och jag håller med Sodjan om att binära tal bör uttryckas i hela bytes)


Mvh

/Johan

Re: Språkkonstruktion i MPASM

Postat: 27 augusti 2012, 18:37:45
av Mr Andersson
Jaha okej, ursäkta. Jag missuppfattade din fråga. :(
Jag håller med om att rena konstanter (eller defines) gör koden mera lättläst. Och dessutom är det förmodligen inte alla assemblers som klarar såna högnivåfunktioner.
Absolut inget fel i att använda såna funktioner i sin egen kod, men man borde nog inte göra det i en tutorial som OP nämnde. Om det nu inte råkar vara en tutorial på just högnivåfunktioner i så fall :)

Re: Språkkonstruktion i MPASM

Postat: 27 augusti 2012, 18:39:48
av sodjan
> Nej, lättläst och enkelt ska det vara precis som de exempel ni givit.

Bra! :-)
Ditt första exempel var ju riktigt kasst med både "shift" och "invers"
operatorer i samma kommando enbart för att sätta en bit = "1"... :-)

Sen så lär ju backträning vara väldigt nyttigt, har jag hört. :-)

> Jaha okej, ursäkta. Jag missuppfattade din fråga.

Ja, det var ju nästa självmål från min sida, jag kunde ha varit
lite med specifik där... :-)