Autor Tema: Otro ejemplo simple en C que no funciona  (Leído 2192 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Otro ejemplo simple en C que no funciona
« en: 25 de Mayo de 2009, 13:01:49 »
Buenas tardes a todos de nuevo, sigo intentando aprender C y vuelvo a atrancarme de nuevo. Estoy utilizando ejemplos que hay en el foro, pero al cambiar de micro, no funciona ¿qué ocurre?. El ejemplo es el siguiente:

//   Notas: Parpadeo de cuatro leds cada 0.5s de cuatro formas diferentes:
//            RB0 -> con la funcion output_high()/output_low()
//            RB1 -> definiendo el pin RB1
//            RB2 -> con la funcion output_bit()
//            RB3 -> con la funcion bit_set()/bit_clear()
//////////////////////////////////////////////////////////////////////////////////

#include <16f84a.h>            //pic a utilizar

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES PUT                      //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading


#use delay (clock=4000000)         //Fosc=4Mhz
#use fixed_io(b_outputs=PIN_B0,PIN_B1,PIN_B2,PIN_B3) //pin de salida portb
#bit RB1=0x106.1               //definicion pin potrb B1
#byte portb=06

///PROGRAMA
void main(void)
{
   set_tris_b(0x00);            //puerto b como salida

   RB1=0;                     //valor inicial B1 para que los led"s se iluminen igual
   do{
      output_high(PIN_B0);      //led"s on
      RB1=!RB1;
      output_bit(PIN_B2,1);
      bit_set(portb,3);
      delay_ms(500);

      output_low(PIN_B0);         //led"s off
      RB1=!RB1;
      output_bit(PIN_B2,0);
      bit_clear(portb,3);
      delay_ms(500);
      }while(TRUE);            //bucle infinito
}


¿qué ocurre al uilizar el 16F84a?

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Otro ejemplo simple en C que no funciona
« Respuesta #1 en: 25 de Mayo de 2009, 13:25:29 »
Sigo haciendo pruebas y aparte de no funcionar en el 16F84a, me he dado cuenta que para el micro para el cual vszener hizo el programa, funciona correctamente, pero si cambio el micro al 16F877A, el tiempo de intermitencia escasi de 2 segundos en lugar de 0.5 segundos. ¿alguien sabe que ocurre?

De nuevo os doy las gracias a todos

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Otro ejemplo simple en C que no funciona
« Respuesta #2 en: 25 de Mayo de 2009, 13:32:32 »
Primero, debes tener en cuenta que los registros no se encuentran en las mismas direcciones de memoria en todos los pics.
Tienes un error en la linea
#bit RB1=0x106.1       
esta no es la direeccion del pin RB1 en el pic16f84a, debería ser:
bit RB1=0x06.1.
Con respecto al tiempo que se encuentran encendidos los leds, si lo estas simulando isis, verifica que tengas configurada la misma frecuencia de reloj que estas compilando el programa

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: Otro ejemplo simple en C que no funciona
« Respuesta #3 en: 25 de Mayo de 2009, 13:34:19 »
yo estoy haciendo ejemplo con led en ccs deja probar ese codigo pero usando el pic16f268a y te comento como me fue y te muestro la simulacion en proteus.

Saludos y a la brevedad te estoy mostrando el ejemplo por si o por no que ese un exito o un fracaso la simulacion.
Atten.
Alexander Santana.
Barcelona-Venezuela.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: Otro ejemplo simple en C que no funciona
« Respuesta #4 en: 25 de Mayo de 2009, 13:37:53 »
Primero, debes tener en cuenta que los registros no se encuentran en las mismas direcciones de memoria en todos los pics.
Tienes un error en la linea
#bit RB1=0x106.1       
esta no es la direeccion del pin RB1 en el pic16f84a, debería ser:
bit RB1=0x06.1.
Con respecto al tiempo que se encuentran encendidos los leds, si lo estas simulando isis, verifica que tengas configurada la misma frecuencia de reloj que estas compilando el programa

en eso tiene mucha razon el colega pablo tienes que estar pendiente de la frecuencia y ademas los registros en toidos los pic no son iguales asi que revisa y nos comentas ramirez.
Atten.
Alexander Santana.
Barcelona-Venezuela.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Otro ejemplo simple en C que no funciona
« Respuesta #5 en: 25 de Mayo de 2009, 17:15:58 »
Gracias de nuevo por vuestra colaboración, ahora si funcionan correctamente todo, era un problema de frecuencia y de dirección de registro. Pero ahora me surge otra duda, todo funciona correctamente si en el programa pongo una velocidad de 1 MHZ, que es la que esta en proteus por defecto, pero si vemos la hoja de datos vemos una velocidad para el 16F877 de 20 MHz, pues si ponemos esta velocidad tanto en el programa como en la simulación de proteus, funciona a la velocidad adecuada la intermitencia (0.5 segundos), pero cuando tiene que estar en estado bajo de vez en cuando aparece algún bit en estado algo ¿a qué puede er debido esto?

Gracias a todos de nuevo por vuestra colaboración.