Tutoriel d’assembleur AVR 2 (2 / 4 étapes)

Étape 2: Écrire le code assembleur

Écrivez le code suivant dans un fichier texte nommé pushbutton.asm et compilez-le avec avra comme vous le faisiez dans tutoriel 1.

Notez que dans ce code, nous avons beaucoup de commentaires. Chaque fois que l’assembleur voit un point-virgule, il passe le reste de la ligne et passer à la ligne suivante. Il est bon de commenter largement votre code afin que quand vous y retournerez à l’avenir vous saurez ce que vous faisiez de programmation (surtout en langage d’assemblage!). Je vais à des choses beaucoup dans le premier commentaire quelques tutoriels afin que nous sachions exactement ce qui se passe et pourquoi. Plus tard, une fois que nous devenons un peu mieux à l’Assemblée de codage je me référerai choses en un peu moins de détails.

 ;************************************ ; written by: 1o_o7 ; date: <2014|10|23> ; version: 1.0 ; file saved as: pushbutton.asm ; for AVR: atmega328p ; clock frequency: 16MHz ;************************************ 
 ; Program function:------------------------------ ; Turns on an led connected to PB0 (digital 0) ; when you push a button connected to PD0 ;----------------------------------------------- ; ; PB0 (normally 0V) -----> LED --> 220 Ohm ---> 5V ; ; PD0 (normally 5V) -----> Button ---> GND ; 
 .nolist .include "./m328Pdef.inc" .list 
 ;============== ; Declarations .def temp =r16 ; designate working register r16 as temp 
 ;================= ; Start of Program rjmp Init ; first line executed 
 ;============ Init: ser temp ; set all bits in temp to 1's. out DDRB,temp ; setting a bit as 1 on the Data Direction I/O ; register for PortB, which is DDRB, sets that ; pin as output, a 0 would set that pin as input ; so here, all PortB pins are outputs (set to 1) ldi temp,0b11111110 ; load the `immediate' number to the temp register ; if it were just ld then the second argument ; would have to be a memory location instead out DDRD,temp ; mv temp to DDRD, result is that PD0 is input ; and the rest are outputs clr temp ; all bits in temp are set to 0's out PortB,temp ; set all the bits (i.e. pins) in PortB to 0V ldi temp,0b00000001 ; load immediate number to temp out PortD,temp ; move temp to PortD. PD0 has a pull up resistor ; (i.e. set to 5V) since it has a 1 in that bit ; the rest are 0V since 0's. 
 ;====================== ; Main body of program: Main: in temp,PinD ; PinD holds the state of PortD, copy this to temp ; if the button is connected to PD0 this will be ; 0 when the button is pushed, 1 otherwise since ; PD0 has a pull up resistor it's normally at 5V out PortB,temp ; sends the 0's and 1's read above to PortB ; this means we want the LED connected to PB0, ; when PD0 is LOW, it sets PB0 to LOW and turn ; on the LED (since the other side of the LED is ; connected to 5V and this will set PB0 to 0V so ; current will flow) rjmp Main ; loops back to the start of Main 

Notez que cette fois, nous avons non seulement beaucoup plus de commentaires dans notre code, mais nous avons aussi une section d’en-tête qui donne des informations sur qui a écrit, quand il a été écrit, quel type de contrôleur, il a été écrit, et j’ai même inclus un schéma simple pour montrer comment vous construire le circuit. Le reste du code est également divisé en sections.

Après que vous avez compilé le code ci-dessus vous devriez charger sur le microcontrôleur et voir si elle fonctionne. La LED devrait allumer pendant que vous poussez le bouton et puis éteindre à nouveau quand vous laisser allez. Je vous ai montré ce que ça ressemble à la photo.

Articles Liés

Tutoriel d’assembleur AVR 11

Tutoriel d’assembleur AVR 11

Bienvenue au didacticiel 11 !Dans ce bref didacticiel, nous allons enfin construire la première partie de notre projet final.La première chose que vous devriez faire est d'aller à la toute dernière étape de ce tutoriel et voir la vidéo. Puis revenez
Tutoriel d’assembleur AVR 1

Tutoriel d’assembleur AVR 1

J'ai décidé d'écrire une série de tutoriels sur la façon d'écrire des programmes de langage d'assemblage pour le Atmega328p qui est le microcontrôleur utilisé dans l'Arduino. Si les gens restent intéressées, je vais continuer à mettre un une semaine
Tutoriel d’assembleur AVR 8

