#include <avr/io.h>
#include <compat/deprecated.h>
#define SPP cbi(PORTA,PA3);sbi(PORTA,PA2)
#define SPM cbi(PORTA,PA2);sbi(PORTA,PA3)
#define SPOFF cbi(PORTA,PA2);cbi(PORTA,PA3)
#define LED1_ON sbi(PORTA,PA0)
#define LED1_OFF cbi(PORTA,PA0)
#define LED2_ON sbi(PORTA,PA1)
#define LED2_OFF cbi(PORTA,PA1)
void Nuta(uint8_t czas, int freq){
unsigned int i,j,delay,ilpow,przerwa;
if(freq<450) LED1_ON;
if((freq>449)&&(freq<600)) LED2_ON;
if(freq>599){
LED1_ON;
LED2_ON;
}
delay=(int)(333386/freq);
ilpow=(int)(658119/(czas*delay));
przerwa=(int)(73133/(czas*delay));
for(j=0;j<ilpow; j++){
SPP;
for(i=0; i<delay; i++)
{
asm volatile ("WDR"::);
}
SPM;
for(i=0; i<delay; i++)
{
asm volatile ("WDR"::);
}
}
LED1_OFF;
LED2_OFF;
for(j=0;j<przerwa; j++){
SPOFF;
for(i=0; i<delay; i++)
{
asm volatile ("WDR"::);
}
SPOFF;
for(i=0; i<delay; i++)
{
asm volatile ("WDR"::);
}
}
}
void Delayms(unsigned int _ms)
{
unsigned int delay, delay_ms;
for(delay=0; delay<_ms; delay++)
{
for(delay_ms=0; delay_ms<76; delay_ms++)
{
asm volatile ("WDR"::);
}
}
}
int main (void){
sbi(DDRA,PA2);
sbi(DDRA,PA3);
for (;;){
Nuta(4,350);
Nuta(4,350);
Nuta(4,350);
Nuta(5,294);
Nuta(16,440);
Nuta(4,350);
Nuta(5,294);
Nuta(16,440);
Nuta(2,350);
Nuta(4,523);
Nuta(4,523);
Nuta(4,523);
Nuta(5,587);
Nuta(16,440);
Nuta(4,350);
Nuta(5,294);
Nuta(16,440);
Nuta(2,370);
Nuta(4,699);
Nuta(5,350);
Nuta(16,350);
Nuta(4,699);
Nuta(5,699);
Nuta(16,659);
Nuta(16,622);
Nuta(16,587);
Nuta(8,659);
Nuta(8,20000);//pauza
Nuta(8,370);
Nuta(4,554);
Nuta(5,523);
Nuta(16,494);
Nuta(16,466);
Nuta(16,440);
Nuta(8,494);
Nuta(8,20000);//pauza
Nuta(8,311);
Nuta(4,370);
Nuta(5,330);
Nuta(16,350);
Nuta(4,466);
Nuta(5,392);
Nuta(16,494);
Nuta(2,587);
Nuta(4,783);
Nuta(5,350);
Nuta(16,350);
Nuta(4,783);
Nuta(5,740);
Nuta(16,699);
Nuta(16,659);
Nuta(16,622);
Nuta(8,659);
Nuta(8,20000);//pauza
Nuta(8,415);
Nuta(4,554);
Nuta(5,523);//c gorne
Nuta(16,493);
Nuta(16,466);
Nuta(16,440);
Nuta(8,466);
Nuta(8,20000);//pauza
Nuta(8,311);
Nuta(4,370);
Nuta(5,311);
Nuta(16,494);
Nuta(4,392);
Nuta(5,311);
Nuta(16,466);
Nuta(2,392);
Delayms(5000);
}
return (0);
}