Nedan skrivna program funkar, dvs när jag trycker på ngn av INT0 eller INT1 så ändras diodrarna som lyser dock inte alltid korrekt. Har 8:a st lysdiodrar där fyra lyser från början, efter man tryckt ska dem släckas och dem andra börja lysa MEN visa gånger så gör dem inte det, dvs dem ändras inte eller snarare dem andra börjar lysa men sen slocknar dem lika fort och dem första fyra som redan lyste när jag tryckte på knappen lyser hela tiden... fortsätter jag trycka kan det vara så här 2 tryckningar till innan den skiftar, sen skiftar den på direkten mellan dem och sen uppkommer det igen... se filmen för bättre förståelse...
frågan är då varför detta uppkommer? Är det för att det är kass avstudsning på knappen? eller vad är det som gör att det uppkommer? Använder en AT90S8515 på 4Mhz
Film: Hur det ser ut...
Jag la in denna för att försöka avstudsa i mjukvaran men det verkar inte spela ngn roll _delay_loop_2(5000);
Kod: Markera allt
#include <avr/io.h>
#include <avr/delay.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
unsigned char led;
SIGNAL(SIG_INTERRUPT0) {
led = PORTB;
PORTB = ~led;
_delay_loop_2(5000);
}
SIGNAL(SIG_INTERRUPT1) {
led = PORTB;
PORTB = ~led;
_delay_loop_2(5000);
}
int main(void)
{
DDRB = 0xFF; /* Use PORTB as outputs (leds) */
DDRD = 0x00; /* Use PORTD as inputs (switches) */
PORTB = 0xF; /* Light four of the eight leds... */
PORTD = 0xFF; /*activate the Pull-Ups...*/
GIMSK = _BV(INT0) | _BV(INT1); /* SET INT0 and INT1 to active */
sei(); /* enable interrupts...*/
for (;;) {}
return 0;
}
//Rille