« Utiliser les PIC 16F et 18F/Introduction au langage C » : différence entre les versions

Contenu supprimé Contenu ajouté
m Robot : Remplacement de texte automatisé (-(<|</)source([ \t>]) +\1syntaxhighlight\2)
Ligne 135 :
 
1° méthode pour positionner bit à bit :
<sourcesyntaxhighlight lang="c">
#define bit_set(var,bitno) ((var) |= 1 << (bitno))
#define bit_clr(var,bitno) ((var) &= ~(1 << (bitno)))
Ligne 141 :
bit_set(x,3); //now x=0b1001;
bit_clr(x,0); //now x=0b1000;*/
</syntaxhighlight>
</source>
2° méthode pour positionner plusieurs bits
<sourcesyntaxhighlight lang="c">
#define bits_on(var,mask) var |= mask
#define bits_off(var,mask) var &= ~0 ^ mask
Ligne 149 :
bits_on(x,0b0001); //now x=0b1011
bits_off(x,0b0011); //now x=0b1000 */
</syntaxhighlight>
</source>
 
=== Tests de bits en C ===
Ligne 160 :
Cette valeur prédéfinie est égale au masque lorsqu'on cherche à savoir si c’est un 1 ou à 0 partout dans le cas contraire.
Le test de gauche dans la figure ci-dessus peut donc s'écrire :
<sourcesyntaxhighlight lang="c">
// unsigned char Reg;
if ((Reg & 0x40) == 0x40) { //E.B. vraie si bit B6 à 1
...
}
</syntaxhighlight>
</source>
tandis que le test de droite s'écrit quant à lui :
<sourcesyntaxhighlight lang="c">
// unsigned char Reg;
if ((Reg & 0x08) == 0x00) { //E.B. vraie si bit B3 à 0
...
}
</syntaxhighlight>
</source>
Il n’est pas possible de supprimer les parenthèses dans les deux programmes ci-dessus.
 
==== Utilisation d'une macro ====
Les tests d'un bit particulier en C peuvent aussi être réalisés de la manière suivante (http://www.microchipc.com/HiTechCFAQ/index.php)
<sourcesyntaxhighlight lang="c">
x=0b1000; //decimal 8 or hexadecimal 0x8
if (testbit_on(x,3)) a(); else b(); //function a() gets executed
Ligne 183 :
if (!testbit_on(x,0)) b(); //function b() gets executed
#define testbit_on(data,bitno) ((data>>bitno)&0x01)
</syntaxhighlight>
</source>
 
== Les types C du PIC ==
Ligne 220 :
 
|-
|<sourcesyntaxhighlight lang="c"> char n=10;
while(n) {
.....;
n--; } </sourcesyntaxhighlight>
|<sourcesyntaxhighlight lang="c"> char n=10;
while(n!=0) {
..... ;
n--; }</sourcesyntaxhighlight>
 
|}