sbit P2_0 = P2^0; /* SFR for P1.0 - pin s diodou*/ #define LEN_PACKET 14 // pocet bitu paketu #define LEN_BURST 32 // delka burst (pocet vyslanych pulzu) #define LEN_PAUSE 32 // delka pauzy (pocet pulzu, kdy led nesviti) #define hTH0 0xFF #define hTL0 0xF9 /* nastaveni timeru na cca 6.9us xtal = 11.0592e6 / 12 => T = 1,01us chci 6.94us takze potrebuju 65 535 - 6 = 65529 => hTH0 = 0xFF; hTL0 = 0xF9 */ /*******************************************************************************/ void timer9us(){ //tohle by melo odmerit tech 6.9us .... ?? TH0 = hTH0; TL0 = hTL0; TF0 = 0; while (!TF0); } /*******************************************************************************/ void SendPacket(unsigned int p){ unsigned int packet = p; unsigned char i, j, k; unsigned int mask = 1 << 15; //pro rozpoznavani 1/0 v dvoubajtu TH0 = hTH0; TL0 = hTL0; TR0 = 1; // nastavim a spustim casovac P2_0 = 0; packet |= 0xF<<12; // nastaveni nejvyssich bitu (vcetne start bitu) na "1" packet <<= 16 - LEN_PACKET; // bity 15 a 14 vysunout for (i = 0; i < LEN_PACKET; i++){ //pro odeslani celeho paketu if (packet & mask){ // osesílaný bit bude "1"; 32 x 27.7 = 889us (polovina odeslaneho bitu) for (j = 0; j < LEN_PAUSE; j++){ //32 puluzu pauza P2_0 = 0; //zhasnu for (k = 0; k < 4; k++){ //4 x 6.9 = 27.7us timer9us(); } } for (j = 0; j < LEN_BURST; j++){ //32 puluzu burst 32 x 27.7 = 889us (2. polovina odeslaneho bitu) P2_0 = 1; // roznu timer9us(); // 6.9us P2_0 = 0; // zhasnu for (k = 0; k < 3; k++){ //3 x 6.9 timer9us(); } } }else{ // osesílaný bit bude "0" for (j = 0; j < LEN_BURST; j++){ //32 puluzu burst P2_0 = 1; timer9us(); P2_0 = 0; for (k = 0; k < 3; k++){ timer9us(); } } for (j = 0; j < LEN_PAUSE; j++){ //32 puluzu pauza P2_0 = 0; for (k = 0; k < 4; k++){ timer9us(); } } } P2_0 = 0; //zhasnu packet <<= 1; //posun na dalsi bit } } /*******************************************************************************/ /*******************************************************************************/ void main(){ unsigned int paket = 513; // adresa SAT1 a kod pro key1 SendPacket(paket); while(1){ } }