Makrofråga, MPASM

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Makrofråga, MPASM

Inlägg av AndersG »

Följande makro bryter ut oktetter ur ett 32-bitars tal:

Kod: Markera allt

;**********************************************************************
; Helper macro for 32-bit numbers. Puts byte number 'byte' of a 32-bit literal 'var'
; into register 'reg'
;
movbyte	macro   reg,var,byte
		movlw   (var >>(D'08' * byte) & H'FF')
		movwf	reg
        endm
Det funkar bra så länge jag har "var" som ett tal, men om jag har ett uttryck som:

#define AFACTOR ((.4096 * .1000)/(GVFC * RSENSE * .3600))

Då ballar det ur

Kod: Markera allt

                      00799 
                      00800         MOVBYTE REGB0,AFACTOR,0 
Error[112]  : Missing operator
0138   3000               M                 MOVLW   (((.4096 * .1000)/(.22.2 * .0.01 * .3600)) >>(D'08' * 0) & H'FF')
0139   00??               M                 MOVWF   REGB0
Någon som kan hjälpa mig genom att berätta vad jag gör för fel?
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg av bearing »

Förmodligen går det inte att använda flyttal. Makrot funkar om * 22.2 byts ut till * 111/5, och * 0.01 mot /100.

Det kanske finns något kommando som trunkerar?

EDIT: Det enklaste är väl att skala om konstanterna så att inga decimaler behövs.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Inlägg av AndersG »

Tydligen ej, måste väl göra det manuellt.
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg av bearing »

Om resistansen anges i mΩ istället för Ω, samt om även GVFC skalas om med faktorn tusen blir det såhär:

Kod: Markera allt

		movbyte	REGB+0,((.4096 * .1000000000)/(.22200 * .10 * .3600)) ,0
		movbyte	REGB+1,((.4096 * .1000000000)/(.22200 * .10 * .3600)) ,1
		movbyte	REGB+2,((.4096 * .1000000000)/(.22200 * .10 * .3600)) ,2
		movbyte	REGB+3,((.4096 * .1000000000)/(.22200 * .10 * .3600)) ,3
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Inlägg av AndersG »

Det är ju en tanke. Ett annat tips jag fick är använda PREPIC (http://www.embedinc.com/pic/dload.htm).
Skriv svar