Edu.se voce não usar ASM,mesmo que em rotinas num compilador C ou outro de alto nível,voce nunca terminará um grande projeto de alto desempenho pois os compiladores não tem acesso total aos registros e arquitetura de um Microcontrolador.
Exemplo é quando voce tenta rodar o programa não da flash mas de uma memória externa.
Úsando C,voce terá problemas com ponterios,ja em ASM voce apenas dará um salto para a localização onde começa o programa.
Zerar o conteudo da Ram e Flash então,complica ou deixa inviável se não for em ASM.
Eu mesmo usei muitas vezes C(Mikroc) para aprender a usar USB/HID,mas programo em ASM,mesmo para ARM ou DSPIC pois meus projetos pedem acessos precisos.
voce estava com esse problema pois devia ter feito a rotina principal em ASM.
Lógico que programar em ASM exige muito conhecimento de HardWare e programação,mas aí esta a diferença entre programadores completos ou não.
Vejo muito nos forums de eletronica os iniciantes querendo programar um micro usando C do mesmo jeito que no Windows ou Linux,este é outro erro muito comum que confudem os iniciantes mas tem bons livros sobre C direcionado a microcontroladores.