Porquê a programação é em Assembly e não em C ?
Posso estar errado mas acredito que se eu conseguir dominar um pouco de assembler terei mais facilidade com outras linguagens.
Basicamente ambas são linguagens mas possuem estruturas de contrução de programas bem diferentes. Desse modo, a linguagem assembly ajudaria parcialmente no entendimento da linguagem C.
Além disso, C proporciona maior facilidade de criação, debug e de entendimento do programa. Por outro lado, para economia de recursos (de memória e tempo de processamento), o assembly é bem melhor. Gerando programas menores e mais velozes. Importante em algumas aplicações mais críticas.
Essa economia geralmente é mais importante em sistemas que dispõe de pouca memória ou programas muito grandes para a memória disponível.
Um fator critico ao usar o C ou outra linguagem de mais alto nível (Basic, Forth, Pascal, C#) é a qualidade do compilador e isto é frequentemente desprezado. Pois no final do processo da compilação, é gerado um programa assembly, que é traduzido para linguagem de máquina, que será carregado do microcontrolador. Se esse programa assembly estiver errado (já vi acontecer) ou for grande, há desvantagens no uso de linguagem de nível +alto. E qualidade se compra e custa caro frequentemente.
Assembly também permite que se esteja mais próximo do hardware do microcontrolador, acessando registradores com todas as suas vantagens (velocidade) e limitações (troca de bancos de memória). Permite entender o que é um microcontrolador em detalhes, o que facilitará outros projetos ou a melhoria de um projeto. Mas para o programador eventual, pode ser mais trabalhoso.
Para mim, usar assembly é como guiar um modelo de carro de passeio adaptado para carro de corrida, não há bancos bonitos, não há estofamento interno, os faróis são básicos, ... Ou seja assembly é muito mais poderoso....
Conheço e uso bastante as duas linguagens. Mas tenho preferência pelo assembly pelas razões que expûs e também por que não disponho de um compilador gratuito de boa qualidade, exceto para os PIC18F2550 ou 4550, para os quais a Microchip disponibiliza.
Geralmente, com microcontroladores, eu uso o assembly sempre que possível. Mas se aplicação é mais complexa (usa Ethernet, TCP/IP, USB, acesso a drives de memória de alta capacidade, acessa muitas informações estuturadas ...), aí fujo dele rápido para o C.