/*
 * Soubor:  tuu-tuu.c
 * Datum:   20.12.2011 22:11
 * Autor:   Marek Nožka, nozka <@t> spseol <d.t> cz
 * Licence: GNU/GPL 
 * Úloha:   3 pípnutí reproduktoru
 * Popis:   Akord C-dur
 * C1     262   <-  T = 3816 us; T/2 = 1908 us
 * D1b    277
 * D1     294
 * E1b    311
 * E1     330   <-  T = 3030 us; T/2 = 1515 us
 * F1     349
 * G1b    370
 * G1     392   <-  T = 2551 us; T/2 = 1275 us
 * A1b    416
 * A1     440
 * B1b    466
 * B1     494
 * C2     523
 ****************************************************/

#include <at89x52.h>

/** Funkce pro časové zpoždění 100 us až 25500 us.
 * (Pro OSC 12.0 MHz) Časové zpoždění je vždy násobkem 100 us.
 * Režije spojená s voláním funkce k zadanému zpoždění
 * přidává ještě dalších 6 us.
 *
 * @param koef Celkové zpoždění = koef x 100us. */
void delay_100u_x(unsigned char koef)
{
    koef; //pouze prázdný výraz, abych nedostával warning při kompilac
    __asm
    MOV R6, DPL 
    ; 100 us 
00002$: MOV R7, #48
00003$:     DJNZ R7, 00003$
        NOP 
        DJNZ R6, 00002$ 
    __endasm;
}

/****************************************************
 *               Hlavní program.
 ****************************************************/

void main(void)
{ 
    unsigned char i;

    while (1) {
        for ( i = 0; i < 170; i++) {
            P1_7 = 0;
            delay_100u_x(19);
            P1_7 = 1;
            delay_100u_x(19); 
        }
        for (i = 0; i < 214; i++) {
            P1_7 = 0;
            delay_100u_x(15);
            P1_7 = 1;
            delay_100u_x(15);
        }
        for (i = 0; i < 254; i++) {
            P1_7 = 0;
            delay_100u_x(12);
            P1_7 = 1;
            delay_100u_x(12);
        }
    }

}


