PIC elado
Miko Imre
imre.miko at siemens.com
Wed Apr 30 14:50:23 CEST 2003
Szia Istvan!
Istvan Retaller wrote:
> Nos, itt vagyok bajban, mikor tobb eve nem hasznalt nyelvben kell peldakat
> irnom olyanonak, akik nap mint nap ezt hasznaljak ;))
> Szoval alapvetoen a fogalmakat kell tisztazni. Az incf valtozo,f utasitasban
> a Pic adatlapok szerint az "f" a "file register" kifejezesbol adodik,
> azaz ugyanugy regiszterrol van szo, mint az avr eseten.
> A csusztatas ott van, hogy pic esten _nem foglalkozol_ azzal, hogy honnan
> es mikor kerult bele ebbe a regiszterbe a tartalma, nem toltod be memoriabol,
> mint az avr eseteben, mert ilyen memoria nincs is a pic-ben.
Igy van itt a memoria = file regiszterek, tehat amit file regiszteren vegzel, azt
tulajdonkeppen a memoriaban teszed. (vagy porton)
> Tehat _mindket_ esetben egyszeru register increment a lenyeg, csak a pic
> eseteben adottnak veszed, hogy a megfelelo tartalom mar a regiszerben van,
> nem vizsgalod, honnan, mikor, ki inicializalta azt az erteket, avr eseteben
> meg hozzateszel egy inicializalast, meg egy mentest. Ez az inkorrekt.
Vegyuk az erteket egyik portrol es tegyuk ki a masikra:
PIC:
incf PORTA,w
movwf PORTB
AVR:
in rega, PORT_A
inc rega
out PORT_A, rega
> Itt megint ugyaz az alapallas es a tobbit mar nem is folytatom, mert vegig ez a
> vonulat. Nezzuk:
> movf b,w ;a W-bol toltesz a b-be. De a w-t sem inicializaltad!
Gondolom mar elfelejtetted, azert lehet de ez pont a w inicializalasa b-bol.
> addwf c,w ;ugyanazt az inicializalatlan W-t adod hozza a c-hez
Itt az inicializalt w-hez adom a c-t.
> movwf a
es tarolom
> Vegezd el konstansokkal es tedd le az eredmenyt valahova, igy nem lehet
> csusztatni:
>
> Tegyuk el a 11+22 eredmenyet kesobbi felhasznalasra.
> Pic-ben az egyetlen lehetoseged:
>
> movlw 11
> movwf rega ; <<
Ez a sor itt felesleges
> addlw 22
> movwf regb
> >> En legfeljebb egy 32*32 bites, mul utasitasok mellozesevel kialakitott
> >> szorzorutint tudok felajanlani, hogy ird meg PIC-ben es hasonlitsuk
> >> ossze. Szerintem lesz annyi kedved, mint nekem a bin-bcd irasahoz.
> >
> >A megirasahoz nincs kedvem nekem sem, de vettem a faradsagot es kikerestem
> >az app note-ok kozul:
> >
> > 32x32 Bit Unsigned Fixed Point Multiply 32x32 -> 64
> > Max timing: 856 clks
> > Min timing: 209 clks
> > Prog mem: 168
> > Data mem: 17
> >
> Hat avr-ben ez is drasztikusan rovidebb.
> Udv, RI
>
> ;******************************************************************************
> ;* *
> ;* mcount may fit into R0...R15 range, but the others *
> ;* must be in R16...R31 range. *
> ;* *
> ;******************************************************************************
>
> ;to be defined in caller:
>
> ;#define mcount R9
>
> ;#define R0L R17 ;multiplayer + result
> ;#define R1L R18
> ;#define R0M R19
> ;#define R1M R20
> ;#define R2M R21
> ;#define R3M R22
> ;#define R0H R23
> ;#define R1H R24
>
> ;#define ML R25 ;multiplicand
> ;#define MM0 R26
> ;#define MM1 R27
> ;#define MH R28
>
> mul32_64
> ldi R1H,32+1 ;miltiplicand is 32 bits wide
> mov mcount,R1H
> clr R2M
> clr R3M
> clr R0H
> clr R1H
> clc
> _mul32_1:
> ror R1H
> ror R0H
> ror R3M
> ror R2M
> ror R1M
> ror R0M
> ror R1L
> ror R0L
> brcc _mul32_2
> add R2M,ML
> adc R3M,MM0
> adc R0H,MM1
> adc R1H,MH
> _mul32_2:
> dec mcount
> brne _mul32_1
> ret
Nos, tetszik ez az algoritmus, mar ezert erdemes volt egy kicsit
vitatkoznunk, igy megismertem ezt is. Ezek szerint az Microchip App note
iroi sem voltak a helyzet magaslatan. Atirtam PIC18-ra, az alabbiakban l
athatod. Csak kicsit hosszabb mint AVR-en:
(Ja es meg valami: a 10MHz-es PIC18 10MIPS-et tud)
mul32_64
movlw 32+1 ;miltiplicand is 32 bits wide
movwf LOOPCOUNT
clrf AARGB3
clrf AARGB2
clrf AARGB1
clrf AARGB0
clrc
_mul32_1:
rrf AARGB0,f
rrf AARGB1,f
rrf AARGB2,f
rrf AARGB3,f
rrf AARGB4,f
rrf AARGB5,f
rrf AARGB6,f
rrf AARGB7,f
bnc _mul32_2
movf BARGB3,w
addwf AARGB3,f
movf BARGB2,w
addwfc AARGB2,f
movf BARGB1,w
addwfc AARGB1,f
movf BARGB0,w
addwfc AARGB0,f
_mul32_2:
decfsz LOOPCOUNT,f
goto _mul32_1
return
Konkluzio:
Aki most kezd uj projektet, es van ideje uj kontroller megtanulasara
valassza az AVR csaladot, nem fog csalodni. Ha nincs ido az uj csalad
elsajatitasara, vagy csak ugyis par darab kell(ar!), nem kritikus a progi
sebessege, vagy van a fiokban valami mas, akkor hasznaljuk azt amit
mar ismerunk, es be van jaratva. (Persze, csak akkor, ha nem akarunk
sokat szivni!)
Udv.
Imre
More information about the Elektro
mailing list