El codigo donde se manifiesta el error es muy sencillo, de ahi lo raro:
#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:
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
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?