Tutoriel d’assembleur AVR 3 (3 / 9 étapes)

Étape 3: Blink.asm

Voici le code que nous allons discuter aujourd'hui :

 ;************************************ ; written by: 1o_o7 ; date: <2014|10|29> ; version: 1.0 ; file saved as: blink.asm ; for AVR: atmega328p ; clock frequency: 16MHz (optional) ;************************************ ; Program funcion:--------------------- ; counts off seconds by blinking an LED ; ; PD4 ---> LED ---> R(330 ohm) ---> GND ; ;-------------------------------------- .nolist .include "./m328Pdef.inc" .list ;============== ; Declarations: .def temp = r16 .def overflows = r17 .org 0x0000 ; memory (PC) location of reset handler rjmp Reset ; jmp costs 2 cpu cycles and rjmp costs only 1 ; so unless you need to jump more than 8k bytes ; you only need rjmp. Some microcontrollers therefore only ; have rjmp and not jmp .org 0x0020 ; memory location of Timer0 overflow handler rjmp overflow_handler ; go here if a timer0 overflow interrupt occurs ;============ Reset: ldi temp, 0b00000101 out TCCR0B, temp ; set the Clock Selector Bits CS00, CS01, CS02 to 101 ; this puts Timer Counter0, TCNT0 in to FCPU/1024 mode ; so it ticks at the CPU freq/1024 ldi temp, 0b00000001 sts TIMSK0, temp ; set the Timer Overflow Interrupt Enable (TOIE0) bit ; of the Timer Interrupt Mask Register (TIMSK0) sei ; enable global interrupts -- equivalent to "sbi SREG, I" clr temp out TCNT0, temp ; initialize the Timer/Counter to 0 sbi DDRD, 4 ; set PD4 to output ;====================== ; Main body of program: blink: sbi PORTD, 4 ; turn on LED on PD4 rcall delay ; delay will be 1/2 second cbi PORTD, 4 ; turn off LED on PD4 rcall delay ; delay will be 1/2 second rjmp blink ; loop back to the start delay: clr overflows ; set overflows to 0 sec_count: cpi overflows,30 ; compare number of overflows and 30 brne sec_count ; branch to back to sec_count if not equal ret ; if 30 overflows have occured return to blink overflow_handler: inc overflows ; add 1 to the overflows variable cpi overflows, 61 ; compare with 61 brne PC+2 ; Program Counter + 2 (skip next line) if not equal clr overflows ; if 61 overflows occured reset the counter to zero reti ; return from interrupt 

Comme vous pouvez le constater, mes commentaires sont maintenant un peu plus courte. Une fois que nous savons que les commandes dans le jeu d’instructions faire nous n’avez pas besoin d’expliquer que dans les commentaires. Nous avons seulement besoin d’expliquer ce qui se passe du point de vue du programme.

Nous serons en discutant ce que tout de ce fait pièce par pièce, mais d’abord nous allons essayer d’obtenir une perspective globale. Le corps principal du programme fonctionne comme suit.

Nous avons d’abord définir le bit 4 de PORTD avec « sbi PORTD, 4 » cela envoie un 1 à PD4 qui met la tension de 5V sur la broche. Ce sera son tour sur la LED. Nous avons ensuite sauter à la sous-routine de « retard » qui compte 1/2 seconde (nous vous expliquerons comment elle le fait plus tard). Nous revenons ensuite à cligner des yeux et désactivez le bit 4 sur PORTD qui définit PD4 à 0V et le LED s’éteint donc. Nous retarder puis un autre 1/2 seconde et puis sauter au début du blink avec « rjmp blink ».

Vous devez exécuter ce code et voir qu’il fait ce qu’il se doit.

Et là vous l’avez ! C’est tout ce code fait physiquement. Les mécanismes internes de ce que fait le microcontrôleur sont un peu plus compliqués et c’est pourquoi nous faisons ce tutoriel. Nous allons donc examiner chaque section à son tour.

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 2

Tutoriel d’assembleur AVR 2

Ce tutoriel est une continuation de "tutoriel d'assembleur AVR 1"Si vous n'avez pas passé par 1 tutoriel, vous devez arrêter maintenant et faire celui-là en premier.Dans ce tutoriel, nous allons poursuivre notre étude de programmation en langage
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
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