/* F_CPU = 4e6 Hz * * 36kHz => T = 27.777us = 111.11 tick * Ton = 25~33% => 30 tick (27%) * * */ #include // knihovna obsahujici definice regstrů procesoru #define F_CPU 4000000UL // info o frekvenci mcu pro prekladac (1MHz) #include // knihovna obsahujici funkce pro zpozdeni #define SETBIT(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT))) // nastaví bit #define CLRBIT(ADDRESS,BIT) ((ADDRESS) &= ~(1<<(BIT))) // nuluje bit #define NEGBIT(ADDRESS,BIT) ((ADDRESS) ^= (1<<(BIT))) // neguje bit #define TSTBIT(ADDRESS,BIT) ((ADDRESS) & (1<<(BIT))) // testuje bit #define FALSE 0 #define TRUE 1 #define LED_ON CLRBIT(PORTB, PB0) #define LED_OFF SETBIT(PORTB, PB0) #define DELKA_PULBITU 20 // pocet period frekvence 36kHz na polovinu bitu void writeByte(unsigned char data, unsigned char wrStart) { // MSB first // ("wrStart" == true) ==> burst s delkou 16 * DELKA_PULBITU unsigned char i, j; if(wrStart) { // vyslat start pulz for(j=0; j<2; j++) { // 16*DELKA_PULBITU by se neveslo do promenne, proto 2x za sebou for(i=8*DELKA_PULBITU; i>0; i--) { while(!(TIFR & 1<0; j--) { // "1" = burst + pauza // "0" = 2 x pauza if(data & 1<<7) { // "1" => burst for(i=DELKA_PULBITU; i>0; i--) { while(!(TIFR & 1< pauza for(i=DELKA_PULBITU; i>0; i--) { while(!(TIFR & 1<0; i--) { while(!(TIFR & 1<