Autor Tema: mi codigo no funciona pic16f819 con XC8  (Leído 1187 veces)

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

Desconectado Giovannito

  • PIC10
  • *
  • Mensajes: 9
mi codigo no funciona pic16f819 con XC8
« en: 27 de Agosto de 2015, 22:48:34 »
He migrado del hitech al XC8, y ahora tengo fallas en el codigo siguiente:


Código: [Seleccionar]

#include <xc.h>     


//config bits that are part-specific for the PIC16F1829
#pragma config FOSC=XT, WDTE=OFF, PWRTE=OFF, MCLRE=ON, CP=OFF, CPD=OFF, BOREN=ON
#pragma config WRT=OFF, LVP=OFF

#define _XTAL_FREQ 4000000 // Indicamos a que frecuencia de reloj esta funcionando el micro

void main(void)
{
   ADCON1 = 0x06;
   TRISB = 0b00000000; // Configuro puerto B como salidas
   TRISA = 0b0000001;
   
     while (1) // Bucle infinito
     {
 
         if(PORTBbits.RB4 == 0)
         {
             while(PORTBbits.RB4==0);
             if(PORTBbits.RB1 == 0)
             {
                 PORTBbits.RB1 = 1;
             }
             else
             {
                 PORTBbits.RB1 = 0;
             }
         }
         if(PORTAbits.RA0 == 0)
         {
             while(PORTAbits.RA0 == 0);
             if(PORTBbits.RB1 == 0)
             {
                 PORTBbits.RB1 = 1;
             }
             else
             {
                 PORTBbits.RB1 = 0;
             }
         }
         PORTBbits.RB0^=1;
         __delay_ms(100);
     } 
}

no funciona, debe parpadear RB0, y debe RB1 debe recibir ordenes de los botones RB4 y RA0
RUEGO VUESTRA COLABORACIÒN

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: mi codigo no funciona pic16f819 con XC8
« Respuesta #1 en: 27 de Agosto de 2015, 22:57:08 »
De entrada te digo que RB4 lo tienes configurado como salida y no como entrada, por eso el codigo no funciona.

Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: mi codigo no funciona pic16f819 con XC8
« Respuesta #2 en: 27 de Agosto de 2015, 23:04:24 »
Ademas de lo que dijo RALF2
El PIC tiene muchas mas cosas.

Los pines del puertoB desde RB4 a RB7, pueden ser analogicos, desde comienzo inician como analogicos, asi que es tu deber ponerlos como digital. El PORTA tambien tiene el mismo tema.

ANSELA=0;  // PORTA Todo digital
ANSELB=0;  // PORTB Todo digital

Al menos aca el registro ADCON1 no tiene nada que ver con los puertos.
Por otra parte ahora los puertos tiene unos cuantos registros mas, como pull-up y uno que se llama LATx

Para leer el pin utilizas PORTx y para escribir el pin LATx

Código: C
  1. #include <xc.h>      
  2.  
  3. //config bits that are part-specific for the PIC16F1829
  4. #pragma config FOSC=XT, WDTE=OFF, PWRTE=OFF, MCLRE=ON, CP=OFF, CPD=OFF, BOREN=ON
  5. #pragma config WRT=OFF, LVP=OFF
  6.  
  7. #define _XTAL_FREQ 4000000 // Indicamos a que frecuencia de reloj esta funcionando el micro
  8.  
  9. void main(void)
  10. {
  11.  
  12.    TRISB = 0b00010000; // Configuro puerto B como salidas, RB4 como entrada
  13.    TRISA = 0b00000001; // RA0 como entrada
  14.    ANSELA = 0;
  15.    ANSELB = 0;
  16.    
  17.      while (1) // Bucle infinito
  18.      {
  19.  
  20.          if(PORTBbits.RB4 == 0)
  21.          {
  22.              while(PORTBbits.RB4==0);
  23.              LATBbits.LATB1^=1;
  24.          }
  25.          if(PORTAbits.RA0 == 0)
  26.          {
  27.              while(PORTAbits.RA0 == 0);
  28.              LATBbits.LATB1^=1;
  29.          }
  30.          LATBbits.LATB0^=1;
  31.          __delay_ms(100);
  32.      }  
  33. }

Desconectado Giovannito

  • PIC10
  • *
  • Mensajes: 9
Re: mi codigo no funciona pic16f819 con XC8
« Respuesta #3 en: 27 de Agosto de 2015, 23:14:34 »
RALF2 Y KILLERJC.

Les agradezco mucho, efectivamente, ahora funciona excelente. perdon por quitarles su tiempo, pero esto me hizo sufrir, y debo recurrir a los expertos. Nuevamente muchas gracias. ((:-))