pic Jul. 2016 | Page 80

#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