PIC16F84 ASM

Jan 21, 2005 3 Replies

I dokumentationen til 16F84 står forslag til kode til PUSH og POP til anvendelse hhv før og efter interruptet.



; ***************************************************** PUSH ; Gemmer vigtige registre movwf WBuffer ; save w reg in Buffer swapf STATUS,W ; get status to be saved into w movwf StatBuffer ; move W(indholdet) til StatBuffer return



; ***************************************************** POP ; Genetablerer vigtige registre swapf StatBuffer,W ; swap nibbles in Statbuffer ; and place result into w movwf STATUS ; move indholdet in w to STATUS swapf WBuffer,F ; swap nibbles in WBuffer ; and place it into WBuffer swapf WBuffer,W ; swap nibbles in WBuffer and ; place it in W return



HVORFOR er det liiiige NIBBLES swap'es ved flytningerne ?



Mvh KS


hvis du andvender movf får du en ændring i Z hvad ikke er tilfælde med swapf

det er den eneste logiske forklaring jeg kan komme på

/Carsten

Det har måske noget med flag at gøre. Er der ikke noget med at en PIC sætter Z flaget ved næsten alle instruktioner?

"HKJ" skrev i en meddelelse news:csqd7m$21p$ snipped-for-privacy@news.cybercity.dk...

sætter

Aha ! - når jeg vil 'store' en kopi af W kan jeg blot gøre

movwf WBuffer ; påvirker IKKE Z i STATUS

Ved 'store' af STATUS er det mere specielt:

16F84 har KUN movf til at flytte fra en adresse, men den PÅVIRKER Z i STATUS - så må jeg finde mig i at anvende en SWAP-instruktion, som desværre har den side- effekt, at den swap'er nibblerne også - men det må jeg så bare kompensere for i min 'REstore', og herved får jeg en "troværdig" kopi af STATUS efter min 'REstore', men indtil 'REstore' udføres er den swap'et.

swapf STATUS,W ; påvirker IKKE Z, men swap'er ; nibblerne '32107654' movwf StatBuffer ; påvirker IKKE Z i STATUS, ; men flytter W(32107654) til StatBuffer

Jamen, tak til jer begge - jeg tror den fes ind !

Mvh KS

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required