Leider hat mein Code noch das Problem, dass ich erst ein wenig den PIN A0 anschalten muss damit es klappt. Vielleicht könnt ihr mir ja ein paar Tipps geben
Ähm, was bitte soll "ein wenig anschalten" genau bedeuten?

Ich denke, ihr habt sicher Ideen zum optimieren.
Ja, z.B. das "Umwandeln" von value in send_code ist völlig unsinnig. Das ist doch schon längst eine Bitfolge. Oder was denkst du, in welcher Form das im Controller bearbeitet/gespeichert wird?
Ich würde die Funktion so schreiben:
Code:
void send_code (uint8_t value) {

   for (uint8_t mask = 1<<2; mask; mask >>= 1) {
         PORTA &= ~(1<<PA0);
         my_sleep_ms(value&mask?DEF_TIME_BIT1:DEF_TIME_BIT0);
         PORTA |= (1<<PA0);
         my_sleep_ms(DEF_TIME_BIT_NONE);
   }

   my_sleep_ms(DEF_SLEEP_BETWEEN_SEND);
}
PS: Rest vom Code habe ich mir nicht weiter angesehen.