TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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:
#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?
-
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
-
ok, he probado a cambiar por latb y parece que funciona gracias.