gracias por responder, si me han funcionado algunos programas en 18f452 que hice normalmente para 16f877a con tan solo cambiar #include <16f877a.h> por #include <18f452.h> y agregar los fuses necesarios. el problema radica en que la interrupcion externa por rb0 no me funciona, asi sea un programa sencillo si podrias ayudarme con algun ejemplo de interrupcion externa que funcione con 18f452 me seria de gran ayuda...
este es el programa que hice y que funciona perfectamente con pic16f877a
//#include <16f877a.h>
#include <18f452.h>
#device ADC=10
#fuses XT,NOWDT,NOPUT,NOLVP,NOWRT,NOPROTECT
#use delay(clock=4000000)
#include <lcd.c>
#use fast_io(B)
#byte portb = 6
#bit rb7 = 6.7
#bit rb0 = 6.0
#bit intf = 0x0b.1
int count=0;
int x=0;
int1 i=0;
int16 adc,set;
float temp,tmax,tmin,tref,tprom;
#int_EXT
EXT_isr()
{i=rb0;
while(!i)
{i=rb0;
x++;
if(x==3){
x=0;
tref = tref+0.25;
if(tref>40)
{tref=35;}}
lcd_gotoxy(1,1);
lcd_putc("Tref = ");
lcd_gotoxy(1,2);
printf(lcd_putc," %4.2f%cC ",tref,223);
delay_ms(300);}
x=0;
delay_ms(400);
}
#int_TIMER0
void TIMER0_isr()
{set_timer0(3400);
set_adc_channel(0);
delay_us(40);
adc = read_adc();
if(adc>20 && adc<144)
{count++;
temp =temp + (500.00*adc/1024.0);
if(count==6)
{tprom =temp/6.00;
temp=0;count=0;}
}
}
void main()
{
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_8);
set_timer0(3400);
SETUP_ADC(ADC_CLOCK_INTERNAL);
SETUP_ADC_PORTS(ALL_ANALOG);
SET_ADC_CHANNEL(0);
delay_us(40);
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_EXT);
ext_int_edge(H_TO_L);
lcd_init();
output_b(0);
lcd_putc("\f");
tref=37.5;
temp=0;
while(true)
{
tmax=tref+0.3;
tmin=tref-0.3;
if(tprom>tref)
{output_low(PIN_C3);output_low(PIN_C2);}
if(tprom<=tmin)
{output_high(PIN_C3);output_high(PIN_C2);}
if(tprom>=tmax)
{output_low(PIN_C3);output_low(PIN_C2);}
lcd_gotoxy(1,1);
lcd_putc("Temp = ");
lcd_gotoxy(1,2);
printf(lcd_putc," %4.2f%cC ",tprom,223);
delay_ms(300);
}
}