HI, ich hab gerad begonnen interrupts mit dem timer auszuprobieren udn den code mal nach AVR Tutorial und Datenblatt gestrickt. Sowohl für 8-, als auch 16 Bit Timer. Problem, es passiert garnichts. Der Port ist richtig, die LED kann ich zum Debuggen auch in led_init() an- und ausschalten, jedoch die ISR des Timers läuft nicht. wahrscheinlich überseh ich nur was, oder ??
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
// edfinition of Timer 0 Interrupt number
#define TIMER0_vect _VECTOR(10)
#define TIMER1_vect _VECTOR(9)
//definitions for Timer register
#define CS00 0
#define CS01 1
#define CS02 2
#define CS12 2
//definitions for LED
#define LEDPORT DDRB
#define LED 0
void timer0_init(void); // 8 Bit Timer
void timer1_init(void); // 16 Bit Timer
void led_init(void);
void main(void)
{
led_init();
timer1_init();
for(;;)
{}
}
void timer0_init(void)
{
cli();
// Set Timer Config:
TCCR0 |= (1<<CS00) | (1<<CS02);
//enable Timer0 Interrupt
TIMSK |= (1<<0);
sei();
}
void timer1_init(void)
{
cli();
// set Timer1 Conifg
TCCR1A = 0x00; // kein CLK_out, kein PWM
TCCR1B |= (1<<CS12); // Prescvaler f_osc/256
//enable Timer1 Interrupt
TIMSK |= (1<<7);
sei();
}
void led_init(void)
{
LEDPORT = 0x01;
PORTB |= (1<<LED);
}
// TIMER 0 ISR
ISR (TIMER0_vect)
{
if( PORTB |= (1<<LED) )
PORTB &= ~(1<<LED);
else
PORTB |= (1<<LED);
}
//TIMER 1 ISR
ISR (TIMER1_vect)
{
if( PORTB |= (1<<LED) )
PORTB &= ~(1<<LED);
else
PORTB |= (1<<LED);
}
mfg
LC
Lesezeichen