Tutoriel d’assembleur AVR 8

Bienvenue au didacticiel 8 !Dans ce bref didacticiel, nous allons prendre un peu d'une déviation de l'introduction de nouveaux aspects de la programmation en langage assembleur pour montrer comment déplacer nos composants de prototypage pour un circu
Tutoriel d’assembleur AVR 6

Tutoriel d’assembleur AVR 6

Bienvenue au didacticiel 6 !Tutoriel d'aujourd'hui sera un court où nous mettrons au point une méthode simple pour transmettre des données entre un atmega328p et un autre à l'aide de deux ports qui les relient. Nous puis prendre dés rouleau de tutori
Tutoriel d’assembleur AVR 9

Tutoriel d’assembleur AVR 9

Bienvenue au didacticiel 9.Aujourd'hui nous allons montrer comment piloter un afficheur 7 segments, mais aussi un affichage à 4 chiffres à l'aide de notre code en langage assembleur ATmega328P et AVR. Ce faisant cela que nous allons devoir prendre de
Tutoriel d’assembleur AVR 7

Tutoriel d’assembleur AVR 7

Bienvenue au didacticiel 7 !Aujourd'hui nous allons voir la première comment faire pour nettoyer un clavier et ensuite montrer comment utiliser les ports d'entrée analogiques pour communiquer avec le clavier.Nous ferons cela en utilisant les interrup
Tutoriel d’assembleur AVR 10

Tutoriel d’assembleur AVR 10

Bienvenue au didacticiel 10 !Désolé, qu'il a fallu si longtemps pour sortir cette nouvelle tranche mais c'est un moment assez intense de l'année. En tout cas, ici c'est !Nous avons parcouru un long chemin et vous êtes probablement déjà assez compéten
Tutoriel d’assembleur AVR 5

Tutoriel d’assembleur AVR 5

Aujourd'hui nous allons regarder de plus près aux divers emplacements mémoire dans le microcontrôleur Atmega328p et voir si nous pouvons mieux comprendre comment les choses sont stockés, où ils sont stockés et comment les pointeurs et les tables de r
Tutoriel d’assembleur AVR 4

Tutoriel d’assembleur AVR 4

Bienvenue au didacticiel numéro 4 !Dans ce tutoriel, nous allons construire un circuit qui simulera l'enroulement des deux dés. Ensuite, nous allons tout d'abord écrire un programme de force brute qui fait le travail. Puis nous permettra de simplifie
Tutoriel d’assembleur AVR 3

Tutoriel d’assembleur AVR 3

Bienvenue au didacticiel numéro 3 !Avant que nous commencions, je tiens à faire un point philosophique. N'ayez pas peur d'expérimenter avec les circuits et le code que nous construisons dans ces tutoriels. Changer les câbles près, ajouter de nouveaux
MRETV - vidéo, stéréo Sound et beaucoup plus d’un Arduino standard !

MRETV - vidéo, stéréo Sound et beaucoup plus d’un Arduino standard !

MRETV - vidéo, stéréo Sound et beaucoup plus d'un Arduino standard !Maintenant mis à jour pour Arduino 1.6.6 novembre 2015 !Utiliser seulement deux résistances et deux diodes pour générer la vidéo plein écran. Texte 47 x 29 de 8 x 8 caractères, doubl
Comment charger des programmes à un Arduino UNO de Atmel Studio 7

Comment charger des programmes à un Arduino UNO de Atmel Studio 7

Dans ce court Instructable, nous allons apprendre à charger un programme à une carte Arduino UNO utilisant Atmel Studio au lieu de l'IDE Arduino. Cela est utile lorsque vous avez besoin élaborer un programme à l'aide de plusieurs fonctions avancées o
Star Trek sonnette Hack

Star Trek sonnette Hack

J'ai toujours été un fan de la Star Treks et comme tel, j'étais très excité lorsque mon colocataire ramené un panneau la comm série style Star Trek original. Je n'avais jamais vu l'un d'entre eux, mais une recherche rapide nous a pris sur le site de
Carte de développement pour microcontrôleurs Attiny84

Carte de développement pour microcontrôleurs Attiny84

Il s'agit d'une carte de développement pour microcontrôleur Attiny84. Tha Attiny84 puce possède 11 broches adressables avec l'IDE Arduino, 8k de mémoire flash pour le stockage de programme et 512 octets de mémoire vive disponible pour les variables d