niestety bez skutku nie wiem czy to wina czasów czy czegoś innego..
Moj kod:
Kod: Zaznacz cały
#include <reg52.h>
unsigned char status = 0;
char bitr ;
char slopecount; //licznik pomocniczy
sbit ir =P3^2;
unsigned char p1; // poprzedni status bitu
// przerwanie od INT0
void INT0_(void) interrupt 0
{
status =0;
bitr = 0x00; // kasujemy poprzednia paczke
slopecount = 16 ; // licznik zczyt. 8bit z modulacja
EX0 = 0; // wylaczenie przerwania od INT0
ET0 = 1; // wlacz przerwania licznika
TH0 = 0xEB; // pomijamy pierwsze 3 bity 3x1.778=5.334
TL0 = 0x2A; //
TF0 = 0;
TR0 = 1; // wlacz licznik
}
// przerwanie od TIMER 0
void Timer0_() interrupt 1
{
slopecount--;
TR0 = 0; // wylacz licznik
if (P3^2== 0 && p1==1) // jesli tak to 1
bitr = bitr |1; // operacja
else
bitr = bitr |0; // operacja
p1=P3^2;
bitr = bitr << 1; // przesun bit o 1
TH0 = 0xFC;
TL0 = 0xE0; // 800us
TR0 = 1;
if (slopecount == 0)
{
status=1;
TR0=0; // wylacz licznik
ET0=0; // wylacz przerwanie
EX0=1; // wlacz ponownie przerwania od INT0
}
}
//początek programu głównego
void main(void)
{
TMOD = 0x01; // tryb 16bit
EX0 = 1; // przerwanie od INT0 wlaczone
EA=1; // wszystkie przerwania wlaczone
while (1)
{
if (status ==1)
P0=bitr; // wyswietlanie na diodach
}
}