You are on page 1of 181

Les microcontrleurs

Illustration par le
Atmega328
Tamou NASSER
tamounasser@gmail.com
Bibliographie:
www.atmel.com

Plan
Prsentation gnrale
Elments constitutifs du microcontrleur ATMEGA 328
Programmation en langage assembleur
Les Ports dE/S
Les Interruptions
Les Timers
Le Convertisseur Analogique/Digital
Programmation en langage C (la carte ARDUINO)

Prsentation gnrale

DEFINITION
C' est une systme informatique de type circuit intgr, gnralement
utilis pour contrler un dispositif physique.

Un microcontrleur (au contraire d'un microprocesseur) rassemble


dans un unique circuit intgr, l'ensemble d'un systme
microprocesseur : CPU, RAM, ROM, circuits d'interfaces diverses,
etc....

Comme

un

microprocesseur,

un

microcontrleur

excute

squentiellement une suite d'instructions (un programme) en langage


assembleur

Du -processeur au -contrleur

Unit de
contrle
Unit
arithmtique
et logique

Instructions
Donnes

Mmoire
centrale
(ou principale)

Rsultats

Unit dchange

= processeur

= contrleur

Microcontrleur = Microprocesseur + Ram + Rom + E/S

Du -processeur au -contrleur

Caractristiques dun microcontrleur


Caractristiques spcifiques :
Puissance de traitement limit
Capacit mmoire raisonnable
Encombrement rduit
Consommation lectrique faible
Contraintes denvironnement importantes
Communication avec lextrieur (capteurs, actionneurs, )
Cot de srie faible

Applications des microcontrleurs


Automobile

(>50 microcontrleurs/voiture : capteurs

pression pneus, tableau de bord, climatisation, radio, gps,


alarme, boite vitesse, bus CAN
Ordinateurs (>20 microcontrleurs/PC : Usb, disque dur,
souris, clavier, cran,
lectromnager : lave-vaisselle, lave-linge, aspirateurs,
Domotique : thermostat, simulateur de prsence, alarme
Robotique : robots autonomes
Multimdia : TV, lecteur/enregistreur DVD, camescope,
8

Quand utiliser un microcontrleur ?


Le microcontrleur est en concurrence avec dautres technologies Suivants les
applications : 3 types de technologies
Logique cble trs rapide, fonctions ralises par une voie matrielle
non programmable, peu conomique quand lapplication est complexe peu de
souplesse : dure dtude prohibitif et circuit difficilement modifiable
Rseaux de logique programmables (PAL, PLD, CPLD, FPGA,..) rapide,
adapt au traitement de signaux complexes, prix lev et langage de
programmation non standard
Les processeurs grande souplesse : fonctions sont ralises par voie
logicielle puissance de calcul, langage volu, nombre important de composant
runir, solution onreuse
9

Familles de microcontrleurs
la famille Atmel AT91 , Atmel AVR ;
le C167 de Siemens;
lIntel 8085 , Intel 8051
la famille Motorolla 68HC11, 68HC08 , 68HC12 ;
la famille des PIC de Microchip ;
la famille des ST6, ST7, ST10, STR7, STR9 de
STMicroelectronics ;
la famille ADuC d'Analog Devices ;
la famille MSP430 de Texas Instruments ;
la famille LPC21xx ARM7-TDMI de Philips ;
10

La famille AVR
AVR (Advanced Virtual RISC) : terme utilis par Atmel pour dsigner
le cur du processeur et la famille de microcontrleurs RISC partir de
1996.

Caractris par :

- Architecture RISC
- Architecture Harvard :
- Structure en Pipe Line

11

RISC & CISC


Architecture RISC: Architecture jeu dinstruction rduit
(Reduced Instruction Set Computer):
Architecture CISC : Architecture jeu dinstruction complexe
(Complex Instruction Set Computer)
RISC
<100 instructions
Format fixe
Vitesse typique :
1 instruction dure
1 cycle
Avantages
Puce plus petite
Frquence plus leve
Excution plus rapide
Inconvnients
Compilateur complexe
( dvelopper)
Programmes longs
(plus de mmoire)

CISC
>200 instructions
Format variable
Vitesse typique :
1 instruction dure
3-10 cycles
Avantages
Dveloppement
plus simple
Trs rpandu
Inconvnients
Puce plus grosse, plus complique
volutions limites
Plusieurs cycles
par instruction

12

Architecture
Architecture de Von Neumann :
Une mmoire pour le programme et les
donnes.
Double utilisation des BUS donnes et
dadresses.
Architecture Harvard :
mmoires programme et donnes
distinctes,
bus programme et donnes distincts,
transfre simultan des instructions
excuter et des donnes.
modle plus rapide que Von Neumann
Le gain en performance est obtenu au
dtriment de la complexit interne de la
structure

13

Structure en Pipe Line


Dcomposition des tches
Optimisation pour larchitecture RISC
Prparation de linstruction suivante durant lexcution
de celle prsente
Squencement
movlw 0xFF
movwf Portb
call sub1
movf Portc,w

14

Applications
Mdical
Electrocardiograph (ECG)

Mcatronique,

reprsentation graphique de l'activit lectrique du cur

15

Les diffrentes familles AVR

16

Les diffrentes familles AVR

17

Les diffrentes familles AVR

18

Les diffrentes familles AVR

Les microcontrleurs AVR sont raliss en technologie CMOS haute vitesse, ce


qui leur confre tout la fois une faible consommation, une vitesse de
fonctionnement importante, et un haut niveau dintgration.

19

Les Modles ATMEGA AVR

20

Les Modles ATMEGA AVR

21

Elments constitutifs du microcontrleur ATMEGA 328

22

Architecture AVR - ATMEGA ATmega328

Two Wire Interface

23

Architecture AVR - ATMEGA ATmega328


Composants :
Alimentation: 1.8 - 5.5V
Horloge: 20MHz
CPU AVR
Timers et Watchdog
Mmoires: Falsh 32KB, SRAM 2K, EEPROM
Convertisseur A/N, Comparateur analogique
Interfaces : trois ports I/O
Communications: USART, SPI
Contrleur dInterruptions
PWM: 8bit T/C0, 1,2
Bus internes
Temperature Range:-40C to 85C

24

Description matrielle
Rfrence: ATMEGA 328P (plusieurs packages)
AT = Le composant est cr par ATMEL
Mega = Le composant fait partie de la srie des,
megaAVR.
328 = Le composant possde 32 Ko de mmoire
flash, et un CPU 8 bits.

25

Description matrielle

26

Description matrielle

27

Description matrielle : CPU AVR


Central Processing Unit

Instruction
Fetch and
Decode

ALU

28

Description matrielle : CPU AVR


Registre SREG (Status Register)

29

Description matrielle : CPU AVR


Registre SREG (Status Register)

30

Description matrielle : CPU AVR


Les registres de travail :AVR CPU General Purpose Working Registers
Le cur AVR combine un jeu de 131 instructions riches avec 32 registres
spciaux travaillants directement avec l'Unit Arithmtique et Logique ALU,
qui reprsente le registre Accumulateur A (B ou D) dans les microcontrleurs
classiques.
Les 32 registres sont dtaills dans le tableau qui suit avec ladresse effective
dans la mmoire SRAM :

EX :
ADD R4, R10
(R4) + (R10)

R4

31

L'Horloge Systme et Option

32

Le Plan Mmoire
Trois types de mmoire sont utiliss dans la srie ATMEGA, la mmoire programme
FLASH, la mmoire de donne SRAM et la mmoire morte de type EEPROM.

In-System
Memory

Reprogrammable

Flash

Program

The ATmega328/P contains 32Kbytes On-chip In-System


Reprogrammable Flash memory for program storage. Since
all AVR instructions are 16 or 32 bits wide, the Flash is
organized as 16K x 16.
For software security, the Flash Program memory space is
divided into two sections :
- Boot Loader Section
-Application Program Section in the device .
The Flash memory has an endurance of at least 10,000
write/erase cycles. The ATmega328/P Program
Counter (PC) is 14 bits wide, thus addressing the 16K
program memory locations.

33

Le Plan Mmoire
SRAM Data Memory
The lower 2303 data memory locations address both the Register File, the I/O memory,
Extended I/O memory, and the internal data SRAM. The first 32 locations address the
Register File, the next 64 location the standard I/O memory, then 160 locations of
Extended I/O memory, and the next 2K locations address the internal data SRAM

34

Le Plan Mmoire

La Mmoire EEPROM
L'EEPROM est une mmoire programmable et effaable lectriquement.
La particularit de cette mmoire et de pouvoir garder les informations
stockes longtemps mme hors tension. L'ATMEGA328 contient 1024
octets de donnes dans la mmoire EEPROM. Elle est organise comme
un espace de donn spar, dans lequel des octets simples peuvent tre
lus et crits. L'EEPROM a une endurance d'au moins 100,000 cycles
dcriture/effacement.

35

Programmation en langage
assembleur

36

Modes dadressage
Adressage de registres
Adressage direct registre: selon le code opration:

Adresser un registre de destination en mode criture: Rd


Adresser un registre de rception mode lecture: Rr
32 registres
Ladresse est constitue de 5 bits

37

Modes dadressage
Adressage dune Entre/Sortie
Adressage direct dune Entre/Sortie:
La valeur de A dsigne ladresse: 6 bits

64 adresses

38

Modes dadressage
Adressage de la mmoire de donnes
Adressage direct:
linstruction est code sur 32 bits dont les 16 bits
de poids faible correspondent ladresse dune
case de la mmoire de donnes.

Adressage direct avec dplacement:


Adresse= (Y, Z) + q

39

Modes dadressage
Adressage de la mmoire de donnes
Adressage indirect: ladresse est stocke dans un
registre (X,Y,Z).

Adressage indirect avec pr-dcrmentation:


Adresse= (X,Y, Z) -1

Adressage indirect avec post-incrmentation:


Adresse= (X,Y, Z)
(X,Y,Z= Adresse+1

40

Modes dadressage
Adressage de la mmoire de programmes
Adressage de la mmoire de programmes:

Linstruction est code sur 16 bits:


Adresse sur 15 bits est suffisante
Localiser une instruction.
Les deux octets sont lus par les deux
valeurs du LSB: 0,1.

41

Modes dadressage
Adressage direct de la mmoire de programme
JMP, CALL Direct Program Memory Addressing

42

Modes dadressage
Adressage direct de la mmoire de programme
IJMP, ICALL Indirect program memory addressing

43

Modes dadressage
Adressage relatif de la mmoire de programme
RJMP, RCALL Relative program memory addressing

44

Le jeu dinstructions
Arithmetic Instructions

45

Le jeu dinstructions
Logical Instructions

46

Le jeu dinstructions
Jump and Call Instructions

47

Le jeu dinstructions
Skip and Branch Instructions

48

Le jeu dinstructions
Skip and Branch

49

Le jeu dinstructions
Move, Load

50

Le jeu dinstructions
Store

51

Le jeu dinstructions

Load/Store Program Memory

52

Le jeu dinstructions
Move, I/O, Push/Pop

53

Le jeu dinstructions
Shift and Bit Instructions

54

Le jeu dinstructions
Bit Instructions

55

Les Ports dE/S

56

LES ENTREES/SORTIES NUMERIQUES (PORTX)


Les entres-sorties sont rparties dans 3 groupes de broches appels ports.
Le port B regroupe les broches notes PBx, le port C les broches PCx et le port D les
broches PDx.
Chaque port est configur/expoit grce 3 registres.
PORTx = pour l'criture de valeurs en sortie
DDRx = dtermine la direction de chaque broche du port (1-sortie 0-entre)
PINx = permet la lecture de la valeur en entre
Chaque broche de port E/S a une rsistance de pull-up interne qui peut tre dsactive.
Le bit PUD du registre MCUCR permet la dsactivation des rsistances de pull-up.

57

LES ENTREES/SORTIES NUMERIQUES (PORTX)

58

LES ENTREES/SORTIES NUMERIQUES (PORTX)

Protection I/O
Contre les surtensions (>VCC)

Contre la tension
inverse

59

LES ENTREES/SORTIES NUMERIQUES (PORTX)

Entre (PIN Input)

60

LES ENTREES/SORTIES NUMERIQUES (PORTX)

Sortie (PIN Output)

61

LES ENTREES/SORTIES NUMERIQUES (PORTX)

Pin Input PORT controls pullup

62

LES ENTREES/SORTIES NUMERIQUES (PORTX)


Connecter une LED

Connecter des boutons poussoirs

63

LES ENTREES/SORTIES NUMERIQUES (PORTX)

Exemple de programmation
Lexemple qui suit permet de configurer le port B avec les 4 bits de poids faible en sortie
avec les deux derniers bits 0&1 ltat haut (1).
Aprs initialisation du port, un temps dattente est positionn pour la synchronisation et
une lecture du port est ralise.

ldi r16, b00000011 ; R16 deux bits en haut


ldi r17, b00001111 ; R17 4 bits en sortie
out DDRB,r17 ; Initialise la direction
out PORTB,r16 ; Initialise le port B
nop ; Pour la synchronisation
in r16,PORTB ; Lecture du port B complet

64

Programmation en langage C des microcontrleurs


La majorit des microcontrleurs sur le march actuel disposent parmi leurs outils de
dveloppement dun compilateur C.
Ces compilateurs utilisent le langage small c qui reprend un large sous-ensemble
des fonctionnalits du langage C de la norme AINSI.
Structure dun programme en langage C
#include <avr/io.h>
#define F_CPU 16000000UL
Void Tempo (unsigned long valeur);
Int i;
Void main (void)
{ DDRB = 0x01;
PORTB = 0x01;
while(1)
{ PORTB = 0x01;
Tempo(1000);
PORTB = 0x00;
Tempo(1000);
}
}

//dclaration de la fonction Tempo


//dclaration dune variable globale
// Fonction principale
// Initialisation

65

Programmation en langage C des microcontrleurs


Void Tempo (unsigned log valeur)
{
unsigned long j;
// Dclaration dune variable locale
for (j = 0; j<valeur; j++)
{}
// on ne fait rien
}

Exemples de quelques include


delay.h : si des dlais en millisec onde, ou en microseconde doivent tre effectus.
Il y a deux fonctions qui permettent de raliser un dlai:
_delay_ms (float time) et _delay_us (float time).
interrupt.h : si les interruptions sont utilises.
math.h : si des oprations mathmatiques comme cosinus, sinus, etc. sont utilises

66

Programmation en langage C des microcontrleurs


Exemple : Clignotement du PORTB avec un rythme de 100ms
#include<avr/io.h>
#include<util/delay.h>
void main(void) {
Int i = 0;
DDRB=0xFF;
while(1) {
PORTB=0x00;
for (i=0; i<=3;i++)
{
_ delay_ms(25); }
PORTB=0xFF;
For (i=0; i<=3;i++)
{
_delay_ms(25);
}
}

//Variable Temporaire
//Port B en sortie
//Tout les pins du PortB 0
//Dbut du dlai 4*25ms = 100ms
//Fin du dlai de 100ms
//Tout les pins du PortB 0
//dlai 4*25ms = 100ms

//Fin dlai 100ms

67

Programmation en langage C des microcontrleurs


Dclaration dune fonction

B
B
B
B
B
B
B
B

68

Programmation en langage C des microcontrleurs


Dfinition des types les plus employs

69

Programmation en langage C des microcontrleurs


Les oprateurs de base

70

Programmation en langage C des microcontrleurs


Les oprateurs de base

71

Programmation en langage C des microcontrleurs


Les oprateurs de base

72

Programmation en langage C des microcontrleurs


Les oprateurs de base

73

Programmation en langage C des microcontrleurs


Les structures de contrles
La structure IFELSE
La structure SWITCH..CASE
La structure WHILE
La structure DOWHILE
La structure FOR
Les Fonctions
Le Le corps dune fonction est dlimit par des accolades { .. }.
Un programme C doit se composer de plusieurs fonctions pour permettre une
meilleure lisibilit et maintenance du programme.
La fonction main () est excute en premier, elle gre le bon droulement du
programme et l'change des donnes entres les autres fonctions.

74

Programmation en langage C des microcontrleurs


Exemple :
Lecture de ltat de 8 intrs branchs sur le port B et affichage du rsultat sur 8
LEDs branches sur le port D
char valeur;
void init (void);
void lecture (void);
void affiche (void);
void main(void){
init();
lecture();
affiche ();}
void init(void){
DDRB=0x00;
PORTB=0x00;
DDRD=0xFF;
PORTD=0x00;}
void lecture (void){
valeur=PINB;}
void affiche (void){
PORTD=valeur; }

char valeur;
void main(void)
{
DDRB=0x00;
PORTB=0x00;
DDRD=0xFF;
PORTD=0x00;
valeur=PINB;
PORTD=valeur;
}

75

Programmation en langage C des microcontrleurs


Solution 1
Le programme est plus long crire,
le code gnr est plus important (89 mots au lieu de 83 pour l'exemple
droite),
mais la fonction main est structure et gre les appels des fonctions
ncessaires la ralisation de notre programme.
La tache ralise par ce programme est plus lisible et comprhensible par une
tierce personne, ceci facilite et amliore les oprations de maintenance.
Solution 2
L'criture est simplifie,
mais la tache ralis par le programme est plus difficile dterminer.
Pour une tache plus complique la lecture du programme par une tierce
personne peut devenir rapidement trs difficile voire impossible.

76

LES ENTREES/SORTIES NUMERIQUES (PORTX)


Exercice 1 : Unit de contrle portes-voiture
Dans une unit de contrle-automobile, un ensemble de cinq capteurs TOR (tout ou rien) sont
exploits pour dtecter les tats de quarte portes et le coffre selon le branchement suivant :
Porte Avant Droite
: PD0
Porte Avant Gauche : PD1
Porte Arrire Droite : PD2
Porte Arrire Gauche : PD3
Porte Coffre
: PD4
Un niveau logique 0 indique que la porte est ouverte ; niveau 1 indique que la porte est ferme.
Pour signaler ltat des portes sur le tableau de bord, un voyant rouge est branch sur PC0
( 0 : allum, 1 : teint).
1- Donner, en binaire et en hexa dcimal, le contenu des registres de configuration DDRC et DDRD.
2- Prciser le code de la fonction dtat des portes note par int etatPortes(void) qui retourne 1 si
toutes les portes sont fermes, 0 sinon.
3- Donner le code de la fonction void signalisation(int etat) qui allume le voyant si au moins une
porte est ferme.
4- En dclarant les variables ncessaires, donner le code de la fonction principale void
main(void) pour le traitement global de lunit.
5- Version avec scanner : afin de communiquer les donnes internes de la voiture lanalyseur
lectronique, on demande dcrire le code de la fonction void analysePortes(void) qui transmet
ltat de chaque porte. Dans ce cas, on suppose que la fonction de transmission est disponible void
scanner(char *str) .
77

LES ENTREES/SORTIES NUMERIQUES (PORTX)


Exercice 2 : Niveau dun rservoir
On se propose de programmer un module daffichage du niveau du carburant dun rservoir sur une
barre graphique de cinq niveaux, branche sur le port B. Le niveau du rservoir est reu sous forme
de 8 bits sur le port D. Deux voyants dalerte sont utiliss comme suit :
Si le niveau est infrieur 15% du niveau global, un voyant orange branch sur PC1 est allum.
Si le niveau est infrieur 5% du niveau global, un voyant rouge branch sur PC0 est allum.
Donner, en binaire et en hexa dcimal, le contenu des registres de configuration DDRB, DDRC,
DDRD.
1- Donner le code de la fonction daffichage du niveau void affichage (int niveau) .
2- Donner le code de la fonction dalerte void alerte (int niveau) .
3- En dclarant les variables requises, donner le code du programme complet.

78

LES ENTREES/SORTIES NUMERIQUES (PORTX)


Exercice 3: Niveau dun rservoir
1) On dsire crire un programme C qui ne fait rien si on
n'appuie sur aucun bouton poussoir, fait clignoter la LED
rouge si l'on appuie sur un bouton, fait clignoter la led
verte si on appuie sur l'autre bouton, et les deux LEDs si
l'on appuie sur les deux boutons.
1-a) Donner les 4 valeurs possibles de la variable
interrupteurs avec l'instruction interrupteurs = PINB &
0x60; en remplissant en binaire et en hexadcimal cidessous

79

LES ENTREES/SORTIES NUMERIQUES (PORTX)


Exercice 3: Niveau dun rservoir
1) Complter alors le morceau de code ci-dessous pour en faire un
programme :

2) Peut-on modifier facilement le programme pour que les deux LEDs


fonctionnent deux frquences diffrentes ?

80

LES ENTREES/SORTIES NUMERIQUES (PORTX)


Exercice : Faire clignoter la LED (PB5)

81

LES ENTREES/SORTIES NUMERIQUES (PORTX)

PORTB &= ~(1<<PORTB5); // Mettre le bit 5 de PORTB 0


Explication : PORTB est une constante qui vaut 5.
1<<PORTB5 signifie "dcaler la valeur (0000 0001)b de 5 bits vers la gauche"
Donc, (1<<PORTB5) reprsente (0010 0000)b
Ensuite ~(1<<PORTB5) reprsente l'inverse bit a bit soit (1101 1111)b
Enfin, PORTB &= ~(1<<PORTB5) signifie PORTB = PORTB & B11011111

82

INTERRUPTIONS
Une interruption est un signal demandant au processeur de suspendre
temporairement lexcution du programme courant afin deffectuer des
oprations particulires.
Intrt: Ce mcanisme permet dimplmenter une raction une sollicitation
offrant un dlai de rponse trs bref,
programme de faon indpendante du code en cours dexcution.
Les interruptions peuvent tre dclenches soit par un composant extrieur au
processeur:
changement de valeur logique une entre dsigne
soit par le processeur lui-mme:
chance dune temporisation,
interruption logicielle,
...
83

INTERRUPTIONS
Mcanismes de traitement dune interruption :
Lors dune interruption le processeur excute la squence suivante :
- le bit I du registre dtat (SREG) est mis 0 (inhibition des autres sources
dinterruption)
- lexcution du programme en cours est interrompue
- le contenu du PC est sauvegard dans la pile
- le PC est charg avec la valeur de ladresse dinterruption
- linstruction de saut ladresse de traitement de linterruption est excute
- le programme de traitement dIT est excut
- la fin du programme, linstruction RETI restaure le contenu du PC
- le bit I du registre dtat (SREG) est mis 1 (validation des autres sources
dinterruption).
Remarque : lors dune interruption, le processeur ne sauvegarde pas le
contexte (tat des registres de travail et registre dtat SREG). Il est donc
important de sauvegarder au moins le registre dtat en dbut du sousprogramme dinterruption et de le restituer la fin en utilisant les instructions
PUSH et POP.
84

INTERRUPTIONS
Sources d'interruption exploitables sur ATMega328
Il existe deux types dinterruptions :
- les interruptions externes (broches du circuit INT0, INT1 )
- les interruptions internes provoques par les priphriques intgrs.

85

INTERRUPTIONS

86

INTERRUPTIONS
Relation entre broches et les interruptions
externe pour ATMega 328

NB :
Les interruptions restent fonctionnelles
mme si les pins INT0, INT1 ou PCINT 0
23sont configures en sortie.

87

INTERRUPTIONS
Interruptions Externes
Il s'agit d'interruptions lies a des niveaux ou des changements dtats de
broches du microcontrleur
Les broches impliques doivent tre configures en entre .
Broches INT0 (PD2)/INT1(PD3) : configurables pour dclencher les
interruptions (n 2 et 3) sur niveau 0, front ngatif ou positif.
La cause d'interruption est choisie par le registre EICRA

88

INTERRUPTIONS

89

INTERRUPTIONS

1. Quand un ISR ( Interrupt Service Routine) est appele le microcontrleur dsactive


automatiquement les interruptions le temps de l'excution de l'ISR.
1. Les variables partages entre l'ISR et le reste du programme doivent tre dclares
volatile volatile unsigned nom_de_la_variable;

90

INTERRUPTIONS

91

INTERRUPTIONS

92

INTERRUPTIONS
Exercice
Programme qui utilise linterruption INT0 comme suit : Chaque
fois que lentre PD2 passe de 1 0, la LED branche sur RB5
clignote 4 fois au rythme de la seconde

93

INTERRUPTIONS
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h> // _delay_ms
ISR(INT0_vect) {
PORTB^=1<<PORTB5;
_delay_ms(100); }
int main(void)
{
MCUCR &=~1<<PUD;
DDRD &= ~1<<PORTD0; //int0 sur PD2
DDRD |= 1<<PORTD0; //int0 sur PD2
PORTD |= 1<<PORTD0; //pullup on
DDRB |=1<<PORTB5;
DDRB |=1<<PORTB1;
PORTB &= ~1<<PORTB5;
PORTB &= ~1<<PORTB1;
EIMSK = 1<<INT0; //enable int0
sei(); //enable interrupts
while(1)
{PORTB^=1<<PORTB1;
_delay_ms(200);
} }

94

INTERRUPTIONS
Pin Change Interrupt"
Broches PCINT0 PCINT23 : configurables
pour dclencher des interruptions (n 4,5 et 6)
sur des changements dtat ("Pin Change") des
broches (configures en entre DDRx.n=1).
Les broches sont spares en 3 sous-groupes,
il y a une source d'interruption par sousgroupe, et pour chaque broche on peut activer
ou non le systeme Pin Change Interrupt
L'interruption PCI2 (IT n6) a lieu sur
changement de l'une des broches PCINT23.16
l'interruption PCI1 (IT n5) sur les
changements dtat de PCINT14..8,
l'interruption PCI0 (ITn4) a lieu sur les
changements d'etat des broches PCINT7..0.
Les registres PCMSK2, PCMSK1 and
PCMSK0 contrlent quelles broches peuvent
conduire (ou non) a une interruption de type
"pin change".
95

INTERRUPTIONS

96

INTERRUPTIONS

97

INTERRUPTIONS
EXERCICE 2
Programme qui fait inverser ltat de la LED branche sur RB1
chaque fois quil y a changement sur PC5(PCINT13) qui conduit
linterruption PCI1

98

Timers/Counters de ATMega328
Les microcontrleurs AVR disposent de modules de temporisation/comptage
internes, fonctionnant pour certains avec des registres de comptage sur 8 bits, et pour
d'autres sur 16 bits.
Ils peuvent tre utiliss pour gnrer des temporisations prcises, compter des
vnements, mesurer des priodes ou frquences de signaux, gnrer des signaux
PWM pour le contrle en vitesse de moteurs courant continu par exemple
Fonction Temporisateur : lorsque l'on compte des "ticks" de l'horloge qui cadence
le microcontrleur, on mesure du temps.
Fonction Compteur : lorsque l'on compte des fronts sur une entre de comptage
(broches T0 ou T1), on utilise alors la fonction "compteur" du module.
Gnration de signaux priodiques : les modules Timers/Counters sont assez
complexes et chacun de ces modules peut gnrer deux signaux PWM dont le rapport
cyclique est facilement modifiable.

99

Timer/Counter0
Le Timer/Compteur0 est un compteur 8 bits avec les particularits principales :
Remise 0 du compteur sur Comparaison (Rechargement Automatique)
Deux fonctions de comparaison et de gnration de signaux PWM
Gnrateur de Modulation de Phase en Largeur d'Impulsion (PWM)
Interruption sur Dbordent et Comparaison (TOV0, OCF0A, et OCF0B).
Gnrateur de Frquence
Compteur d'vnement Externe

100

Timer/Counter0
Le Timers/Compteur0 reoit son horloge de puis la sortie dun pr-diviseur interne ,
programmable sur plusieurs taux, travaillant partir de lhorloge systme.
Il peut galement fonctionner partir dune source dhorloge externe applique la
patte TO du microcontrleur

101

Timer/Counter0

102

Timer/Counter0
Le Timer0 sans PWM
Voici la vue le synoptique simplifi du Timers/Compteur 8 bits sans mode PWM.

103

Timer/Counter0

104

Timer/Counter0
Le registre TIMSK
TOIE0

Le registre TIFR
TOV0

105

Timer/Counter0
Le Timer0 avec PWM
Voici la vue le synoptique simplifi du Timers/Compteur 8 bits avec mode PWM.

106

Timer/Counter0
Fonctionnement du Timer/Compteur0
Le coeur du Timer0 est le registre de comptage sur 8bits appel TCNT0
Le contenu de ce compteur peut tre compar au contenu de deux registres appels
OCR0A et OCR0B
Le choix de la source dhorloge clkT0 peut tre lhorloge interne, via le pr diviseur, une
horloge externe sur la broche T0 (PB0) ou inactif quand aucune source d'horloge n'est
choisie.
Le registre de commande TCCR0 permet de choisir parmis les 4 modes de
fonctionnement.
La demande dinterruption est visible dans le registre TIFR0.
Toutes les interruptions sont individuellement masques dans TIMSK0
Le Gnrateur de Forme d'onde emploi les bits COM01x et COM00x pour dfinir l'tat
dOC0x.

107

Timer/Counter0
Sous-ensemble de comptage
La partie ddie au comptage est organise comme indiqu ci-dessous

108

Timer/Counter0
Unit de comptage
Le registre TCNT0 est sous le controle dun bloc logique qui lui transmet son
horloge, le remettre zero ou bien encore changer son sens de fonctionnement
Ce bloc reoit galement deux informations manant des units de comparaison:
- TOP : qui signale que le registre TCNT0 a atteint la valeur max quon lui a
assign dans la squence de comptage.
- BOTTOM : indique que le registre TCNT0 est arriv 0
Lorsque le registre TCNT0 dborde, le bit TOV0 est positionn, ce qui peut gnrer
une interruption si le timer y a t autoris

109

Timer/Counter0
Units de comparaison du timer0
Le Timer0 contient deux units de comparaison qui sont organises comme indiqu
la figure ci-dessous

110

Timer/Counter0
Units de comparaison du timer0
Le comparateur compare en permanence le contenu du registre TCNT0 avec un
des registres de comparaison OCR0A et OCR0B et signale une galit au moyen du
bit OCF0A ou OCF0B qui peut gnrer une interruption sil y a t autoris .
Cette information est galement envoy au gnrateur de signaux qui, en accord
ave les informations TOP et BOTTOM et la programmation des bits WGM02
WGM01 et des bits COM0x1 et COM0x0, agit en consquence sur la patte de
sortie OC0X

111

Timer/Counter0
Modes de fonctionnement
1- Mode Normal
Le mode normal est le mode de fonctionnement le plus simple (WGM01:0 0). Dans
ce mode le comptage est toujours incrmental sans remise 0 manuel du compteur.
Il passe par le maximal $FF en dbordant, le drapeau TOV0 est mis 1, puis le
compteur repart au dbut $00., combin avec linterruption de dbordement du Timer,
le drapeau TOV0 peut tre remis 0 automatiquement.
Une nouvelle valeur peut tre crite n'importe quand dans le registre TCNT0.
Le Timer combin avec lunit de comparaison OCR0x peut tre employe pour
produire une interruption de comparaison lorsque le contenu du registre TCNT0 est
gal lun des registres de comparaison OCR0x.
L'utilisation de cette possibilit nest pas recommande pour la production de forme
d'onde, puisque cela occupera trop de temps CPU, le mode suivant est prfrable pour
cela.

112

Timer/Counter0
1- Mode remise zro sur comparaison russie
CTC mode (Clear Timer on Compare match)
Le mode CTC (WGM02:0 =0x02), le registre OCR0A est employ pour dfinir la
rsolution du compteur.
Le compteur est incrmente et quant la valeur est gale OCR0A, le compteur est
remis $00 et le drapeau OCF0A est mis 1 pour dclencher une ventuelle interruption.
L'OCR0A dfinit la valeur suprieure pour le compteur donc sa rsolution.
Ce mode peut tre utilis pour gnrer des signaux de frquence programmable sous
rserve de configurer les bits COM0x1 et COM0x0 de faon faire changer dtat la
sortie OC0A sur chaque comparaison russie.

113

Timer/Counter0
1- Mode remise zro sur comparaison russie
CTC mode (Clear Timer on Compare match)
Le drapeau OCF0A est automatiquement remis 0 lors de lexcution de linterruption.
Ce mode permet de mieux contrler la frquence produite.
La frquence maximum que peut produire le Timer0 est fonction de la formule suivante :

Avec :
N le rapport du pr-diviseur (1, 8, 64, 256 ou 1024) ,
Fclk_I/O tant la frquence dhorloge du quartz.

114

Timer/Counter0
2- Mode PWM rapide

115

Timer/Counter0
2- Mode PWM rapide

The Timer/Counter Overflow Flag (TOV0) is set each time the counter reaches TOP. If
the interrupt is enabled, the interrupt handler routine can be used for updating the
compare value.
116

Timer/Counter0
2- Mode PWM rapide

117

Timer/Counter0
3- Mode PWM correct en phase

118

Timer/Counter0
Register Description
TC0 Control Register A (TCCR0A)

119

Timer/Counter0
Register Description
TC0 Control Register A (TCCR0A)

120

Timer/Counter0
TC0 Control Register A (TCCR0A)
Compare output mode, Non-PWM

121

Timer/Counter0
TC0 Control Register A (TCCR0A

122

Timer/Counter0

123

Timer/Counter0
TC0 Control Register B : TCCR0B

Bit 7 FOC0A: Force Output Compare A


-Ce bit nest actif que lorsque le circuit ne foctionne pas en mode PWM
- il doit tre toujours positionn zero lorsque le timer ne fonctionne pas en mode PWM
- Lorsque ce bit est mis 1, une comparaison valide est force vis--vis du gnrateur de
signaux ce qui permet dagir sur la sortie OC0A comme si une vritable comparaison
valide avait lieu.
Bit 6 FOC0B: Force Output Compare B
Mme chose que FOC0A sauf que ce dernier agit sur la sortie OC0B

-Bit 3 WGM02 : Waveform Generator Mode


Ce bit sert dfinir le comportement du gnrateur de signaux et de ses paramtres
conformment aux indications du tableau prcdent

124

Timer/Counter0
Bits 2:0 CS0[2:0]: Clock Select 0 [n = 0..2]
Ces bits servent dfinir la source dhorloge utilise par le Timer0 conformment
aux indications du tableau suivant

125

Timer/Counter0
Les interruptions relatives ce Timer sont gres au moyen de deux registres ,
un registre de masque dinterruption TIMSK0
Et un registre de drapeaux TIFR0.
Ces registres sont organiss comme suit :
TC0 Interrupt Mask Register TIMSK0

Bit 2 OCIEB: Timer/Counter0, Output Compare B Match Interrupt Enable


Lorsquil est mis 1, ce bit autorise la gnration dune interruption lors dune
comparaison russie au niveau du registre OCR0B (OCF0B = 1)
Bit 1 OCIEA: Timer/Counter0, Output Compare A Match Interrupt Enable
Lorsquil est mis 1, ce bit autorise la gnration dune interruption lors dune
comparaison russie au niveau du registre OCR0A (OCF0A = 1)
Bit 0 TOIE: Timer/Counter0, Overflow Interrupt Enable
Lorsquil est mis 1, ce bit autorise la gnration dune interruption lors dun
dbordement du registre de comptage TCNT0 (TOV0 =1)

126

Timer/Counter0
TC0 Interrupt Flag Register TIFR0

Bit 2 OCFB: Timer/Counter0, Output Compare B Match Flag


- Ce bit est mis 1 lors dune comparaison russie au niveau du registre OCR0B.
- Il es automatiquement remis zro lors de lxcution du programme dinterruption
correspondant, si cette drnire est autorise, si non, il peut tre remis manuellement
zro en crivant un 1 son emplacement
Bit 1 OCFA: Timer/Counter0, Output Compare A Match Flag
- Ce bit est mis 1 lors dune comparaison russie au niveau du registre OCR0A.
- Il es automatiquement remis zro lors de lxcution du programme dinterruption
correspondant, si cette drnire est autorise, si non, il peut tre remis manuellement
zro en crivant un 1 son emplacement
Bit 0 TOV: Timer/Counter0, Overflow Flag
-Ce bit est mis 1 lors dun dbordement du registre de comptage TCNT0
127

Timer/Counter0
Trois autres registres 8 bits accessible en lecture et en criture sont aussi prsents dans
ce Timer :
-Le registre de comptage TCNT0
-Le registre de comparaison A (OCR0A)
- Le registre de comparaison B (OCR0B)

128

Timer/Counter0
Exercice 1 : Timer0
Donner le programme C qui utilise le Mode CTC pour raliser un signal de priode 4ms
sur le bit OC0A. La frquence du quartz sera de 16Mhz.
Exercice 2 :
Modifier le programme suivant pour raliser un clignotement du Hertz sur une Led
connecte sur le bit b4 du PORTB
1- Quelle la frquence relle de lxecution du code de linterruption
2- Raliser les modifications du code sans changer les valeurs du prescaler et du registre
OCR0A

129

Timer/Counter0

130

Timer/Counter0
Exercice 3
Le timer 0 possde des blocs de comptage et de comparaison de 8 bits. Sa frquence
de travail dpend de la frquence du microcontrleur FCK = 1 MHz et du diviseur
Prescaler
PVal = 1024. On se propose dactiver la broche PB5 en mode Toggle (basculement)
chaque interruption de fin de comptage : MaxValue (timer overflow). La dure du
timer overfloW est note TOV.
1- Exprimer la relation entre TOV , FCK, Pval et MaxValue.
2- Exprimer la frquence Fout du signal gnr sur la broche PB5.
3- Prciser les valeurs CS00 , CS01 et CS02 pour avoir un prescaler de 1024.
4- Calculer les valeurs pour assurer une frquence de sortie Fout = 10Hz ;
5- Donner le code de configuration pour :
Configurer la broche B5 en sortie
Activer les interruptions
Commander PB5 en mode toggle
Exercice 4: PWM
Produire un signal PWM sur la sortie PD6 (OC0A) avec un rapport cyclique de 7/8 .
Le signal dhorloge du circuit est FCPU = 1MHz.

131

Timer/Counter0

132

Prsentation de la plateforme ARDUINO

133

Prsentation de la plateforme ARDUINO

134

Prsentation de la plateforme ARDUINO

135

Prsentation de la plateforme ARDUINO


Fonction: Arduino est une plate-forme de prototypage rapide de
produits programmables.
lments:
carte lectronique
d'un environnement de programmation.

Carte ARDUINO UNO

Caractristiques
136

Prsentation de la plateforme ARDUINO

137

Prsentation de la plateforme ARDUINO


Affectation des broches

138

Prsentation de la plateforme ARDUINO


Broches numriques
Digital pins:
Pins 0 7: PORT D [0:7]
Pins 8 13: PORT B [0:5]
Pins 14 19: PORT C [0:5] (Arduino analog pins 0 5)
digital pins 0 and 1 are RX and TX for serial communication
digital pin 13 connected to the base board LED
Digital Pin I/O Functions
pinMode(pin, mode)
Sets pin to INPUT or OUTPUT mode
Writes 1 bit in the DDRx register

digitalWrite(pin, value)
Sets pin value to LOW or HIGH (0 or 1)
Writes 1 bit in the PORTx register

int value = digitalRead(pin)


Reads back pin value (0 or 1)
Read 1 bit in the PINx register
139

Prsentation de la plateforme ARDUINO


Broches analogiques
Analog input pins: 0 5
Analog output pins: 3, 5, 6, 9, 10, 11 (digital pins)
Analog input functions
int val = analogRead(pin)
Converts 0 5v. voltage to a 10-bit number (0 1023)
Dont use pinMode
analogReference(type): used to change how voltage is
converted (advanced)

Analog output
analogWrite(pin, value): value is 0 255
Generates a PWM output on digital pin (3, 5, 6, 9, 10, 11)
@490Hz frequency
140

Prsentation de la plateforme ARDUINO

141

Prsentation de la plateforme ARDUINO

142

Prsentation de la plateforme ARDUINO

143

Prsentation de la plateforme ARDUINO

144

145

Blink Program

146

Rfrences de programmation
Fonctions de base
Ces deux fonctions sont
obligatoires dans tout
programme en langage Arduino
:
void setup()
void loop()

Structures de contrle
if
if...else
for
switch case
while
do... while
break
continue
return
goto

Syntaxe de base
; (point virgule)
{} (accolades)
/ / (commentaire sur
une
ligne)
/* * / (commentaire sur
plusieurs lignes)
#define
#include

Oprateurs
arithmtiques
= (galit)
+ (addition)
- (soustraction)
* (multiplication)
/ (division)
% (modulo)

Oprateurs de
comparaison
== (gal )
!= (diffrent de)
< (infrieur )
> (suprieur )
<= (infrieur ou gal )
>= (suprieur ou gal )

Oprateurs
boolens
&& (ET boolen)
| | (OU boolen)
! (NON boolen)

147

Rfrences de programmation (suite)


Pointeurs

* pointeur
& pointeur

Oprateurs bit bit


& (ET bit bit)
|(OU bit bit)
^(OU EXCLUSIF bit
bit)
(NON bit bit)
<< (dcalage gauche)
>> (dcalage droite)

Syntaxe de base

Oprateurs composs
++ (incrmentation)
-- (dcrmentation)
(
revoir)
+= (addition
compose)
-= (soustraction
compose)
*= (multiplication
compose)
/= (division
compose)
&= (ET bit bit
compos)
|= (OU bit bit
148
compos)

Variables et constantes
Constantes prdfinies

Structures de contrle

Les constantes prdfinies du


langage Arduino sont des
valeurs particulires ayant une
signification spcifique.
HIGH | LOW
INPUT | OUTPUT
true | false
A ajouter : constantes
dcimales prdfinies
Expressions
numriques
Expressions
numriques entires
Expressions
numriques virgule

Types des donnes


Les variables peuvent tre de
type varis qui sont dcrits cidessous.
Synthse des types de
donnes Arduino
boolean ; char
byte; in t; unsigned in t
long; unsigned long
floa t (nombres virgules)
double (nombres
virgules)
Les chanes de
caractres
objet String NEW
Les tableaux de
variables
le mot-cl void
(fonctions)
word
PROGMEM

Conversion des types


de donnes
char()
byte()
int()
long()
float()
word()
Porte des variables et
qualificateurs
Porte des variables
static
volatile
cons t
Utilitaires
sizeof()

149

Fonctions
Entres/Sorties
Numriques

Temps

Trigonomtrie

pinMode (broche, mode)


digitalWrite (broche, valeur)
int digitalRead(broche)

unsigned long millis()


unsigned long micros()
delay (ms)
delayMicroseconds (us)

sin (rad)
cos (rad)
tan (rad)

Entres analogiques

Math

int analogRead(broche)
analogReference (type)

min (x, y)
max (x, y)
abs (x)
constrain (x, a, b)
map (valeur, toLow,
fromHigh, toLow,
toHigh)
pow (base, exposant)
sq (x)
sqr t(x)

lowByte ()
highByte ()
bitRead ()
bitWrite ()
bitSe t()
bitClear ()
bi t()

Sorties "analogiques"
analogWrite (broche, valeur) - PWM

Entres/Sorties
Avances
tone ()
noTone ()
shiftOu t(broche,BrocheHorloge,
OrdreBit, valeur)
unsigned long
pulseIn(broche, valeur)
Communication: Seria l

Bits et Octets

Interruptions Externes
attachInterrup t(interruption, fonction,
mode)
detachInterrup t(interruption)

Nombres alatoires:

Interruptions

randomSeed (seed)
long random(max)
long random(min, max)

interrupts ()
noInterrupts ()

150

Prsentation de la plateforme ARDUINO

151

Prsentation de la plateforme ARDUINO

152

Prsentation de la plateforme ARDUINO

153

Prsentation de la plateforme ARDUINO

154

Prsentation de la plateforme ARDUINO

155

Prsentation de la plateforme ARDUINO


Exercice3:
Ralisez un montage qui permet dallumer une LED branche sur le PIN13
une fois un bouton poussoir actionn (A0). La LED steint une fois un
autre bouton poussoir(A5) est pouss.

156

Prsentation de la plateforme ARDUINO

157

Prsentation de la plateforme ARDUINO


Exercice 4:
Sur votre plaque dessai ralisez le montage suivant: une LED est attache
au pin numro3, sa luminosit varie en fonction de la valeur analogique lise
sur le port A0 connect une photorsistance. En complte obscurit la
LED sclaircie au maximum, en plein lumire la LED steint.

158

Prsentation de la plateforme ARDUINO

159

Prsentation de la plateforme ARDUINO

160

Prsentation de la plateforme ARDUINO


Exercice15:
Lexercice vise la ralisation dun circuit de commande dun
moteur DC12V bidirectionnel par le contrleur L298, avec deux
boutons pour les sens, et un bouton pour larrt.

161

Linterface srie USART


L'USART est l'abrviation de Universal Synchronous and Asynchronous
Receiver and Transmitter ,
Cest une Interface Srie Synchrone (Half duplex )et Asynchrone (full
duplex) avec les caractristiques suivantes :
Gnrateur interne de frquence de cadencement
Asynchrone et Synchrone opration
Horloge Matre ou Esclave
Echanges de donnes sur 5 9 bits et 1 ou 2 bits de stop
Gestion des parits
Communication en Full duplex (peut mettre et recevoir en mme temps)
Protection des dbordements
Dtection de faux dparts de transmission
Filtrage de l'entre
Plusieurs interruptions programmables sur le mode mission et rception
Mode double vitesse de communication
La transmission se fait sur la broche PD1/TX et la rception sur la broche
PD0/RX
162

Linterface srie USART

163

Linterface srie USART


Les parties entoures
dans le diagramme
sparent les trois parties
principales de l'USART:
- Gnrateur d'Horloge,
- metteur et Rcepteur.
- Les registres de
contrle sont partags
par toutes les units.

164

Linterface srie USART


Gnration d'Horloge

Lhorloge peut tre gnre en interne lorsque lUSART fonctionne en modes


asynchrone ou synchrone .
Le registre UBRR est associ un dcompteur recevant lhorloge systme.
Chaque fois que ce dcompteur passe 0, il est recharg avec le contenu
dUBRR et gnre un front dhorloge destination de lUSART.
la sortie de ce compteur peut etre divise par 2, 8 ou 16 selon le mode choisi
Dans le seul mode asynchrone, il est possible de doubler la frquence
165
dmission max en invalidant un des diviseur par 2.

Linterface srie USART


Les relations liant le contenu du registre UBRR et la vitesse de transmission
sont indiques dans le tableau suivant

166

Linterface srie USART


Formats du mot de donne
L'USART accepte 30 combinaisons possibles de mot de donne avec :
1 bit de dbut
5, 6, 7, 8, ou 9 bits de donnes
Parit : sans, impaire, paire
1 ou 2 bits d'arrt
Un mot commence par un bit de dbut suivi par les bits de donnes du moins
fort au plus fort, jusqu' un total de neuf.
Sil est demand, le bit de parit est insr aprs les bits de donne, puis vient
le bit ou les bits d'arrt.
Quand un mot complet est transmis, il peut tre directement suivi par un
nouveau mot, ou la ligne de communication peut tre mis ltat haut (libre).
Trame dun mot de donnes

167

Linterface srie USART


Initialisation de lUSART
L'USART doit tre initialis avant quune communication ne puisse avoir lieu.
Le processus d'initialisation consiste normalement :
dfinir la vitesse de transmission en bauds,
dfinir le format d'encadrement
choisir l'metteur ou le Rcepteur selon l'utilisation.
Pour les interruptions de lUSART, linterruption globale doit tre interrompue
et gnralement mis hors de service en faisant l'initialisation.

168

Linterface srie USART


Description des registres :
UDR, UCSRA, UCSRB,UCSRC, UBRRH, UBRRL

169

Linterface srie USART

170

Linterface srie USART

171

Linterface srie USART

172

Linterface srie USART

173

Linterface srie USART

174de
UBRR11:0 USART Baud Rate Register Valeur permettant de slectionner la frquence
cadencement de l'USART.

Linterface srie USART


Les tableaux suivant donnent les valeurs de UBRR en fonctions de la valeur du Quartz.
Les valeurs UBRR sont bien sur donnes en dcimales.

175

Linterface srie USART

176

Linterface srie USART


Paramtrage de l'USART
Voici les principaux modes de fonctionnement :
Initialisation Emission Rception
Mise en marche et validation de l'USART avec UCR
Configuration de la vitesse de l'USART avec UBRR
Attente de TXC = 1 pour fin d'mission
Emission de la donne contenue dans UDR
Attente de RXC = 1 pour fin de rception
Lecture de la donne contenue dans UDR

177

Linterface srie USART


Exemple de programmation

178

Linterface srie USART


USART Initialization

#define FOSC 1843200 // Clock Speed


#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1
void main( void )
{
USART_Init(MYUBRR)
}
void USART_Init( unsigned int ubrr)
{
/*Set baud rate */
UBRR0H = (ubrr>>8);
UBRR0L = ubrr;
Enable receiver and transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/* Set frame format: 8data, 2stop bit */
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}
179

Linterface srie USART


Data Transmission The USART Transmitter
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
Data Reception The USART Receiver
unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSR0A & (1<<RXC)) )
;
/* Get and return received data from buffer */
return UDR0;
}

180

L'USART en Mode Asynchrone


EXERCICE 1:
Ecrire le programme qui transmet lalphabet A Z sur le
port srie 9600 baud, avec une temporisation de 0,5s
entre chaque caractre

181

You might also like