Hola amigos estoy realizando un programa para una LCD el caso es que lo pruebo en el proteus y funciona sin problemas, pero lo paso al pic y no hay manera de hacerlo funcionar correcto podeis echarle un vistazo al programa?
#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES BROWNOUT //Reset when brownout detected
#FUSES LVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
#include "I:\Menu\menu.h"
#include <lcd.c>
#include <ctype.h>
#include <string.h>
//-----------------------------------E/S PIC----------------------------------
#define subir bit_test(input_b(),0)
#define bajar bit_test(input_b(),1)
#define aceptar bit_test(input_b(),4)
#define cancelar bit_test(input_b(),5)
//---------------------------------DEFINICIONES-------------------------------
//****************************Definicion de Funciones*************************
void MENU_CERO(void);
void MENU_UNO(void);
void MENU_DOS(void);
void MENU_TRES(void);
//##############################################################################
int menuLCD=0,i=0,t=0,r=0;
int menu=0,LCDACTIV=0;
long int tiempo = 250;
#int_TIMER0
TIMER0_isr()
{
i++;
if (i>244)
{
i=0;
t++;
if(t=244)
{
t=0;
r++;
if(r>1)
{
r=0;
LCDACTIV=0;
menu=0;
}
}
}
}
//##############################################################################
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
set_tris_b(0xFF);
lcd_init();
lcd_gotoxy (1,1);
Printf(lcd_putc,"PRESENTACION");//
delay_ms(500);
while (menu!=10)
{
while (LCDACTIV==0 && menu==0)
MENU_CERO();
while (LCDACTIV==1 && menu==1)
MENU_UNO();
while (LCDACTIV==1 && menu==2)
MENU_DOS();
while (LCDACTIV==1 && menu==3)
MENU_TRES();
}
}
//##############################################################################
void MENU_CERO()
{
lcd_init();
lcd_gotoxy (1,1);
Printf(lcd_putc,"FUERA DE MENU");//
delay_ms(500);
if (aceptar==0)
{
menu=1;
LCDACTIV=1;
delay_ms(tiempo);
}
if (cancelar==0)
{
menu=3;
LCDACTIV=1;
delay_ms(tiempo);
}
}
void MENU_UNO()
{
lcd_init();
lcd_gotoxy (1,1);
Printf(lcd_putc,"Es el menu 1");//
lcd_gotoxy (1,2);
Printf(lcd_putc,"detras alante");
delay_ms(500);
while (menu==1)
{
if (cancelar==0)
{
LCDACTIV=0;
menu=0;
delay_ms(tiempo);
}
if (aceptar==0)
{
LCDACTIV=1;
menu=2;
delay_ms(tiempo);
}
}
}
void MENU_DOS(void)
{
lcd_init();
lcd_gotoxy (1,1);
Printf(lcd_putc,"Es el menu 2");//
lcd_gotoxy (1,2);
Printf(lcd_putc,"detras alante");
delay_ms(500);
while (menu==2)
{
if (cancelar==0)
{
LCDACTIV=1;
menu=1;
delay_ms(tiempo);
}
if (aceptar==0)
{
LCDACTIV=1;
menu=3;
delay_ms(tiempo);
}
}
}
void MENU_TRES(void)
{
lcd_init();
lcd_gotoxy (1,1);
Printf(lcd_putc,"Es el menu 3");//
lcd_gotoxy (1,2);
Printf(lcd_putc,"detras alante");
delay_ms(500);
while (menu==3)
{
if (cancelar==0)
{
LCDACTIV=1;
menu=2;
delay_ms(tiempo);
}
if (aceptar==0)
{
LCDACTIV=0;
menu=0;
delay_ms(tiempo);
}
}
}