Programmation des µC ATMEL
SOMMAIRE
|
Vos commentaires ici Datasheets ATmega 16 AT90S8515 AT90S8535 |
Quelques bases
Les registres
Avant d'écrire tout programme, il est nécessaire de définir le µC que l'on souhaite utiliser, puis d'initialiser les entrées et sorties. Il existe déja les fichiers d'initialisation qui initialisent les registres, il suffit simplement de faire appel à ce fichier avec la commande#include <fichier.h>.Ces fichiers se trouve dans le repertoire d'installation de CodeVisionAVR. Par exemple, si l'on veut utliser l'ATmega 16, alors il faudra inclure le fichier mega16.h
Ensuite, il est nécessaire de définir les entrées-sorties. On doit en effet définir quels ports sont utilisés en entrée (input) ou en sortie (output)
exemple:
#include <mega16.h>
void main(void)
{
//Input/Output ports initialization
PORTA=0x00;
DDRA=0x00;
PORTB=0xF2;
DDRB=0xFF;
}
DDRx (x=A, B,...) est le registre qui permet de configurer en entrée ou en sortie les bits du port concerné.Le registre
PORTx (x=A, B,...) permet de choisir la valeur ('0' ou '1') quand le port est configuré en sortie.Il n'est pas obligatoire de configurer un port complètement en entrée ou en sortie, on peut choisir les bits que l'on souhaite:
PORTA=0x02; //PORTA=0b00000010 DDRA=0x3F; //DDRA=0b00111111
Accès aux entrées/sorties
Pour chaque port il existe en fait 3 registres réservés.PORTx, DDRx et PINx.
Suivant la configuration des ports on utilisera le registre PORTx ou PINx. Le registre DDRx est quant à lui utilisé uniquement pour la configuration du port correspondant.Lecture de l'état du bit d'un port :
Pour lire l'état d'un bit on utilise le registre
PINx.Par exemple
PINB.2 permet de lire l'état du bit 2 du port B. Il est aussi possible d'utiliser un
masque qui donne une instruction équivalente: PINB&0x04.Ecriture sur un bit : Pour écrire sur un bit on utilise le registre
PORTx.Par exemple
PORTB.7=1; permet d'imposer un état logique haut sur la patte correspondant au
bit 7 du port B.
Déclaration des variables
On peut déclarer des variables suivant plusieurs manières : - en variables globales, valables dans tout le programme. - en variables locales, valables uniquement dans le sous-programme où la variable à été déclarée. Le tableau suivant liste les types de données supportées par CodeVisionAVR :| Type | Size (Bits) | Range |
| bit | 1 | 0, 1 |
| char | 8 | -128 to 127 |
| unsigned char | 8 | 0 to 255 |
| signed char | 8 | -128 to 127 |
| int | 16 | -32768 to 32767 |
| unsigned int | 16 | 0 to 65535 |
| long int | 32 | 2147483648 to 2147483647 |
| unsigned long int | 32 | 0 to 4294967295 |
| float | 32 | ±1.175e-38 to ±3.402e38 |
Introduction aux interruptions de programme
Une interruption de programme est une partie de programme qui est exécuté en parallèle au programme principal. Le principal intérêt est la possibilité par exemple de gérer des actionneurs tels que des servomoteurs tout en pouvant utiliser le programme principal pour d'autres tâches. Le programme d'interruption est donc quasiment transparent sur le déroulement du programme principal.NB : le programme d'interruption n'est en fait pas totalement transparent car il est exécuté lors de l'appel de l'interruption et le programme principal reprend alors à l'endroit où il a été arrêté. Il y a donc des temps mort qui interviennent dans le déroulement du programme ce qui peut être préjudiciable si cela n'est pas pris en compte.
Il existe plusieurs types d'interruptions : les interruptions externes, de comptage, de comparaison, de fin de conversion,...
INTERRUPTIONS EXTERNES
La plupart des µC Atmel disposent des interruptions externes de programme. Elles peuvent êtres déclenchées de différentes manières grâce aux entrées prévues à cet effet. Sur l'ATmega16, il existe 3 interruptions externes : INT0 (pin16), INT1 (pin17), INT2 (pin3).INT0 et INT1 peuvent êtres déclenchées par :
- l'application d'un niveau bas
- un front montant
- un front descendant
- un changement d'état
- un front montant
- un front descendant
Registres pour utiliser les interruptions externes (exemple de l'ATmega 16):
- MCUCR MCU Control Register
- MCUCSR MCU Control and Status Register
- GICR General Interrupt Control Register
- GIFR General Inerrupt Flag Register
!! Il est fortement conseillé de se référer à la documentation pour comprendre le fonctionnement de chacun des registres et donc des exemples !!
