Assembléia no Arduino: registros IO

13

Pergunta: Quais registros eu uso para acessar o IO no Arduino Uno quando estou usando assembly para programação?

Antecedentes: Eu estava interessado em praticar minhas habilidades de linguagem assembly no Arduino (achei que seria mais fácil ligar / desligar os LEDs do que me preocupar com o IO do console). Ao fazer uma pesquisa preliminar , descobri que a cadeia de ferramentas AVR pode ser usada para programar o Arduino. No entanto, não sei como encontrar os registros correspondentes para os pinos de E / S.

apnorton
fonte

Respostas:

8

As folhas de dados dos microcontroladores AVR são razoavelmente boas de ler. Basta procurar no Google o controlador exato no seu Arduino (por exemplo, ATmege328) e encontrar a folha de dados "Completa" no site atmel.com . Não faça o download do "Resumo", pois não inclui muitas informações. Faça o download da folha de dados em atmel.com, que é o único local com a documentação mais recente.

Existem três registros usados ​​nas E / S básicas (consulte o capítulo "Portas de E / S"):

Onde n é um identificador de porta, uma letra que varia de A, B, C, ... dependendo do número de pinos de E / S que seu controlador possui. Cada bit em cada registro representa um único pino GPIO (sim, você precisa de algum conhecimento básico em binário para entender isso completamente).

  • DDR n , Data Direction Register: Isso basicamente configura um pino para a entrada (0) ou a saída (1).
  • PORT n , Port n Data Register: Quando um pino é definido como saída, o bit relacionado alterna o pino de saída alto (1) ou baixo (0). Quando configurado como entrada, isso permite um resistor de pull-up fraco no pino de saída.
  • PIN n , Porta n Registro de entrada: Use este registro para ler o nível atual de um pino configurado como entrada.
jippie
fonte
3
Este. Etapa 1: Pare de pensar nele como um arduino. Não é. É um ATmega MCU em um PCB. 2. Leia a folha de dados. 3. Não, leia a folha de dados .
Connor Wolf
Ah ... isso é exatamente o que eu precisava. Acho que passei tanto tempo procurando tutoriais direcionados ao Arduino que esqueci que estava simplesmente programando um controlador AVR e poderia usar sua folha de dados.
apnorton
1

Confira: http://arduino.cc/en/Reference/PortManipulation

Também: http://arduino.cc/en/Hacking/PinMapping168

Quanto a outras portas e pinos, verifique a folha de dados do seu controlador, eles são realmente úteis para pessoas que podem entendê-los! :)

O médico
fonte
3
As respostas apenas para links não são úteis para o site, pois não estamos tentando estabelecer um repositório de links. Além disso, a resposta apenas ao link é inútil se o link cair no futuro. Seria melhor resumir ou parafrasear o conteúdo dentro da própria resposta, para que os usuários encontrassem o que precisam aqui ou, pelo menos, ganhassem contexto suficiente para poderem encontrar soluções.
asheeshr