Kod RC5 do 8051

May 14, 2004 4 Replies

Witam



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


tomzor wrote:

#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

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 (

formatting link
). previr to zmienna bitowa. Jeśli previr++ nie dziła spróbuj previr = !previr efekt ten sam.

Artur

U¿ytkownik "tomzor" snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:c821gr$kb8$ snipped-for-privacy@news.onet.pl...

w keilu nie da sie zrobic ++ na zmiennej bitowej

albo jest zle zdefiniowana

albo trzeba zmienic na previr ^= 1;

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required