hallo, kan iemand mij helpen, ik zou graag een kleine codeklavier willen simuleren met maar 4 druktoetsen onderaan zie je mijn code, deze werkt jamergenoeg niet
!
ze staan parallell op de RA2 (voor interrupt) en daar zie je dan tegelijk of het RA4, RA5, RA6 of RA7 is die gedrukt wordt (hoog is ) .
EMPTY kent hij niet, wat kan ik daar dan voor toepassen? hij mag daar enkel vergelijken wanneer alle 4 gevuld zijn in de PUSHED[4] !
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
__CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS & UNPROTECT & UNPROTECT & BORDIS & IESODIS & FCMDIS);
static unsigned char ra2_counter;
const char CODE[4] = {'A', 'B', 'C', 'D'};
static char PUSHED[4];
static void interrupt isr(void)
{
int i;
if(INTF){ // RA2 External Interrupt Occur
ra2_counter++;
for(ra2_counter = 0; ra2_counter<5; ra2_counter++)
{
if(RB4 == 1)
PUSHED[ra2_counter] = 'A';
else if(RB5 == 1)
PUSHED[ra2_counter] = 'B';
else if(RB6 == 1)
PUSHED[ra2_counter] = 'C';
else if(RB7 == 1)
PUSHED[ra2_counter] = 'D';
}//endrof
}//endfi
else
return;
INTF = 0; // Clear External interrupt flag
}
main()
{
TRISC = 0x00; // Set All on PORTC as Output
TRISA = 0x05; //0b00001111; //RA2 input mode (digital input)
TRISB = 0b11110000; // RB4,5,6,7 zijn inputs ! Is this right?
ANSEL = 0b00000000; // Set PORT AN0 to AN7 digital I/O
ANSELH = 0; // Set PORT AN8 to AN11 as Digital I/O /* Init ADC */
INTE = 1; //enable RA2/INT interrupts
GIE = 1; //enable global interupts
while (1 == 1)
{
if(PUSHED[0] != EMPTY && PUSHED[1] != EMPTY && PUSHED[2] != EMPTY && PUSHED[3] != EMPTY)
{
if(CODE == PUSHED)
PORTC = 0x02; // second led must light up
else if(CODE != PUSHED)
PORTC = 0x03; // 2 leds turn on
}//endfi
}//endelihw
}

ze staan parallell op de RA2 (voor interrupt) en daar zie je dan tegelijk of het RA4, RA5, RA6 of RA7 is die gedrukt wordt (hoog is ) .
EMPTY kent hij niet, wat kan ik daar dan voor toepassen? hij mag daar enkel vergelijken wanneer alle 4 gevuld zijn in de PUSHED[4] !
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
__CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS & UNPROTECT & UNPROTECT & BORDIS & IESODIS & FCMDIS);
static unsigned char ra2_counter;
const char CODE[4] = {'A', 'B', 'C', 'D'};
static char PUSHED[4];
static void interrupt isr(void)
{
int i;
if(INTF){ // RA2 External Interrupt Occur
ra2_counter++;
for(ra2_counter = 0; ra2_counter<5; ra2_counter++)
{
if(RB4 == 1)
PUSHED[ra2_counter] = 'A';
else if(RB5 == 1)
PUSHED[ra2_counter] = 'B';
else if(RB6 == 1)
PUSHED[ra2_counter] = 'C';
else if(RB7 == 1)
PUSHED[ra2_counter] = 'D';
}//endrof
}//endfi
else
return;
INTF = 0; // Clear External interrupt flag
}
main()
{
TRISC = 0x00; // Set All on PORTC as Output
TRISA = 0x05; //0b00001111; //RA2 input mode (digital input)
TRISB = 0b11110000; // RB4,5,6,7 zijn inputs ! Is this right?
ANSEL = 0b00000000; // Set PORT AN0 to AN7 digital I/O
ANSELH = 0; // Set PORT AN8 to AN11 as Digital I/O /* Init ADC */
INTE = 1; //enable RA2/INT interrupts
GIE = 1; //enable global interupts
while (1 == 1)
{
if(PUSHED[0] != EMPTY && PUSHED[1] != EMPTY && PUSHED[2] != EMPTY && PUSHED[3] != EMPTY)
{
if(CODE == PUSHED)
PORTC = 0x02; // second led must light up
else if(CODE != PUSHED)
PORTC = 0x03; // 2 leds turn on
}//endfi
}//endelihw
}