Ohne jetzt deinen Code genauer anzusehen:

1. Dein Programm fängt (einfach) bei Adresse 0x0000 an. Das ist schlecht, da auf 0x0000 der Resetvector und auf 0x004 der Interruptvector liegt. Der Programmspeicher beginnt bei 0x0005 (Datasheet seite 13)

Besser:
org 0x00
goto MAIN ; Nach Reset mit MAIN beginnen
:
:
org 0x05
MAIN
:
:

2. Was macht dein Programm nach Ende der Schleife? Es läuft ins leere! Das 'end' ist nur eine Derektive für den Assembler. Das hat auf dein Programm keinen Einfluss. Wenn count2 runtergezählt ist, wird das 'goto L1' übersprungen. Was aber nach 'goto L1' im Programmspeicher steht ist völlig ungewiss!

Also: Zum Testen deine LOOP komplett entfernen und durch

LOOP goto LOOP ; Endloosschleife

ersetzen. Hier loopt der Prozessor bis Power OFF. Zum Testen ist das besser. Später würde ich dann den USART aber über Interrupts verwenden.

Chief Brady