die irdiode geht bei mir vom pinb0 (kann beliebig sein) über
einen 100ohm widerstand an +5volt.
ist ein testaufbau und kann jederzeit verbessert werden.
damit kann ich meinen fernseher steuern.
..avr16/8 mhz...habe ich genommen.

Code:
#include <avr/io.h> 
#include <avr/interrupt.h> 
#include <avr/signal.h> 
#include <string.h> 
#include <stdint.h> 

#define IR_LED_PORT  PORTB 
#define IR_LED_PIN   PB0 
#define IR_LED_DDR   DDRB 

#define IR_LED_ON    IR_LED_PORT |=  (1<<IR_LED_PIN) 
#define IR_LED_OFF   IR_LED_PORT &= ~(1<<IR_LED_PIN)

//89ms pause
void ms_89(void)
{
  uint32_t zaehler;

  for (zaehler=0; zaehler<118666; zaehler++) 
  asm volatile("nop");
}

void halbbit_high(void)
{
  uint8_t i,zaehler;
  
  //890us Impuls mit 36kHz senden
  //Bei 28us Periodendauer ergibt das 32 Impulse
  for(i=0; i<32; i++)
  {
    IR_LED_ON;
    for (zaehler=0; zaehler<18; zaehler++) 
    asm volatile("nop");    
    IR_LED_OFF;
    for (zaehler=0; zaehler<18; zaehler++) 
    asm volatile("nop");    
  }
}
  
void halbbit_low(void)
{
  uint16_t zaehler;
  
  //890us Pause
  for (zaehler=0; zaehler<1186; zaehler++) 
  asm volatile("nop");  
}  
  
//Eine 0 oder 1 senden
void Send_Bit(uint8_t code)
{
  if (code==0)
  {
    halbbit_high();
    halbbit_low();
  }
    else
  {
    halbbit_low();
    halbbit_high();
  }
}


void send_code(uint8_t toggle, uint8_t address, uint8_t command)
{
  uint8_t mask,i;
  
  Send_Bit(1); //Erstes Startbit=1
  Send_Bit(1); //Zweites Startbit=1

  //Togglebit
  if(toggle==0)
  {
    Send_Bit(0);
  }
  else
  {
    Send_Bit(1);
  }  

  //5 Bit Addresscode
  mask=0x10; //Beginn bei MSB
   
  for(i=0; i<5; i++)
    {
     if(address&mask) //Send 1
      {
       Send_Bit(1);
      }
     else //Send 0
      {
       Send_Bit(0);
      }
      
     mask>>=1;   //Nächstes Bit
    }


  //6 Bit Kommandocode
  mask=0x20; //Beginn bei MSB
   
  for(i=0; i<6; i++)
    {
     if(command&mask) //Send 1
      {
       Send_Bit(1);
      }
     else //Send 0
      {
       Send_Bit(0);
      }
     mask>>=1;  //Nächstes Bit
    }

  //Übertragung komplett
  PORTB=0; //IR-LED abschalten
  ms_89(); // warte 89ms
}


int main(void)
{
  IR_LED_DDR|=(1<<IR_LED_PIN);
  
  uint8_t command,i;
  command=32;
  
  for (i = 14; i < command; i++)
  {
    send_code(1,7,i); // toggle, addresse, commando
  }  
}