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