« Utiliser les PIC 16F et 18F/Le Timer0 des 16FXXX et le langage C » : différence entre les versions

Contenu supprimé Contenu ajouté
m Robot : Remplacement de texte automatisé (-\n(==={0,3})(?: *)([^\n=]+)(?: *)\1(?: *)\n +\n\1 \2 \1\n)
m Robot : Remplacement de texte automatisé (-(<|</)source([ \t>]) +\1syntaxhighlight\2)
Ligne 39 :
==== Nom des bits et registres avec MikroC ====
Regardez ci-dessous comment les registres sont appelés ainsi que pour une fois quelques noms de bits :
<sourcesyntaxhighlight lang="c">
const unsigned short
//********* bits de INTCON
Ligne 73 :
TRISA absolute 0x0085,
...
</syntaxhighlight>
</source>
{{exemple|contenu=La documentation ci-dessus nous montre que pour mettre le bit GIE du registre '''INTCON''', on peut le faire de trois façons :
<sourcesyntaxhighlight lang="c">
//********* MikroC *********
INTCON.GIE = 1; //idem en Hitech C
Ligne 82 :
// ou encore
INTCON.F7 = 1; // INTCON.B7 = 1;
</syntaxhighlight>
</source>
}}
{{Remarque|contenu=Très important : le registre '''OPTION''' se note OPTION_REG en MikroC.}}
Ligne 88 :
==== Nom des bits et registres avec HitechC ====
Comme d'habitude, les noms des registres sont sans surprise. Hitech C définit aussi un certain nombres de bits.
<sourcesyntaxhighlight lang="c">
volatile unsigned char TMR0 @ 0x01;
...
Ligne 132 :
volatile bit TRISA1 @ (unsigned)&TRISA*8+1;
volatile bit TRISA0 @ (unsigned)&TRISA*8+0;
</syntaxhighlight>
</source>
 
=== Les différents modes de fonctionnement ===
Ligne 148 :
L'optimisation d'un algorithme en vitesse (ou en taille) est très importante dans les systèmes embarqués réalisés par des micro-contrôleurs. Une recherche d'algorithmes sur Internet vous donnera des résultats qu’il vous faudra évaluer. Par exemples, le site : http://www.piclist.com/techref/language/ccpp/convertbase.htm
vous propose un algorithme de division par 10 que voici :
<sourcesyntaxhighlight lang="c">
unsigned int A;
unsigned int Q; /* the quotient */
Ligne 155 :
Q = ((Q >> 8) + Q) >> 3; /* Q = A*0.00011001100110011 */
/* either Q = A/10 or Q+1 = A/10 for all A < 534,890 */
</syntaxhighlight>
</source>
L'exercice 1 se propose de mesurer le temps d'exécution de cet algorithme et d’en faire des comparaisons.
 
Ligne 161 :
Nous devons savoir à ce niveau, que tout débordement du timer0 (passage de 0xFF à 0x00) entraîne le positionnement du flag T0IF, bit b2 du registre INTCON. Vous pouvez donc utiliser ce flag pour déterminer si vous avez eu débordement du timer0, ou, en d’autres termes, si le temps programmé est écoulé. Cette méthode à l’inconvénient de vous faire perdre du temps inutilement dans une boucle d'attente.
Petit exemple :
<sourcesyntaxhighlight lang="pic16">
clrf tmr0 ; début du comptage dans 2 cycles
; (voir remarque plus bas)
Ligne 169 :
goto loop ; non, attendre débordement
xxx ; poursuivre : 256/65536 évènements écoulés
</syntaxhighlight>
</source>
 
== Le timer 0 du pic 18FXXXX ==