Generátor: Generovaní sinusového a trojúhelníkového průběhu

Takto jsem to zkusil ja. Myslite ze je to OK?

[code]#define F_CPU 20000000UL
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>

#define SET(BAJT,BIT) ((BAJT) |= (1<<(BIT))) //nastav!
#define TST(BAJT,BIT) ((BAJT) & (1<<(BIT))) //je nastaven?

#define OCR_SINUS 19 //2441670=1000000;20000000/(11000000)-1=19
#define OCR_TROJUHELNIK 19 //2050000=1000000;20000000/(11000000)-1=19

#define DA_SMER_PORT DDRB //DA na porte B
#define DA_PORT PORTB //DA na porte B

#define TLACITKO_SMER_PORT DDRD //tlacitko na porte D
#define TLACITKO_PORT PIND //tlacitko na porte D
#define TLACITKO_BIT 2 //tlacitko PD2

#define VZORKY_SINUS 24 //pocet vzorku
#define VZORKY_TROJUHELNIK 20 //pocet vzorku

uint8_t signal = SINUS;
uint8_t i=0;

unsigned char sinu [VZORKY_SINUS] =
{};
unsigned char troj [VZORKY_TROJUHELNIK] =
{};

int main(void)
{
//========= inicializace ===========
sei(); //globalni preruseni
SET(GIMSK,INT0); //preruseni od INT0
SET(MCUCR, ISC01); // preruseni na dobezne hrane
OCR0A = OCR_SINUS;
SET(TCCR0A,WGM01); //CTC
SET(TCCR0B,CS00); //preddelicka: f/1
SET(TLACITKO_SMER_PORT,TLACITKO_BIT); //tlacitko na PD2
DA_SMER_PORT = 0xFF; //vystup pro DA

//==================================
while(1)
{
	if (TST(TIFR,OCF0A))	//je nastaven OCF0A?
	{
		SET(TIFR,OCF0A);	//vynuluj TIFR
		//========= generovani vzorku ============
		if (signal == SINUS)
		{
			DA_PORT = sinu*;
			i++;
			if (i >= VZORKY_SINUS)
			{
				i = 0;
			}
		}
		else
		{
			DA_PORT = troj*;
			i++;
			if (i >= VZORKY_TROJUHELNIK)
			{
				i = 0;
			}
		}
		//=======================================
	}
}

}
ISR (INT0_vect)
{
if (signal == sinu)
{
signal = troj;
OCR0A = OCR_TROJUHELNIK;
}
else
{
signal = sinu;
OCR0A = OCR_SINUS;
}
return;
}[/code]

Jen si jeste nejsem jist tim RETURN; Myslim zde:

ISR (INT0_vect) { if (signal == sinu) { signal = troj; OCR0A = OCR_TROJUHELNIK; } else { signal = sinu; OCR0A = OCR_SINUS; } return; }
Jakou presne funkci to plni?**