- posted
19 years ago
Kod RC5 do 8051
- Vote on answer
- posted
19 years ago
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
- Vote on answer
- posted
19 years ago
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
- Vote on answer
- posted
19 years ago
U mnie kompilowało i działało bez problemu, używałem RIDE C (
Artur
- Vote on answer
- posted
19 years ago