Académique Documents
Professionnel Documents
Culture Documents
www.microchip.com
Première journée
Editeur de lien
Préprocesseur Compilateur C LINKER
Remplace les Transforme le fichier C en un Lie (donne des adresses
#define et effectue fichier objet (code machine), aux fonctions) tous les
les #include les fonctions pré-compilés sont fichiers objets et crée un
Fichier déclarées dans les fichiers *.h fichier exécutable
source C
contenant la
fonction
main
Fichier de Programme
symboles exécutable
FLUX DE DONNEES D’UN pour debug
COMPILATEUR C
christian.dupaty@ac-aix-marseille.fr
Arborescence C ANSI
Exécutables : MCC18, MPLINK, MPLIB etc…
Personnalisation du préprocesseur
Headers (*.h)
Librairies (*.lib)
0 0 0
0 1 0
1 0 0
1 1 1
Masquage Forçage à 0
PORTA x x x x x x x x PORTA xx x x x x x x
& 0 0 0 1 00 0 0 & 11 1 0 1 1 1 1
= 0 0 0 x 00 0 0 = xx x 0 x x x x
OR : |
Bit1 Bit2 OR
0 0 0
0 1 1
1 0 1
1 1 1
PORTA x x x x x x x x
Forçage à 1 OU 0 0 0 1 0 0 0 0
= x x x 1 x x x x
XOR : ^
Bit1 Bit2 XOR
0 0 0
0 1 1
1 0 1
1 1 0
PORTA x x x x x x x x
XOR 0 0 0 1 0 0 0 0
BASCULEMENT
= x x x /x x x x x
Prise en main de MPLAB
z Créer un projet
z Configurer les chemins d’accès des outils
z Configurer les répertoires par défaut
z COMPILER–TELECHARGER-EXECUTER
Gérer les ports
parallèles
Debut
#include <p18f452.h>
void main(void) Initialise PRB0 en
sortie
{ TRISB = 0;
while(1)
{ oui
Bouton RA4
enfoncé ?
non
}
}
PORTAbits.RA4
Gérer les ports
parallèles
NON Décremente
incrémente PORTB
Compte
Tempo N Compte=0 ?
OUI
Retour
Exercice
Debut Programme
Principal ( PP )
PORTB en sortie
incrémente PORTB
S2 appuyé ?
NON OUI
PORTB0 en sortie
Bascule PORTB0
OUI S2 appuyé ?
NON
PORTB0=0
NON OUI
Permet :
z Exemples :
putc(‘A ’);
puts (« bonjour »);
printf, sprintf, fprintf …
Fontions avancées de stdio.h
printf – sprintf - fprintf
z printf envoie une texte formaté sur la sortie standard
(l’USART par défaut)
ex : printf (« Bonjour »);
z sprintf envoie une texte formaté vers un pointeur
ex : unsigned char monpointeur[20];
sprintf (monpointeur,« Bonjour »);
z fprintf envoie une texte formaté sur la sortie désignée
ex : fprintf (_H_USER,« Bonjour »);
christian.dupaty@ac-aix-marseille.fr
Exemples sur printf – sprintf -fprintf
printf("Dec : %d %u",a,a); Dec : -27 65509
printf("%c %c %d",'b',c,(int)c); b A 65
XLCD (MICROCHIP)
putcXLCD
putsXLCD
…
OpenXLCD
L’afficheur de PICDEM2+
z Les fonctions de gestion bas niveau de la
librairie xlcd.h (gestion d’un afficheur LCD)
de ne fonctionnent PAS avec l’afficheur
LCD du KIT PICDEM2+ . Les
temporisations étant trop courtes.
z Il faut recompiler xlcd avec le fichier
modifié openxlcd.c
z Le fichier installTout.bat effectue cette
modification et installe la librairie xcldpd2.h
La librairie XLCDPD2.h
z Reconfigure xlcd pour l’afficheur du PICDEM2+
z Contient les fonctions :
z int _user_putc(char c)
{
putcXLCD(c)
}
Exemple : fprintf.c
#include <p18f452.h>
#include <stdio.h> // pour fprintf
#include <xlcd.h> // pour OpenXLCD et putcXLCD
void main(void)
{
SPBRG = 25; /* configure la vitesse (BAUD) 9600 N 8 1*/
TXSTA = 0x24;
RCSTA = 0x90; /* active l'USART*/
OpenXLCD(FOUR_BIT & LINES_5X7 ); //initialise LCD sur PD2
SetDDRamAddr(0); //ligne 0 de l'afficheur
fprintf (_H_USART, "fprintf USART\n"); // vers USART
fprintf (_H_USER, "fprintf USER\n" ); // vers LCD
while(1);
}
Structuration et lisibilité
init.c
#include <p18f452.h>
#include <stdio.h>
#include <xlcd.h>
#include <p18f452.h>
int _user_putc (char c)
#include « init.c »
{
void main(void)
putcXLCD(c);
{
}
Init_comm_pd2();
SetDDRamAddr(0);
void init_comm_pd2(void)
fprintf (_H_USART, "fprintf USART\n");
{
fprintf (_H_USER, "fprintf USER" );
SPBRG = 25;
while(1);
TXSTA = 0x24;
}
RCSTA = 0x90;
OpenXLCD(FOUR_BIT & LINES_5X7 );
}
Utiliser le simulateur
USART de MPLAB
Activer le simulateur
Dans debugger-settings cocher
enable UART IO et output windows
Deuxième journée
rom ram
void main(void)
{ char c=0;
TRISB = 0; // PB = sortie
while(1) // boucle infinie
{ for(c=0;c<tbltaille;c++)
{ PORTB=sortie[c]; // c indexe la table
wait(5000);
}
}
}
#include <p18f452.h>
Copie ROM/RAM
#pragma romdata mm=0x1000
rom unsigned char chaine1[]="bonjour",*ptr1;
#pragma udata my_data=0x300
unsigned char *ptr2,chaine2[20];
PORTB0 en sortie
Autorise IT
TIMER0
IT produire per
TIMER0 ?
OUI TIMER 0
Bascule PRB0
NE RIEN FAIRE
NON
RETOUR
#include <p18f452.h>
Interruptions
void traiteIT(void); // prototype, traiteIT est définit après son appel
#pragma code it=0x08
void saut_sur_spIT(void)
{ _asm
goto traiteIT
_endasm
}
#pragma code
E= Q/4
& Interruption
RAZ logiciel
Registre 16 bits
CCPF
CCPR
Détection de
front
Capture -
principes
& Interruption
CCPI
T=D*E/N
Compteur 16 bits
TIMER1 TMR1
E/N RAZ
IE Interruption
&
TMR1
Débordement IF
RAZ
RAZ logiciel
logiciel
Comparateur
Action pré Broche
16 bits CCP
configurée CCPx
TMER1=CCPR F
Registre 16 bits
CCPR
Interruption
&
CCPI
Exercices avec interruptions
z Production de temporisation
z Modification de rapport
z Mesure de durée (fréquencemètre)
z Réalisation d’une horloge temps réel
Création et gestion des
BIBLIOTHEQUES
Flux des données
math.lib
sin.o Prog1.map
Inclusion cos.o p18x.lkr (carte mem)
…
math.h
Prog1.lst
(assembleur+c)
Prog1 .C Prog1.o
main() MCC18
Prog1.cod
Prog3.o (mise au point)
lib .C (precompilé)
MPLINK
MPCOD
MPHEX
Prog1.hex
Prog2 MPASM Prog2.o
.asm
Inclusion
lib.inc
lib.asm
Librairie libpd2.h
LIBRAIRIE USART HARD (sur PIC équipés de cette fonction)
void initsci(void) Configuration BAUD et interruption
(9800,n,8,1)
char getsci(void) Retourne le premier caractère reçu sur SCI
void putsci(char c) Emet c sur SCI
char *getstsci(char *s, char finst) lit une chaîne de caractère sur SCI se
terminant par finst la variable finst contient le
caractère attendu en fin de chaîne
int putstsci(char *s) émet la chaîne s (finit par 0)
char carUSARTdispo(void) Cette fonction retourne 1 (vrai) si un
caractère est disponible dans le buffer de
réception et 0 si non, si les deux pointeurs
sont identiques, il n'y a rien dans le buffer
Ou
v
ANO= 2,2v USB
v
ANO= 3,4v
v
ANO= 0,5v
COM1/
2 AN
0
Exercice : contrôle de
batterie
VDD
5,0v
4,9v
4,8v
4,7v
4,6v
4,5v
t
t0 t1 t2 t3
4,9v t0 1 0 0 0
4,8v t1 1 1 0 0
4,7v t2 1 1 1 0
4,6v t3 1 1 1 1
Exercice : centrale
Le PC transmet ‘M’ :
Affichage LCD ‘MESURE’
d ’acquisition
Active TIMER1
Transmission et affichage LCD
séquentiel de AN0-AN7 T=1S
Le PC transmet ‘A’ : LCD
Affichage LCD ‘ARRET’
Arrêt du TIMER1
CAN USART
TIMER1 +
COMPARE
1S
SPI ex: filtre numérique
Référence
2.5v
Exercices sur …
z Convertisseur analogique numérique
z EEPROM interne
z Communications asynchrones
z BUS I2C
z BUS SPI
Merci pour votre attention