#DEFINE es empleado para crear sustituciones dentro del texto del programa que
lo simplifiquen. Nosotros hemos pensado que un cambio de banco es más evidente y
comprensible dentro del programa si se escribe como BANCOx (siendo x el número de
banco) que con la instrucción completa (BCF estado,banco). La forma correcta es
#DEFINE NOMBRE TEXTO, con lo que, cada vez que el compilador encuentre la
orden NOMBRE, la sustituirá por el texto. El problema que se nos plantea es que, si
bien es más flexible que la directiva EQ U, puesto que esta sólo nos permitía asignar un
valor, sólo se nos permite con #DEFINE una línea de texto, y esta debe ser fija.
Este problema se soluciona mediante macro. Esta directiva tiene la siguiente
forma:
NOMBRE macro ARGUMENTO1, ARGUMENTO2, ETC
TEXTO
TEXTO...
endm
De este modo NOMBRE será sustituido como comando por la secuencia completa
definida tras macro hasta endm, y los sucesivos argumentos serán, a su vez, sustituidos
dentro del texto.
En nuestro ejemplo se repetía por tres veces la escritura de un carácter, cada vez
distinto, y sólo se requerían dos líneas para cada una, por lo que no merecía la pena
crear una rutina para simplificarlo. Fue en cada caso sustituida por una única línea del
tipo PON_ASCII 0x40, que sitúa en la LCD el carácter 0x40. Lo hicimos como sigue:
PON_ASCII macro ASCII
MOVLW ASCII
CALL LCD_Caracter
Endm
Otra directiva que ayuda mucho para determinados programas es if. Supongamos,
por ejemplo, que nuestro programa debe estar diseñado para funcionar bajo dos micros,
uno a 2 MHz y otro a 4 MHz. ¿ Cómo solucionaremos entonces el problema de la
necesaria pausa de 5 milisegundos? Podemos sacar una copia modificada del programa
o hacerlo mediante un if. Tenga en cuenta que, en este caso, lo empleamos para que
78