PIC18F4580 - PORTD no se lee correctamente

3

Estoy experimentando un problema extraño con la lectura del valor de PORTD mientras está configurado como una salida. Estoy escribiendo en LATD para establecer la salida en el puerto. La salida real es la que espero (verificada con LED), pero cuando leo el valor de PORTD , los bits 0: 3 siempre vuelven como cero ...

Mi primer pensamiento fue un conflicto con el ADC, pero está apagado, al igual que CCP1, ECCP y PSP, que también comparten pines con el puerto D. El código funciona bien cuando se ejecuta en MPLAB SIM, pero el problema parece que ambos funcionan normalmente y depuración con un PICkit3 ...

Aquí está el código:

void main (void)
{
   char test;

    ADCON0bits.ADON=0;          //Turn adc off
    ADCON1 = 0x0F;              //Turn individual ADC channels off.
    ECCP1CONbits.ECCP1M = 0;    //Turn off ECCP module
    CCP1CON = 0;                //Disable CCP1
    TRISEbits.PSPMODE = 0;      //Turn off PSP module
    TRISD = 0;                  //PORTD to output
    LATD = 0xFF;                //Set all bits high
    Nop();                      //Wait for output to propagate back to PORTD
    test = PORTD;               //test gets 0xF0???
}

Esto es realmente frustrante, sobre todo porque el hardware realmente funciona pero mis auto pruebas siguen dando falsos positivos ...

    
pregunta tsiflana

1 respuesta

2

Creo que son los comparadores que aún están conectados. Intente agregar:

CMCON = 0x07;

Si observa en la tabla CM2: CM0 debe ser 111 (en lugar de 000) para que los pines estén desconectados y sean digitales. Además corresponden a los pines RD0: RD3:

    
respondido por el Oli Glaser

Lea otras preguntas en las etiquetas