TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: mariano_pic en 13 de Junio de 2015, 14:35:46

Título: Problema XC8 y PIC18F2550 en MplabXC v3
Publicado por: mariano_pic en 13 de Junio de 2015, 14:35:46
El codigo donde se manifiesta el error es muy sencillo, de ahi lo raro:

  
Código: [Seleccionar]
#define _pic18f2550// he probado con esto y sin esto, da igual
#include <xc.h>
#pragma config FOSC = XT_XT,  PWRT=ON, WDT=OFF, PWRT = ON, BOR = ON, WDT = OFF, LVP = OFF
#define _XTAL_FREQ  4000000



void OutPutBits(const unsigned short dat ){  
    if(dat == 0x80){PORTBbits.RB4=1;}else{PORTBbits.RB4=0;}
    if(dat == 0x50){PORTBbits.RB5=1;}else{PORTBbits.RB5=0;}    
}


void main(void){
TRISBbits.TRISB4=0; TRISBbits.TRISB5=0;
PORTBbits.RB4=0; PORTBbits.RB5=0;
OutPutBits(0x80);

while(1);
    
}

Resultado:
PORTB pin B4 bajo
PORTB pin B5 bajo

Deberia de dar:
PORTB pin B4 alto
PORTB pin B5 bajo

si invierto el orden de la funcion:
Código: [Seleccionar]
void OutPutBits(const unsigned short dat ){  
    if(dat == 0x80){PORTBbits.RB4=1;}else{PORTBbits.RB4=0;}
    if(dat == 0x50){PORTBbits.RB5=1;}else{PORTBbits.RB5=0;}    
}
por
Código: [Seleccionar]
void OutPutBits(const unsigned short dat ){    
    if(dat == 0x50){PORTBbits.RB5=1;}else{PORTBbits.RB5=0;}  
    if(dat == 0x80){PORTBbits.RB4=1;}else{PORTBbits.RB4=0;}  
}
entonces el resultado es correcto

El problema es que si necesito redefinir los puertos sin tocar la funcion usando etiquetas, puede presentarse el error.

  sera que estoy haciendo algo mal?


Título: Re: Bug XC8 y PIC18F2550 en MplabXC v3
Publicado por: pablomanieri en 13 de Junio de 2015, 14:48:26
En esos pic, para usar como salidas se usan los registros LAT.. (pe. LATBbits.LATB4), y para leer como entradas se usan los registros PORT.... (pe. PORTBbits.RB4)
Por ahí puede venir el problema.
Saludos
Título: Re: Bug XC8 y PIC18F2550 en MplabXC v3
Publicado por: mariano_pic en 13 de Junio de 2015, 14:56:03


   ok, he probado a cambiar por latb y parece que funciona gracias.