Comportamiento de puerto extraño (PIC24F)

2

Estaba intentando que el puerto IO funcionara con este código:

#include "p24Fxxxx.h" // This header will choose the right device header

#define FCY 16000000UL // Running at 16 MIPS = Fosc/2

#include <PIC24F_plib.h>
#include <libpic30.h>

// Configuration setup
_CONFIG1( FWDTEN_OFF & GWRP_OFF & GCP_OFF & JTAGEN_OFF & ICS_PGx3 )
_CONFIG2( FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_FRCPLL & I2C1SEL_PRI & PLL96MHZ_ON & PLLDIV_NODIV & IESO_OFF & IOL1WAY_OFF );
_CONFIG3( SOSCSEL_IO );

int main() {
    TRISB = 0;
    PORTB = 0;

    PORTBbits.RB0 = 1;
    PORTBbits.RB4 = 1;

    while(1) {
        __delay_ms( 200 );
    }
}

Así que me separé de la instrucción __delay_ms , y eché un vistazo a los registros LATB:

(Como se muestra en la foto, solo LATB4 está activado, confirmado con un multímetro)

Además, si comento la línea PORTBbits.RB4 = 1; , LATB0 está activado (pero no LATB4 )

¿La segunda llamada la sobrescribe de alguna manera? Tal vez, porque PORTB = 0b10001; solo funciona.

Estoy usando un PIC24FJ64GB002, MPLAB X, C30 y un PICkit 3. Me doy cuenta de que MPLAB X no es 100% estable, pero algo este simple debería funcionar.

Si algún gurú de PIC pudiera apuntarme en la dirección correcta, sería increíble.

    
pregunta Seb Holzapfel

2 respuestas

2

En lugar de PORTxbits.RBx , use LATxbits.LATx , cuando configure / restablezca sus pines para evitar este problema.

    
respondido por el Count Zero
2

Escribir en un elemento de un campo de bits generalmente hará que se realice una operación de lectura-modificación-escritura. En particular, la línea

PORTBbits.RB4 = 1;

tendrá el mismo comportamiento que

PORTB = PORTB | (1<<4);

Mi PIC está un poco oxidado, pero creo que leer PORTB devolverá el estado actual de los pines, en lugar del último valor escrito?

    
respondido por el avakar

Lea otras preguntas en las etiquetas