Hallo Leute,

da ich vorhabe eine Stoppuhr zu programmieren habe ich mir zum Testen folgendes Programm ueberlegt:

[//define all external dependencies
#include <avr/io.h>
#include <avr/interrupt.h>




//declare all used functions
void Sensor_init(void);
void LED_SW_init(void);

//define variables

volatile unsigned int z;

void TIMER2_interrupt_init(void)
{
TCCR2 = (1<<WGM21)|(0<<WGM20)|(1<<CS22)| (1<<CS21) |(0<<CS20); //CTC mode und Prescaler auf 256
TCNT2=0;
OCR2=249; //alle 0.008 s Interrupt
TIMSK = (1<<OCIE2);
}

ISR(TIMER2_COMP_vect) //LED soll alle 1 leuchten
{
z++;
if(z==125)
{
PORTB ^= (1<<PB0);
z=0;
}

}

int main(void)
{
Sensor_init();
LED_SW_init();

TIMER2_interrupt_init();

while(1)
{
if(!(PIND & (1<<PD0))) sei(); //Mit Pin 0 soll Timer gestartet werden

if(!(PIND & (1<<PD7))) cli(); //Mit Pin 7 soll Timer stoppen
}
}


void Sensor_init(){

DDRA=0x00; // Port A has to be used as a digital input
PORTA=0xff; // activate internal pull-up resistors for PORTA
}

void LED_SW_init(){

DDRB=0xFF; // PORTB is output for LEDs
PORTB=0xFF; // all LEDs off
}
]

Wenn ich den Taster 0 druecke soll der Timer aktiviert werden und wenn ich den andren Taster Pin 7 druecke soll er deaktiviert werden und nicht mehr zaehlen bzw die LED hier nicht mehr im sekundentakt blinken. Dieses Programm habe ich nur geschrieben um das Grundprinzip meines Programms zu testen...

Jetzt meine Probleme:

1) Die LED blinkt immer und reagiert auf keinen Taster:

2) Wenn ich von Port D die Bruecke zu RXD TDX drin habe, blinkt zu Beginn gar nichts. Erst wenn ich sie rausnehm fängt die LED an zu blinken.


Später will ich mit meinem Programm die Zeit stoppen, d.h. wenn der Taster 0 gedrueckt ist, soll der Timer starten und wenn der Taster 7 gedrueckt ist soll der Timer stoppen. Wie krieg ich das hin, dass meine LED nach gedruecktem Taster 0 blinkt und wenn ich Taster 7 einmal druecke aufhoert ?

Vielen Dank und viele Gruesse,

Jimmy[/code]