quemar un led con los interruptores en la foto 18F4550

1

Estoy usando la foto 18F4550 con el microchip v8.63 y con el compilador C C18.

Quiero activar el puerto RB3, RB4 y RB5. cuando, presiono respectivamente S1 (interruptor 1), S2 interruptor (S2) y S3 (interruptor 3). en estos puertos (RB3, RB4 y RB5) hay leds conectados, los que se queman cuando presiono S1 o S2 o S2.

Mi primera pregunta es: ¿Cómo puedo transmitir desde mi S1 y S2 y S3 a las puertas (RB3, RB4, RB5)?

Y segundo, ¿cómo puedo habilitar el puerto RB6? Hay una resistencia dependiente de la luz conectada.

Escribí este programa: pero, nada está sucediendo. solo el led 1 sigue.

#include "p18cxxx.h"  
void main(void) 
{ 
    // turn off all LED latches 
    LATDbits.LATD0 = 0; 
    LATDbits.LATD1 = 0; 
    LATDbits.LATD2 = 0; 
    LATDbits.LATD3 = 0; 
    // make port d bits which drive LEDs outputs 
    TRISDbits.TRISD0 = 0; 
    TRISDbits.TRISD1 = 0; 
    TRISDbits.TRISD2 = 0; 
    TRISDbits.TRISD3 = 0; 

    if(PORTBbits.RB3 == 0) {
        LATDbits.LATD0 = 1;     
    }
    if(PORTBbits.RB4 == 0) {
        LATDbits.LATD1 = 1;
    }
    if(PORTBbits.RB5 == 0) {
        LATDbits.LATD2 = 1;
    }
}
    
pregunta yannick

2 respuestas

5

Su rutina main se ejecuta una sola vez. Necesita un bucle, probablemente a partir de la inicialización de los puertos, alrededor de las declaraciones if .

    
respondido por el Martin
3

Varios de los pines que está utilizando también tienen una función de entrada analógica, que está habilitada de forma predeterminada al reiniciar. Por ejemplo, RB3 será la entrada ANC ADC.

Consulte la hoja de datos (página 116) para obtener detalles sobre cómo habilitarlos para E / S digital. Necesitas poner algunos bits en tu programa C; Uso esto para PORTA en el 18F4520:

ADCON1 = 0x0F;
    
respondido por el Leon Heller

Lea otras preguntas en las etiquetas