Se alguém que tenha mais experiência (converter direto de ASM ou C para .HEX) puder e quiser explicar melhor tudo isso eu ficaria grato em entender melhor como tudo isso funciona.
O arquivo hex é um arquivo em formato texto que contém o programa em linguagem de máquina convertido nesse formato texto (geralmente usando o código ASCII). Para se obter um arquivo hex não basta converter o texto de um programa em C ou em Assembly no formato hex.
A sequência de operações para gerar um arquivo hex é a seguinte:
1-Gerar ou obter o programa, também chamado de código fonte. Em alguma linguagem para computadores, como C, Assembly, Basic, ....
2-Compilar o programa usando um programa compilador (exe.: gcc do Linux) ou usando um ambiente integrado de desenvolvimento (IDE), que contém um compilador.
3-Linkar o programa compilado no passo 2 usando o programa compilador (exe.: gcc do Linux) ou usando um ambiente integrado de desenvolvimento (IDE), que contém um linkeditor. Essa fase de Linkedição pode ter como saída os arquivo asm, lst, cof e hex.
4-Carregar o arquivo hex no microcontrolador real ou num microcontrolador simulado (ex. Proteus).
Veja que não há conversão para hex. Me parece que as etapas 2 e 3 não foram executadas, não é? As etapas 2 e 3 devem ser executadas por compiladores específicos para o processador. Por exemplo, não posso usar o gcc de um Linux para PC para compilar o programa de um PIC.