Wo hast du den Code geklaut? für "nur ein bisschen Erfahrung mit Java/PHP/Batch" sehen mir folgende Zeilen ein wenig hochgegriffen aus:
UCSR0A |= (1<<U2X0);
UCSR0B |= (1<<RXEN0) | (1<<TXEN0) | (1<<RXCIE0);
UCSR0C |= (1<<UCSZ01) | (1<<UCSZ00) ;
UBRR0H = 0;
UBRR0L = 3; //Baud Rate 0.5 MBit --> 0% Error at 16MHz :-)
Außerdem sehe ich nirgends eine Definition dieser Variablen, und die Methode ISR hat keinen Datentyp. display_buffer gibt es nicht. Was im Interrupt passieren soll sehe ich auch nicht... Wenn sich der Sketch so kompilieren lassen würde, bedeutet es entweder, dass du auf bereits intern vorhandene Funktionen und Variablen zurückgreifst - was nicht nachvollziehbar für uns wäre, oder dass etwas deines Codes fehlt.
Dass der Arduino überlastet ist, kann ich mir nicht vorstellen, eher dass irgentwo ein falscher (zu kleiner) Datentyp eingesetzt wurde.
Leider sieht man aus dem Sketch nicht, was das Ding eigentlich machen soll -so wie er da steht, macht er wenig sinn, da er garnix tut... "go" ist immer 0, der loop loopt sich zu tode.