Lo he hecho esta es mi cabecera del .h:
#define LCD_Filas 2 // Número de filas del LCD: 1,2
#define LCD_Columnas 20 // Número de columnas del LCD: 8,16,20
#define MAX_EVENTOS 50 // Tamaño máximo de la cola de trabajo
#define USA_TIMER_1 // Selección del timer a utilizar
#define USA_PUERTO_B // Selección del puerto a utilizar
#define USA_PUERTO_ALTO // Selección del byte a utilizar
#define MIPS 30 // Millones de instrucciones por segundo
//#define UsaUSART // Se define sólo si vamos a usar la USART y el LCD a la vez
#define BACK_LCD LATDbits.LATD0
#define TRIS_BACK_LCD TRISDbits.TRISD0
//#define TRIS_LCD_RW TRISBbits.TRISB14
/************************************************************************/
/* DEFINICIONES GENERALES */
/************************************************************************/
#define SalidaLCD 1
#define SalidaUSART 0
#ifdef USA_PUERTO_B
#define LCD LATB // Todo el puerto
#define TRISx TRISB // Tris
#define CheckPinEN() asm("btsc.w _LATB,#%0"::"i"(PosEnable)) // Chequea bit Enable
#define LeePuerto() asm("mov.w LATB,w2") // Carga puerto en w2
#define EscribePuerto() asm ("mov.w w0,LATB") // Vuelca contenido de w0 al puerto
#define BajaPinEN() asm ("bclr.w _LATB,#%0"::"i" (PosEnable)) // Baja el pin Enable
#ifdef USA_PUERTO_ALTO
#define POWER_LCD LATBbits.LATB7
#define LCD_EN LATBbits.LATB12 // Enable
#define LCD_RS LATBbits.LATB13 // Selección Registro
#define LCD_RW LATBbits.LATB14
#else
#define LCD_EN LATBbits.LATB4 // Enable
#define LCD_RS LATBbits.LATB5 // Selección Registro
#define LCD_RW LATBbits.LATB6
#endif
#endif
Ademas he cambiado la inicializacion del puerto y la mascara
#ifdef USA_PUERTO_ALTO
#define MASCARA 0x807F
#define PosEnable 12
#else
#define PosEnable 4
#define MASCARA 0xFF80
#endif
y la el tris
TRISx = (TRISx & MASCARA);
y en el main
#include <P30F6014A.H>
#define __30F6014A_H
#include "LCD_HD44780.h"
_FOSC(CSW_FSCM_OFF & XT_PLL8); // Con oscilador 8 y PLL a 16, reloj a prueba de errores
_FWDT(WDT_OFF & WDTPSA_512 & WDTPSB_16); // Enable WDT);
_FBORPOR(PBOR_ON & BORV_42 & PWRT_64 & MCLR_EN);
char yo[] = {'N','o','c','t','u','r','n','o',' ','-',' ','2','0','0','6',' '};
const elrebujito[] = {'e','l','r','e','b','u','j','i','t','o','.','e','s',' '};
int main(void){
unsigned char i;
ADPCFG = 0xffff;
POWER_LCD = 0;
delay_ms(100);
POWER_LCD = 1;
LCD_Inicializacion();
LCD_Goto (1,1);
LCD_EscribeCadena(yo);
LCD_Goto (4,2);
LCD_EscribeConstante(elrebujito);
while(1);
}
Tengo un 30f6014 con oscilador de 8 y pll (como puedes ver de 8) en que fallo (perdona la paliza)