Gast
#89607
Hi!
Wollte eine kleine Verzögerung zwecks Schalter-Entprellung
einbauen...aber hab so den eindruck als würde es nicht unbedingt
(richtig) funktioneren!
Vielleicht kanns sich ja wer kurz zeit nehmen und sich den code gach
anschaun!
===== Anfang =====
#define F_CPU 4000000
#define USART_BAUD_RATE 19200 // 19200
#define USART_BAUD_SELECT ((F_CPU/(USART_BAUD_RATE*16l))-1)
SIGNAL(SIG_INTERRUPT0) {
delay_ms(50); // Verzögerung von 500ms
USART_transmit('x');
}
void InitSFRs(void)
{
//Timer0 initialization:
// Clock source: System Clock
TCCR0=0x04; // set prescaler to 1:256 (bei 4MHz, 10ms step)
TCNT0=0x62; // Preload Timer0 value for 10ms steps (0x62 = 98)
TIMSK=0x00; // disables timer0 overflow bit (T0IE0=1)
// External Interrupt initialization:
// INT0: ON
MCUCR=0x0F; // Rising Edge of INT0 + INT1 generates an
// interrupt request
GICR=0x40; // enables External Interrupt Request of INT0
}
void delay_ms (unsigned short x) {
int c=0;
TCNT0=0x62; // Preload Timer0 value for 10ms steps (0x62 = 98)
TIFR &= ~(1<<TOV0); //Lösche Timer Overflow Flag in TIFR
//(Timer Interrupt Flag Register)
while (c < x) {
if (TIFR & (1<<TOV0)) { //Kontrolliere, ob TOV0-Bit in TIFR
//gesetzt ist
c++;
TIFR &= ~(1<<TOV0);
}
}
}
===== Ende =====
Falls ich net irgendwo einen Fehler gemacht haben sollte, müsste doch
alle 10ms das Overflow Flag gesetzt werden -> das heisst in diesem Fall
- beim ext. Interrupt ergibt sich doch eine Verzögerungszeit von 500ms,
oder?
gruß,
semo