Diese Code läuft zumindest im Simulator. takt gehört natürlich auf 0 gestellt.Code:#define F_CPU 8000000L // Systemtakt in Hz #include <stdint.h> #include <string.h> #include <avr/io.h> #include <avr/interrupt.h> volatile uint8_t takt; ISR(TIMER0_OVF_vect){ takt++; } int main(void) { DDRD &= (~ (1<<PD2)); /* Pin D2 als Eingang */ PORTD |= (1<<PD2); /* Pull Up von PIN D2 aktivieren */ DDRD=(1<<PD3);// PortD3 wird Ausgang TCCR0=(1<<CS00); //kein Prescaler TIMSK|=(1<<TOIE0); // Overflow Interrupt en sei(); for(;;){ if (!( PIND & (1<<PIND2))) { /* mache was wenn PinD2 low ist */ // Hier: der Getriebemotor an L293D soll mit 50% laufen if(takt>=10){ //Takt bis 10 zählen takt=0; PORTD^=(1<<PD3); //PortD3 toggelt 50% PWM } } else{ PORTD|=(1<<PD3); // Motor läuft mit 100% } } }
Wenn man die Endlosschleife mit for(;; ){ beginnt, dann braucht man kein return0.
Lesezeichen