Hallo pentagonchicken,

im Ansatz ist dein Programm ok, sind nur einige kleine Fehler drin.
1. Ein Bit wird zuviel gesendet.
2. Phasenwechsel Low-High wird nicht ausgeführt
3. Pause zwischen den Paketen fehlt

Das korrigierte Programm ist im Code-Fenster. Bei mir funktioniert es. Musst nur die Tastencodes für lup und ldown wieder an deinen Empfänger anpassen, dann sollte es auch bei Dir funktionieren.
Code:
#include "asuro.h"
#include <stdlib.h>
#define lup 0x3010
#define ldown 0x3011
#define chup 0x38f10
#define chdown 0x3811

void sendrc5(unsigned long int cmd){
   DDRD |= (1<<DDD1);
   OCR2= 0xC7;
   int length=0;
   while(length<=13){
      //PORTD |=(1<<PD1);
      if(cmd & 0x2000){
         TCNT0=0;
         TCCR0=(1<<CS01) | (1<<CS00); //timer start
         while(TCNT0<111) PORTD |=(1<<PD1);
         while(TCNT0<222) PORTD &=~(1<<PD1);
      }else{
         TCNT0=0;
         TCCR0=(1<<CS01) | (1<<CS00); //timer start
         while(TCNT0<111) PORTD &=~(1<<PD1);
         while(TCNT0<222) PORTD |=(1<<PD1);
      }

      length++;
      cmd <<=1;
   }
   PORTD |=(1<<PD1);
   Msleep(40);
}

int main(void)
{
   int taste1=0,taste2=0;
   Init();
   StatusLED(GREEN);
   while(1){
      taste1=PollSwitch();
      taste2=PollSwitch();
      if((taste1 > 0) && (taste2 > 0) && (taste1==taste2)){
         if (taste1==1){
            StatusLED(RED);
            sendrc5(ldown);
         }
         if (taste1==2){
            StatusLED(GREEN);
            DDRD |= (1<<DDD1);
            sendrc5(lup);

         }
         if (taste1==4){
            StatusLED(YELLOW);
            sendrc5(chup);
         }
         if (taste1==8){
            StatusLED(RED);
            sendrc5(chdown);
         }
      }
   }
    return 0;
}
Übrigens OCR2 braucht nicht eingestellt zu werden, schadet aber auch nicht.

Gruß Waste