RTV forum PL | NewsGroups PL

Kody w C do 8051: Odczyt sygnału RC5 z pilota zdalnego sterowania

Kod RC5 do 8051

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Kody w C do 8051: Odczyt sygnału RC5 z pilota zdalnego sterowania

tomzor
Guest

Fri May 14, 2004 4:27 am   



Witam

czy ma ktos kody w C dla 8051 obsługujace odczyt RC5 z pilota

Artur
Guest

Fri May 14, 2004 6:32 am   



tomzor wrote:

Quote:
Witam

czy ma ktos kody w C dla 8051 obsługujace odczyt RC5 z pilota


#define XTAL 11.0592e6 // 8 ... 25 MHz
#define TIME_INT 0.5 // ms
#define IRIN P3_2

unsigned char pulselen = 0;
unsigned char timeout = 0;
unsigned char bitsrecd = 0;
unsigned char ir_cmd = 0;
unsigned char ir_adr = 0;
unsigned int irbuffer = 0;
unsigned int irbuffer_old = 0;
bit previr = 1;
bit framebusy = 0;
bit mustshort = 0;
bit irvalid = 0;




void int_timer_0(void) interrupt TF0_VECTOR using 1
{
register char i, tmp;


TL0 |= (unsigned int) (65536-((TIME_INT*1e3)/(1/(XTAL/12e6))));
TH0 = (unsigned int)
(65536-((TIME_INT*1e3)/(1/(XTAL/12e6))))/256; //Reload timeout timer.

//###########################################################

if(previr != IRIN)
{
if(framebusy)
{
if(mustshort)
{
mustshort = 0;
irbuffer <<= 1;
bitsrecd++;
}
else
{
if(pulselen < 2) // wartość : 4 - dla przerwań co 256us; 2 - dla 512us
{
mustshort = 1;
}
else
{
irbuffer <<= 1;
irbuffer |= 1;
bitsrecd++;
}
}
}
else
{
framebusy = 1;
bitsrecd = 0;
timeout = 0;
irbuffer = 0;
mustshort = 0;
pulselen = 0;
}
pulselen = 0;
previr++;
}
else
{
pulselen++;
if(pulselen == 13) // wartoœć : 25 - dla przerwań co 256us; 13 - dla 512us
{
timeout++;
if(framebusy)
{
framebusy = 0;
if(irbuffer != irbuffer_old)
{
irbuffer_old = irbuffer;
irvalid = 1;
set_timeout = 0;
ir_cmd = irbuffer;
ir_adr = irbuffer >> 8;
};
}
if(timeout > 2)
irvalid = 0;
}
};
}

Wynik : ir_cmd - odebrany kod polecenia (odebrane kody są nieco inne niż
standardowo np: przycisk z cyfą 2 daje kod 3 )
ir_adr - adres


Artur

tomzor
Guest

Fri May 14, 2004 7:54 am   



Witam
Dzieki tylko mam problem ze zmienna previr bo w lini jest cos takiego
previr++;
i tego keil sie czepia
czy dobrze jest zadeklarowana ?

dzieki za wszelkie uwagi, pomoc itp

Tomek

Artur
Guest

Fri May 14, 2004 8:05 am   



tomzor wrote:

Quote:
Witam
Dzieki tylko mam problem ze zmienna previr bo w lini jest cos takiego
previr++;
i tego keil sie czepia
czy dobrze jest zadeklarowana ?

dzieki za wszelkie uwagi, pomoc itp

Tomek

U mnie kompilowało i działało bez problemu, używałem RIDE C
( http://www.raisonance.com/download/index.php ).
previr to zmienna bitowa. Jeśli previr++ nie dziła spróbuj previr = !previr
efekt ten sam.

Artur

Andy
Guest

Fri May 14, 2004 5:04 pm   



Użytkownik "tomzor" <tzurek@poczta.onet.pl> napisał w wiadomości news:c821gr$kb8$1@news.onet.pl...
Quote:
Witam
Dzieki tylko mam problem ze zmienna previr bo w lini jest cos takiego
previr++;
i tego keil sie czepia
czy dobrze jest zadeklarowana ?
...

w keilu nie da sie zrobic ++ na zmiennej bitowej

albo jest zle zdefiniowana

albo trzeba zmienic na previr ^= 1;

--
Andrzej

elektroda NewsGroups Forum Index - Elektronika Polska - Kody w C do 8051: Odczyt sygnału RC5 z pilota zdalnego sterowania

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map