Hallo

RC5 ist einfach und weit verbreitet, wird aber bei Multimediageräten heutzutage kaum mehr verwendet. Mit dem asuro und der orginalen CD-Library (72kHz) kann man es zum Beispiel so umsetzen:

Code:
 #include "asuro.h" // für die CD-LIB mit 72kHz-Timer

#define pow1 150 // Langsame Geschwindigkeit
#define pow2 200 // Schnelle Geschwindigkeit
#define taste (!(PINC & (1<<PC4))) // Tastenabfrage
#define keine_taste (PINC & (1<<PC4))

unsigned int count, temp; // Zaehler, IR-Kommando
unsigned char daten[14], ir_status; // IR-Datenspeicher, IR-Eingangspegel

int main(void) {

Init();
do{
   temp=0;
   while (PIND & (1 << PD0)) //warten auf die Flanke des Startbits
      {if keine_taste StatusLED(GREEN); else StatusLED(RED); // Tastenspielerei
       if taste BackLED(ON,ON); else BackLED(OFF,OFF);}
   StatusLED(RED); // Alarmstufe ROT: ein Zeichen ist im Anflug

   for (count=0; count<14; count++) { // im Gesamten warten wir auf 14 Bits
/*
lt. Spettel-Diagramm betraegt die Bitlaenge 1,778 ms. Bei 36 Takten pro Millisekunde ergibt das 36*1,778 = 64
*/
   Sleep(96); // Information einlesen nach 3/4 der Bitlaenge (96 bei CD-LIB!)
      ir_status=(PIND & (1 << PD0)); // Pegel Speichern
      if (ir_status) daten[count]='1'; else daten[count]='0'; // und merken
      if (ir_status) temp |= (1 << (13-count)); // das MSB(=mostsuefikantbit) zuerst
      while (ir_status == (PIND & (1 << PD0))); // Bit gelesen, warten auf naechste Flanke
   }
   temp=temp/2 & 0xf; // Die Info steht in den Bits 1-4
   StatusLED(YELLOW); // Daten gelesen

/* asuro steuern.
   Mit dem 10er-Block der Fernbedienung kann der asuro nun gesteuert werden:
   Alle anderen Tasten stoppen den asuro
*/

   switch (temp) {
      case 1: MotorDir(FWD,FWD); MotorSpeed(pow1,pow2); break;
      case 2: MotorDir(FWD,FWD); MotorSpeed(pow2,pow2); break;
      case 3: MotorDir(FWD,FWD); MotorSpeed(pow2,pow1); break;
      case 4: MotorDir(BREAK,FWD); MotorSpeed(0,pow1); break;
      case 5: MotorDir(BREAK,BREAK); MotorSpeed(0,0); break;
      case 6: MotorDir(FWD,BREAK); MotorSpeed(pow1,0); break;
      case 7: MotorDir(RWD,BREAK); MotorSpeed(pow1,0); break;
      case 8: MotorDir(RWD,RWD); MotorSpeed(pow1,pow1); break;
      case 9: MotorDir(BREAK,RWD); MotorSpeed(0,pow1); break;
      default: MotorDir(BREAK,BREAK); MotorSpeed(0,0); break;
   }
   StatusLED(GREEN); //endlos

}while (1);
return 0;
}
Die Beschreibung des Programms, mehr Infos zu RC5 und allgemein zum Programmieren in C gibts hier:
https://www.roboternetz.de/phpBB2/ze...ag.php?t=55832

Noch mehr RC5 gibts im asuro-Wiki:
http://www.asurowiki.de/pmwiki/pmwiki.php/Main/RC5DemoC

Gruß

mic