Hallo,

nach anfänglichen Bascom Irritationen habe ich mich nun entschlossen mal meine ersten Gehversuche in C zu starten. Die Bascom Sachen laufen einwandfrei, doch denke ich C ist sinnvoller.

Portabfragen usw. laufen, PWM auch, doch habe ich Probleme eine ISR für den Timer 0 Overflow Interrupt anzulegen.

Hier mal mein erster C Code (ist unsinn, nur zum üben):
Code:
#include <avr/io.h>
#define F_CPU 1000000

/* Delay aufrufen mit _delay_ms(Wert_in_ms); */
#include <util/delay.h>

#include <avr/interrupt.h>



/* Bitfeld anlegen um einzelne Bits ansprechen zu können
   Bit setzen:      BIT.bit1 = 1;
   Bit rücksetzen   BIT.bit1 = 0;                     */

struct { unsigned char bit1 :1;
		 unsigned char bit2 :2;
         unsigned char bit3 :3;
		 unsigned char bit4 :4;
		 unsigned char bit5 :5;
		 unsigned char bit6 :6;
		 unsigned char bit7 :7;
		 unsigned char bit8 :8;
		} BOOL;


void rinit (void)
{
 /* Timer 0 für PWM */
 TCCR0A |= (1<<COM0A1) | (1<<COM0A0) | (1<<WGM00); //Phase Correct PWM Mode
 TCCR0B |= (0<<CS02) | (1<<CS01) | (1<<CS00); //Prescaler 64

 /* Timer 1 für Overflow */
 TCCR1 |= (1<<CS12) | (1<<CS11) | (1<<CS10); //Prescaler 64
 TIMSK |= (1<<TOIE1); //Timer1 ISR bei Overflow

 /* Eingänge / Ausgänge */
 DDRB |=   (0<<PB3) | (1<<PB2) | (1<<PB1) | (1<<PB0) ; //PB0..2 Ausgang, PB3 Eingang
 PORTB |=  (1<<PB3); // Pull Up für PB3 aktivieren
}





int main(void) 
{
 
 sei(); //Alle Interrupts ein 

 rinit(); //Register initialisieren
 
 BOOL.bit1 = 0; //bit1 initialisieren

while (1) //Hauptschleife
{

if ( !(PINB & (1<<PB3))) //wenn PINB3=0 dann bit1 = 1
   {
   BOOL.bit1=1;
   }


if (BOOL.bit1==1)
{
PORTB |= (1<<PB0);
}


} //end while

} //end main
Wie programmiere ich nun die ISR für den Timer 1 Überlauf?

Bevor ich Zukunft noch mehr so einfach zu beantwortende Fragen stelle:
Wie finde ich den die Bezeichner für die ISR´s, so das ich auch mal einen ADC Interrupt etc. programmieren kann ?

Achso, Entwicklungsumgebung AVR Studio und als Plug in Win AVR.


Danke!