Sida 1 av 1

Resultat ut från macro PIC16f887

Postat: 28 december 2009, 00:58:43
av Anders_Peter
Hej

Om man har ett macro så 'skickar' man in värden till macrot, men hur är bästa sätt att hantera restultat ut från macrot på?

Ett exempel på macro:

Kod: Markera allt

;
;********************** Variabeltilldelningar *******************
;Generella variabler	
Variabler_Gen	UDATA_SHR
Test_1	RES 1	;Variabel för att testa macro				
Test_2	RES 1	;Variabel för att testa macro
;***************************************************************

;********************** Test med macro *****************************
;Ett macro
Testa_Macro macro Värde_1, Värde_2
     	movlw Värde_1	;Hämta in första värdet till macro...
     	movwf Test_1	;... och skriv till Test_1	
     	movlw Värde_2	;Hämta in andra värdet till macro...
     	movwf Test_2	;...och skriv till Test_2
	endm
;*******************************************************************

;********************* Huvudprogram ********************************
Main 
		;Anropa macro
		Testa_Macro .9, .76
		end 		
;*****************************************
Om jag inuti macrot skriver:

movlw .93 ;Ett värde för att testa
movwf Result_ut ;Skriv resultatet till denna variabel

och deklarerar Result_ut som en variabel, så kan jag
använda innehållet i Result_ut efter anrop av macrot, men om jag inte vill
deklarera en variabel för att få ut ett eller flera resultat
ur macrot, finns det något annat sätt än att inuti macrot skriva till en deklarerad variabel?

Re: Resultat ut från macro PIC16f887

Postat: 28 december 2009, 01:12:51
av sodjan
Ett macro ger aldrig ett "resultat ut".
Du har nog inte riktigt förstått hur ett macro fungerar.
Tror du att det är något som finns i själva PIC'en ??
Ett macro genererar bara ren kod och det är ingen skillnad på den
och kod som du lika väl hade kunnat skriva direkt.

Re: Resultat ut från macro PIC16f887

Postat: 28 december 2009, 01:47:49
av Anders_Peter
Min tanke var att kunna ha ett 'bibliotek' med olika macron som har en färdig funktion man kan lyfta in i sin kod och därmed slippa att deklarera variabler utanför macrot.

Med tanke på ovanstående tänkte jag att det kanske fanns någon 'funktion' utan att behöva deklarera för att få ut ett resultat, men om det är samma som att skriva kod direkt så förstår jag att det inte finns något 'resultat ut'.

Nej, jag förstår att macro inte är något som finns i PIC:en.

Tack för svaret!

Re: Resultat ut från macro PIC16f887

Postat: 28 december 2009, 09:06:14
av AndersG
Min tanke var att kunna ha ett 'bibliotek' med olika macron som har en färdig funktion man kan lyfta in i sin kod och därmed slippa att deklarera variabler utanför macrot.
Att ha makrobibliotek är helt rätt, men kan du utveckla litet vad du vill göra? Som sodjan skriver så är makrot bara en sök/byt funktion eg. Som kan underlätta arbetet och göra koden lättare att läsa.

Re: Resultat ut från macro PIC16f887

Postat: 28 december 2009, 21:48:10
av Anders_Peter
I exempelvis Siemens styrsystem finns möjlighet att programmera 'svarta lådor' block som innehåller en färdig kod som man kan lyfta in i sin övriga kod, dessa kan programmeras som så att man har 'insignaler' och 'utsignaler' till/från detta block. Om man vill kan man inuti detta block använda sig av enbart lokala variabler, När man använder sig av enbart lokala variabler behöver man aldrig tänka på att de koliderar med övriga variabler utanför blocket.

Det var detta jag hade i åtanke att det kanske gick att göra på liknande sätt.

Det jag menar med att skicka in värden till macrot är Värde_1 och Värde_2 i denna rad:
Testa_Macro macro Värde_1, Värde_2.


Har förresten en fråga till om macro:

Om jag byter plats på macrot och anropet till macrot, alltså har anropet före macrot så får jag följande fel: Error[122] E:\!\ELEKTRONIK\PIC16F887\TEST887.ASM 73 : Illegal opcode (.9)

Vad kan detta bero på?, använder MPLAB IDE v8.10

Re: Resultat ut från macro PIC16f887

Postat: 28 december 2009, 21:56:26
av v-g
Ett makro skapar ju bara kod på det ställe du anropar macrot. Dvs funktionellt är det exakt samma som att skriva koden i macrot. Där du "anropar" macrot säger du egentligen bara "skriv ut koden här".

Du kan "skicka in" och "få ut" data ur macrot på samma sätt som du skickar in datat i "anropet". Dina "Värde_1" &"2" kan lika gärna vara ett variabelnamn.

Det som är fiffigt med macros är om man gör samma sak på många olika ställen så kan det bli mycket överskådligare med macro. DOCK ska man alltid överväga mellan macro och funktion/subrutin.

Re: Resultat ut från macro PIC16f887

Postat: 28 december 2009, 22:15:13
av sodjan
> Om jag byter plats på macrot och anropet till macrot, alltså har anropet före macrot så får jag
> följande fel: Error[122] E:\!\ELEKTRONIK\PIC16F887\TEST887.ASM 73 : Illegal opcode (.9)
> Vad kan detta bero på?,

En vild gissning...
Kanske för att du försöker använda macrot innan det är definierat ?
Eller också så förstår jag inte frågan riktigt...

> Om man vill kan man inuti detta block använda sig av enbart lokala variabler,

Läs på om LOCAL (kap 4.44 i MPASM manualen).

Förresten, du har läst "Chapter 7. Macro Language" också, eller hur ?

Re: Resultat ut från macro PIC16f887

Postat: 28 december 2009, 22:41:25
av Anders_Peter
Du har förstått rätt Sodjan, ok så det är alltså därför jag får felkoden.

Manual till MPASM, hmm visste inte att det fanns manual utöver hjälpen i MPASM, får väl ta på dumstruten och skämmas en stund...och sedan läsa denna manual som jag nu har laddat hem.

Tack för infon!

Re: Resultat ut från macro PIC16f887

Postat: 28 december 2009, 22:49:02
av sodjan
Japp, MPASM har ju lite svårt att använda något (t.ex ett macro) som den inte känner till.
En intressant följdfråga är *varför* du provade att byta plats på macrot och anropet ?
Vad var det du ville uppnå med det ?

Och jo, den tryckta (tja, PDF då) manualen är lite enklare när man läser in sig
på något nytt. Online hjälpen i MPLAB fungerar helt OK när man redan vet
vad man letar efter, så att säga.

Re: Resultat ut från macro PIC16f887

Postat: 28 december 2009, 22:54:52
av Anders_Peter
Jag ville helt enkelt testa att göra ett macro och då skrev jag vid första försöket anropet först och sedan macrot och då fick jag felkoden, provade att byta plats mellan anrop och macro och ja då funkade det ju.

Så det var helt enkelt 'när man inte vet vad man gör så läs det man kan hitta i hjälpen och testa tills det funkar'.

Re: Resultat ut från macro PIC16f887

Postat: 29 december 2009, 07:49:05
av AndersG
Jo, det är så att du inte kan använda ett makro före du definierat det. Så är det i alla språk.