Hoi,
Ik probeer nu in asm een macro te maken waarmee ik standaard een delay kan invoeren van een meervoud van 10.


	LIST p=16F628a
	#include "P16F628A.INC"
	__config _INTRC_OSC_NOCLKOUT & _LVP_OFF & _PWRTE_ON & _MCLRE_ON & _WDTE_OFF  

; CONSTANT's
		#define LED		PORTB,4


; MACRO's
	DELAYMS	MACRO	ms
		local     dly1,dly2
		variable  dl,tr1,tr2,tr3

			pagesel $
			MOVWF	dl
			movlw	ms/.10
	
			MOVWF		tr3	
	       dly2	MOVLW		.13
			MOVWF		tr2
			CLRF		tr1
	       dly1	DECFSZ		tr1, f
			  GOTO		dly1
			DECFSZ		tr2, f
			  GOTO 		dly1
			DECFSZ		tr3, f
			  GOTO		dly2

			MOVFW	dl		; Laden huidige W
			ENDM   

; VARIABLES
	UDATA
dl101	res 1
dl102	res 1
dl103	res 1

; INIT
		org     0x000
		
		clrf	PORTB
		banksel	TRISB
		clrf	TRISB
		banksel PORTB

; MAIN
main	        bsf		LED
		DELAYMS	.200
		bcf		LED
		DELAYMS .200
		GOTO 	main

		
		END

Alleen wanneer ik dit run, gaat de led aan maar niet meer uit. (terwijl wanneer ik de delaylussen in een subroutine zet en die dan roep vanaf de macro doet hij het wel.) Weet iemand wat ik fout doe?

Ik roep de code altijd aan in een subroutine vanuit een macro...
Dat is efficienter, omdat er veel minder code wordt gegenereerd, zeker als je de delay vaak gebruikt.

Ik zie het nut van een macro met 1 over te dragen variabele ook niet echt. Je zou helemaal geen macro moeten gebruiken hier.

Waarom het niet werkt is volgens mij omdat je dl, tr1, tr2 en tr3 niet als RAM-lokaties gedefinieerd hebt, maar als assembler variabelen.