Transcript Voir PPS

Etude de cas: carte 80C552++
‘APPALACHES’
Le 80C552 est basé sur le noyau C51. Il dispose des fonctions suivantes :
- 256 octets de RAM interne.
- Deux TIMER 16 bits standards (T0 et T1) :"noyau C51".
- Un troisième TIMER 16 bits (T2) couplé à quatre registres de capture
- Un ensemble de 8 entrées de conversion analogique-numérique 8bits.
- Deux sortie PWM (MLI)de résolution de 8 bits.
- Cinq ports bidirectionnels de 8 bits TOR et un port d’entrée analogique (C.A.N).
- Un port série I²C configurable en mode maître ou esclave.
- Un port série UART 8051.
- Un système de gestion de quinze sources d’interruption sur deux niveaux de priorité.
- Un chien de garde (watch dog).
Schéma fonctionnel du 80C552
Jelassi Khaled
L’environnement de programmation
1
Configuration de la carte
Une EPROM (U1) de 64Ko de référence 27512, qu’on considérera comme
divisée en deux parties ; les 32Ko inférieurs qu’on note (U1-L) et les 32Ko
supérieurs qu’on note (U1-H) .
Une RAM (U2) de 32 Koctets de référence 62256.
Une RAM sauvegardée par batterie (U3) de 32 Koctets de référence 58256.
J1
J2
J3
J6
2
1
J10
1
U1
U2
U3
2
J11
A chaque combinaison de positions de ces cavaliers, on obtient une configuration
différente qui place les mémoires dans l’un des espaces mémoires (32K inf ou 32K
sup) et l’un des plans d’adressage (CODE ou (et) DATA).
Jelassi Khaled
L’environnement de programmation
2
Configuration de la carte
U1-L CODE (0000-7FFFH)
U2 DATA (0000-7FFFH)
U3 CODE et DATA
U1 : Moniteur de la carte
H:
Motorola)
P ou <espace> :
A <espace> ou [n aaaa] :
G <espace> ou [aaaa] :
M <aaaa>,[aaaa] :
X <aaaa>,[aaaa] :
I <aa>,<aa> :
S <aa> :
R:
B <aaaa>,[aaaa]=<dd> :
E <aaaa>-[dd] :
D <aa>-[dd] :
F <aa>=<dd> :
C <r>=<dd> :
Jelassi Khaled
charge un programme Hexa (format Intel ou
exécute en Pas a Pas l'instruction suivante
affiche/modifie les points d'Arrêt
Go (ou exécute le programme a l'adresse aaaa)
désassemble
liste la mémoire eXterne (Xdata)
liste la mémoire Interne (data et Idata)
affiche la valeur du Sfr(aa)
affiche les Registres
initialise un Bloc de mémoire externe
édite la mémoire Externe
édite la mémoire interne (Data et iData)
modifie la valeur du SFR(aa)
Change le registre (Pc Sp Acc B Dptr psW r0..9)
L’environnement de programmation
3
La génération du code exécutable
Programme source: Langage ‘C’ ou Assembleur
Compilation + édition des liens
données binaires représentant les
instructions a exécuter par le microcontrôleur
Programme (C, assembleur, .. )
Librairies de fonctions (code )
Compilation
(Code + références aux fonctions
externes)
Edition des liens
(Code programmes + code fonctions externes)
Format final (fichier .HEX ou .BIN)
Le fichier généré:
soit de format .BIN, qui contient uniquement du code
soit de format .HEX, qui contient en plus du code, les adresses à partir desquelles
le code doit être logé, ainsi que des données de détection d’erreurs.
Ce format est destiné à être transféré par liaison série ou autre à une carte c
équipée d’un moniteur pouvant gérer ce format (ce qui est notre cas).
Jelassi Khaled
L’environnement de programmation
4
Le format Hexadécimal
Fichier Hexadécimal
Connexion entre le PC et carte.
Port série RS232C libre du cote PC .
Logiciel permettant la transmission et la réception à travers le port série:
Exemple: HYPERTERMINAL fournis avec Windows
Configuration de communication: 9600,8,N,1
(vitesse = 9600bps; Nombre de bits données = 8 ; Parité :aucune ; Nombre de bits de stop =1.)
Enfin on a besoin d’un câble série pour connecter le port série du PC à celui du microcontrôleur.
Jelassi Khaled
L’environnement de programmation
5
L’environnement de développement
Intégré KEIL

saisie, simulation et compilation des programmes
Hiérarchie des fichiers
Espace d’édition
Fenêtre d’erreur
Environnement du logiciel est constitué de
librairies de plusieurs microcontrôleur, classées
en familles : Philips, Intel…
Jelassi Khaled
L’environnement de programmation
6
Environnement Vision de Keil
Etude d’un exemple
Fichier généré « jelassi.hex »
:02800C0080FEF4
:030000000280007B
:0C800000787FE4F6D8FD75810702800C43
:00000001FF
Jelassi Khaled
L’environnement de programmation
7
Chargement du programme
Commande H pour le chargement du fichier généré a travers la liaison série
>
>H
> 12 OCTETS
> G 800C
:02800C0080FEF4
:030000000280007B
:0C800000787FE4F6D8FD75810702800C43
:00000001FF
Envoyer le fichier hexadécimal à travers la liaison série
Si le chargement s’est bien effectué le moniteur renvoie le nombre d’octets
chargés
Exécution du programme par la commande G
L’adresse du début de programme est supposé ici 800C
La détermination de cette adresse se fait par la fenêtre « Disassembly Window » de
l’environnement Vision de Keil
Jelassi Khaled
L’environnement de programmation
8
La simulation avec Keil
Exécution pas a pas
:02800C0080FEF4
:030000000280007B
:0C800000787FE4F6D8FD75810702800C43
:00000001FF
Accès aux ports d’entrées-sorties
Jelassi Khaled
L’environnement de programmation
9
La Conversion Analogique numérique
Accès aux convertisseurs analogiques numériques
Le registre ADCON
ADC1
ADC0
ADEX
ADCI
ADCS
AADR2
AADR1
AADR0
Sélection de l’entrée 0 (AADR0, AADR1, AADR2)
Lancer la conversion (ADCS=1)
ADCI programmé à 0
Conversion lancée uniquement par mise à 1 de ADCS (ADEX=0)
Jelassi Khaled
L’environnement de programmation
10
Exploitation des entrées analogiques
Programme de conversion Analogique numérique
ADCI
0
0
1
1
ADCS
0
1
0
1
AADR2
AADR1
AADR0
: CAN libre, une conversion peut être lancée
: conversion en cours, lancement impossible
: conversion finie, lancement impossible
: combinaison impossible
Bit de sélection d’une des 8 entrées analogiques
ADEX : autorisation de lancement externe d’une conversion
#include<reg552.h>
#include<stdio.h>
void main (void)
{
unsigned int resultat , rinf;
ADCON&=0xF8;
ADCON&=0xDF;
while (1)
{
ADCON|=0x08;
while(!(ADCON&0x10))
{ };
while(ADCON&0x08)
{ };
rinf=(ADCON>>6)&0x03;
resultat=ADCH*4 + rinf;
//sélection du canal 0 par mise à 0 des 3 premiers
// bits du ADCON ;
// mettre le bit ADEX à 0 : conversion lancée par
//mise à 1 de ADCS
//Lancer la conversion par mise du bit ADCS à 1
//Attendre jusqu’a ce que ADCI passe à 1
// et
//ADCS passe à 0 ;
//lire les 2 bits du poids faible du résultat de la
//conversion à partir du registre ADCON ;
//lire les 8 bits poids fort et ajouter les 2 bits
//poids faible ;
printf ("\n %d",resultat);
//émission du résultat vers le port série ;
ADCON&=0xEF;
}
}
Jelassi Khaled
//Remettre ADCI à 0.
L’environnement de programmation
11
Exploitation des résultats par MATLAB
Lecture des échantillons convertis par MATLAB
Exploitation
Chargement
Programme N°1 : écrit en langage ‘C’ et exécuté sur le microcontrôleur et qui
permet :
 La conversion analogique-numérique d’un signal injecté sur le port P5.
L’émission de l’échantillon converti sur la liaison série à la suite d’une requête du
logiciel MATLAB
Programme N°2 : écrit en MATLAB et exécuté sur un PC et qui permet :
La récupération des N échantillons convertis en format 8 bits.
 L’émission des requêtes sous forme du caractère ‘ESPACE’.
Jelassi Khaled
L’environnement de programmation
12
Exploitation des résultats par MATLAB
Programme côte Microcontrôleur
#include<reg552.h>
#include<stdio.h>
void main (void)
{
unsigned int resultat , rinf;
ADCON&=0xF8;
ADCON&=0xDF;
while (1)
{
ADCON|=0x08;
while(!(ADCON&0x10))
{ };
while(ADCON&0x08)
{ };
getchar();
rinf=(ADCON>>6)&0x03;
resultat=ADCH*4 + rinf;
printf ("\n %d",resultat);
Programme MATLAB
w= serial('COM1');
set(w,'BaudRate',9600);
fopen(w);
z=0;
for i=1:1:700
plot (z);
fprintf (w,' ');
b=fscanf(w,'%d');
while(length(b)~ =1)
b=fscanf(w,'%d');
end
k=(b*5)/1024;
z=[z,k];
drawnow
title('tension');
end
fclose(w);
delete(w);
clear w;
ADCON&=0xEF;
}
}
Jelassi Khaled
L’environnement de programmation
13