Buonasera ragazzi, ho bisogno di voi, sto facendo pratica con gli interruttori e led vi spiego quello che voglio fare:
praticamente voglio che quando verifico (PORTBbits.RB4 == 0) considerando che ho abilitato i pullup della portb il led associato rimanga acceso (inizialmente è spento), quando ri - premo il pulsante deve spegnere il led, su settore zero ho trovato:
if (!BTN2) // se pulsante 2 premuto
{
DelayMs(100); // antirimbalzo
if (!BTN2)
{
LED2=LED2^1; // inverto lo stato del led
}
}
io non riesco ad avere questo risultato, come mai ? E' per il pull up ?
#include <xc.h>
#include "PIC18F4550_config.h"
#include "delay.h"
#include "delay.c"
#include "portb.h"
int main(void) {
LATA = 0x00;
TRISA = 0xFF;
LATB = 0x00;
TRISB = 0xFF;
LATC = 0x00;
TRISC = 0xFF;
LATD = 0x01;
TRISD = 0x00;
LATE = 0x00;
TRISE = 0xFF;
EnablePullups();
for(;{
// PORTB di default vale 1 per via del pullup
if (PORTBbits.RB4 == 0) {
LATDbits.LATD0 = LATDbits.LATD0^1;
}
if (PORTBbits.RB5 == 0) {
LATDbits.LATD1 = 0x01;
LATDbits.LATD5 = 0x01;}
else {
LATDbits.LATD1 = 0x00;
LATDbits.LATD5 = 0x00;
}
if (PORTBbits.RB6 == 0) {
LATDbits.LATD2 = 0x01;
LATDbits.LATD6 = 0x01;}
else {
LATDbits.LATD2 = 0x00;
LATDbits.LATD6 = 0x00;
}
if (PORTBbits.RB7 == 0) {
LATDbits.LATD3 = 0x01;
LATDbits.LATD7 = 0x01; }
else {
LATDbits.LATD3 = 0x00;
LATDbits.LATD7 = 0x00;
}
} // end for
} // end main
aiutatemi.