Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

04/07/2010 #1

Avatar de Jadacuor

¿por que ciertos programas en ccs pic funcionan en 16f877a y no en 18f452?
hola a todos, debido a las varias malas experiencias que he tenido al momento de pasar un programa perfectamente funcional en pic16f877a a pic18f452 he decidido crear este post, primero que todo para saber si soy el unico que ha tenido esta clase de inconvenientes y si a alguien mas le ha pasado pues, compartir experiencias y/o posibles soluciones.

a modo de ejemplo cuando intento hacer una interrupcion externa en pic18f452 este no reconoce la interrupcion y cuando la reconoce se queda enclavado, si pruebo con 16f877a todo funciona perfectamente....

bueno espero que alguien ya le haya pasado algo parecido y que pueda ayudarme, ademas porque estoy haciendo un trabajo que tengo que entregar mañana lunes y se me acaba de quemar el unico pic16f877a que tengo y hoy no puedo conseguir otro, la unica esperanza es hacer funcionar el programa en el pic18f452 que me queda.....


muchas gracias
04/07/2010 #2

Avatar de Jadacuor

Respuesta: ¿por que ciertos programas en ccs pic funcionan en 16f877a y no en 18f452?
este es uno de los programas que al pasar a 18f452 no funciona, con la configuracion de los fuses correcta

Código:
#include <16f877a.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_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;}
 }

}

#int_EXT
void 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);
}


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);
}
}

PD: no se porque esta vez no se fusionaron los mensajes
05/07/2010 #3

Avatar de Jadacuor

Respuesta: ¿por que ciertos programas en ccs pic funcionan en 16f877a y no en 18f452?
bueno ya solucione el problema gracias a Noturno que me ayudo en el foro todopic, y por si acaso a alguien tambien le habia sucedido lo mismo pues el error (por lo menos en mi caso) era pensar que el puerto B del 18f452 estaba en la misma direccion que en el 16f877 (0x06) y pues revisando el datasheet me di cuenta que esta es en la direccion 0xf81....saludos
06/07/2010 #4

Avatar de luis_e

Respuesta: ¿por que ciertos programas en ccs pic funcionan en 16f877a y no en 18f452?
Tene en cuenta que los pics 16F y 18F son distintos, no trabajan de la misma forma.
Primero que los registros estan ubicados en posiciones muy distintas que los 16F, y segundo, las interrupciones trabajan de otra forma, porque al contrario que en los 16F, estas tienen prioridad. Igualmente se puede anular esta funcionalidad y trabajar en un modo de compatibilidad con 16F.

Por lo que veo en tu programa, creo que usas el compilador de ccs. Fijate que trae funciones para manipular los puertos de IO, y no es necesario definir los puertos manualmente. Yo la verdad que no uso este compilador, por lo que no estoy seguro de esto, pero lo use una vez y en la documentacion aparecian estas funciones.

Te recomiendo que leas las hojas de datos de los pics... Muchas veces te dan la solucion al problema.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.