« Utiliser les PIC 16F et 18F/Arithmétique et assembleur » : 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 121 :
* 1 la destination est f (la lettre f) : dans ce cas le résultat est stocké dans l’emplacement mémoire.
{{remarque|contenu=La majorité des processeurs comportent deux instructions d'addition, avec et sans retenue (généralement appelées ADD et ADC). Pour le PIC ce n’est pas le cas. En cas de retenue, il faut utiliser un test et une incrémentation. Voici comment [[w:Microchip|Microchip]] fait une addition sur {{Unité|16|bits}} dans sa note d'application AN526 :
<sourcesyntaxhighlight lang="PIC16">
; Double Precision Addition ( ACCb + ACCa -> ACCb )
D_add movf ACCaLO,W
Ligne 130 :
addwf ACCbHI, F
retlw 0
</syntaxhighlight>
</source>
L'instruction de branchement conditionnel btsfc est présentée au [[../Les structures de contrôle et l'Arithmétique en assembleur/|chapitre suivant]].
}}
Ligne 140 :
* Après un reset ou un démarrage le PIC (16F84) démarre en adresse 0.
* L'adresse 0x004 étant réservée aux interruptions, un programme aura souvent une structure :
<sourcesyntaxhighlight lang="pic16">
org 0x000 ; Adresse de départ après reset
goto start ; Adresse 0: initialiser
Ligne 147 :
start
END
</syntaxhighlight>
</source>
"start" est une étiquette.
 
Ligne 157 :
Tout programme se termine par la directive END. Voici un programme complet qui utilise une instruction goto facile à expliquer et présentée dans le [[../Les structures de contrôle et l'Arithmétique en assembleur/|chapitre suivant]].
 
<sourcesyntaxhighlight lang="pic16">
; {{Unité|64|octets}} en access RAM
CBLOCK 0x0C ; début de la zone variables sur 16F84
Ligne 173 :
goto boucle
END
</syntaxhighlight>
</source>
On distingue dans ce programme deux étiquettes (start et boucle), une définition symbolique des variables, un commentaire et la définition de l'origine du programme.
 
=== Règle sur le début de nos programmes ===
Tous nos programmes devront commencer à l'adresse 0x000 mais ne commenceront pas forcément par un "goto start" comme dans cet exemple :
<sourcesyntaxhighlight lang="pic16">
; {{Unité|64|octets}} en access RAM
CBLOCK 0x0C ; début de la zone variables sur 16F84
Ligne 192 :
goto boucle
END
</syntaxhighlight>
</source>
== Introduction aux PIC 18F ==
Tout ce qui a été présenté dans ce chapitre est pratiquement identique pour le PIC 18F. Ce qui change est le modèle mémoire RAM. Les instructions sont identiques mais leurs [[w:Opcode|Opcode]] sont maintenant sur {{Unité|16|bits}} (au lieu de 14). Cela veut dire que vous ne pourrez pas utiliser un fichier hexadécimal (.hex) compilé pour un 16F avec un 18F : il faut ré assembler.
=== Les banques des 18FXXXX ===
La série des 18F dispose de 16 banques sélectionnées par les {{Unité|4|bits}} de poids faible du registre '''BSR'''. Mais le changement de banque se fait maintenant en une seule instruction :
<sourcesyntaxhighlight lang="pic16">
movlb 0x01; en banque 1
</syntaxhighlight>
</source>
Probablement pour des raisons de compatibilité, l’[[w:Mode_d'adressage#Adressage_direct|adressage direct]] sur plusieurs banques du 16F est encore présent. La terminologie microchip est loin d’être claire à ce sujet : ce qui se passait sur la série des 16F est appelé "banked" et la nouveauté du 18F "access bank". Pour éviter toute confusion dans ce document j'utiliserai "access RAM" pour le nouveau mode d'adressage et "banked "pour l'ancien mode. Le mode "access RAM" permet d’avoir 256 emplacements toujours identiques :
* de l'adresse 0 à l'adresse 0x5F on dispose de cases mémoires (soit 60h=96 cases mémoire)