Computing">
Introduction
Introduction
Introduction
Le cour se porte sur les Systèmes à base de Microcontrôleur, comment on peut les utiliser pour
contrôler une machine externe comme une pompe, une lampe, un moteur ...etc.
• Les matricesPage
• Les fonctionsPage
- Durée du cycle : Période de l'oscillateur quartz divisée par 4 soit 200 ns pour un
quartz de 20 MHz.
- Code instruction : mot de 14 bits et compteur programme (PC) sur 13 bits, ce qui
permet d'adresser 8 K mots ( de h'0000' à h'1FFF').
- Bus de donnée DATA sur 8 bits. Pour chaque adresse, vous avez une donnée 8
bits (1 octet).
- 4 sources d'interruption :
∙∙ Par changement d'état des bits du Port B: PB4 PB5 PB6 ou PB7
- UART pour transmission série synchrone ou asynchrone, et une Interface I2C et 2 modules
pour PWM avec une résolution de 10 bits.
- Une Interface avec un autre micro: 8 bits + 3 bits de contrôle pour R/W et CS.
Les Entrées/Sorties
∙∙PORTA :
∙∙PORTB :
Ce port bidirectionnel est constitué de 8 bits (entrées/sorties). Le registre de direction
correspondant est TRISB nous permet de configurer chaque bits du PORTB soit entrée ou en
sortie (comme le PORTA). Une entrée interruption externe via le bit du PORTB qui est PB0.
∙∙ PORTC :
Il s'agit d'un PORT 8 bits bidirectionnel. Il est partagé avec le module
de transmission synchrone I2C et l'USART.
∙∙ PORTD :
8 entrées-sorties.Port interface micro processeur (8 bits data).
∙∙PORTE :
3 entrées-sorties. 3 bits de contrôle interface micro. 3 entrées du CAN.
Exemple 1 :
Sois un bouton poussoir brancher sur le PORTB (du pin B0). Ce bouton commande
l'allumage d'une led brancher sur le PORTC (du pin C0). Si on appuie sur le bouton poussoir
la lampe s'allume. Si on relâche le bouton poussoir la lampe s'éteint.
Pour résoudre le problème, il faut identifier les entrées et les sorties du système d'allumage.
Le PORTB.RB0 est l'entrée du système et le PORTC.RC0 est la sortie du système brancher
sur une led. pour configurer le PORTB en entrée, on a besoin du registre TRISB même chose
pour le PORTC, on utilise TRISC.
void main(){
ADCON1=0x06;// il faut configurer tout les pins du PORTA en mode
numérique (binaire). Pour l'utiliser comme une entrée/sortie binaire.
TRISB=0xFF; // configuré tout les pins du PORTB en entrée.
TRISC=0xFE; // configuré le pin RC0 du PORTC en sortie et les autres
RC7..RC1 en entrées.
PORTC=0x00; // la led brancher à RC0 est éteint.
if(PORTB.RB0==1) PORTB.RC0=1; else PORTC.RC0=0;
}
Ce programme ne marchera pas, il s’arrête seulement après quelque microseconde avant
même de commencer notre manipulation. Donc il faut que le système (UC) scrute le PORTA
en permanence. C'est pour sa, on utilise une boucle infinie do{}while(1). Appelé aussi
scrutation logiciel.
void main(){
ADCON1=0x06;// il faut configurer tout les pins du PORTA en mode numérique
(binaire). Pour l'utiliser comme une entrée/sortie binaire.
TRISB=0xFF; // configuré tout les pins du PORTB en entrée.
TRISC=0xFE; // configuré le pin RC0 du PORTC en sortie et les autres RC7..RC1
en entrées.
PORTC=0x00; // la led brancher à RC0 est éteint.
do {
if(PORTB.RB0==1) PORTC.RC0=1; else PORTC.RC0=0;
}while(1);
}
Exemple 2 :
Sois un bouton poussoir brancher sur le PORTB (du pin B0). Ce bouton commande
l'allumage d'une led brancher sur le PORTC (du pin C1). Si on appuie sur le bouton poussoir
la lampe s'allume. Si on relâche le bouton poussoir la lampe reste allumer .
Les entrées et les sorties du système d'allumage sont le PORTB.RB0 est l'entrée du système
et le PORTC.RC1 est la sortie du système brancher sur une led. Pour configurer le PORTB
en entrée, on a besoin du registre TRISB même chose pour le PORTC, on utilise TRISC.
void main(){
ADCON1=0x06;// il faut configurer tout les pins du PORTA en mode numérique
(binaire). Pour l'utiliser comme une entrée/sortie binaire.
TRISB=0xFF; // configuré tout les pins du PORTB en entrée.
TRISC=0b11111101; // configuré le pin RC1 du PORTC en sortie et les autres
RC7..RC2 et RC0 en entrées.
PORTC=0x00; // la led brancher à RC1 est éteint.
do{
if(PORTB.RB0==1) PORTC.RC1=1;
}while(1);
}
Exemple 3 :
Sois un bouton poussoir brancher sur le PORTB (du pin B1). Ce bouton commande
l'allumage d'une led brancher sur le PORTC (du pin C2). Si on appuie sur le bouton poussoir
la lampe s'allume. Si on relâche le bouton poussoir la lampe reste allumer. Si on appuie à
nouveau sur bouton poussoir la lampe s'éteint. En relâchant le bouton poussoir la lampe reste
éteinte. Les entrées et les sorties du système d'allumage sont le PORTB.RB1 est l'entrée du
système et le PORTC.RC2 est la sortie du système.
Remarquez, que l'exemple 3 , ne correspond pas aux deux exemples précédent. Tout
simplement, les deux autres exemples traitent les systèmes combinatoires. Pour chaque
valeur d'entrée, il y a une seule valeur de sortie. Par contre, dans cet exemple, la valeur de
l'entrée a deux valeurs de sorties différentes. Par exemple, B=1 (bouton) →→ la lampe
allumée et B=1 (bouton) →→ la lampe éteinte. Donc notre système est un système
séquentiel. cela implique qu'il y a une mémorisation de l'état de la sortie PORTC.RC2.
Donc l'état mémorisé du système précédent est utilisé pour changer l'état suivant c.a.d :
PORTC.RC2=F(PORTC.RC2);
la fonction F est une fonction booléenne. à gauche l'état suivant (future) PORTC.RC2 et à
droite de l'équation l'état précédent (passé) PORTC.RC2.
Quelle est la fonction F, quand doit choisir. Remarquez que dans l'énoncé :
void main(){
ADCON1=0x06;// il faut configurer tout les pins du PORTA en mode numérique
(binaire). Pour l'utiliser comme une entrée/sortie binaire.
TRISB=0xFF; // configuré tout les pins du PORTB en entrée.
TRISC=0b11111101; // configuré le pin RC2 du PORTC en sortie et les autres
RC7..RC3 et RC1..RC0 en entrées.
PORTC=0x00; // la led brancher à RC2 est éteint.
do{
if(PORTB.RB1==1) {PORTC.RC2=~PORTC.RC2; delay_ms(400);}
}while(1);
}
Le Timer TMR0
Le compteur/Timer TMR0 a les caractéristiques suivantes :
a) Mode TIMER :
Le choix de ce mode se fait par : TOCS = 0 (b5 de OPTION_REG). TMR0 est incrémenté à
chaque cycle instruction ( Fosc/4), en considérant le prédiviseur avec un rapport de 1.
b) Mode COMPTEUR :
Ce mode est sélectionné si TOCS = 1. TMR0 est alors incrémenté à chaque front montant ou
descendant sur la broche PA4/CLK (pin3). Le choix du front est fait par le bit TOSE ( b4 de
OPTION).
c) LE PREDIVISEUR :
Il est partagé entre le Watchdog et TMR0. L'affectation se fait par le bit PSA (b3 de
OPTION).
d) INTERRUPTION :
Elle est générée quand TMR0 passe de la valeur FF à 00. Le Flag TOIF (b2 de INTCON)
passe à "1". On peut masquer la génération de l'interruption en mettant le bit TOIE ( b5 de
INTCON) à "0". Le Flag TOIF dit être remis à zéro par soft dans le sous programme
d'interruption, avant de re-autoriser cette interruption.