Utiliser les PIC 16F et 18F/Exercices/Architecture du 16F84
La partie exercice reprend la division de la partie cours. Ainsi, chaque cours aura une partie exercice qui aura un titre à peu près identique. Avant de vous lancer dans les exercices, il vous est donc fortement conseillé de lire la partie cours correspondante.
Exercice 1
modifier1°) Calculer la valeur de chacune des étiquettes "w_temp", "montableau" et "mavaraible", puis assembler l'instruction movf du programme ci-dessus.
2°)On donne le contenu de la RAM correspondant à la directive.
adresse | contenu | Instruction (directive ici) |
---|---|---|
$00C | 09 02 03 04 0A 0A 0B 05 09 1F 2E |
CBLOCK 0x0C ; début de la zone variables w_temp :1 ; Zone de 1 byte montableau : 8 ; zone de 8 byte mavariable :1 ; zone de 1 bytes ENDC ; Fin de la zone |
Quelle sera la valeur de l'étiquette mavariable (en hexadécimal) ? Une instruction movf mavariable ,w ;(mavariable) -> W est exécutée, quelle valeur est chargée dans W (W, registre de travail 8 bits) ?
3°) Assemblez l'instruction de la question 2°)
4°) On ajoute l'instruction
movwf PORTA ; W -> PORTA
en fin de programme. Que fait cette instruction ? Assemblez cette instruction en vous servant de l'architecture mémoire pour trouver la valeur de PORTA.
1°)
- w_temp est en 0x0C
- montableau est en 0x0D
- mavariable est en 0x15
2°) On prend les valeurs dans l'ordre, soit :
- w_temp : 09
- montableau : 02 03 04 0A 0A 0B 05 09
- mavariable : 1F
Ne pas oublier d’en prendre 8 pour montableau
4°) range la valeur de W dans un registre qui s’appelle PORTA
Exercice 2 (données en hexadécimal)
modifierLa directive utilisée pour réserver la mémoire RAM dans cet exercice est
CBLOCK 0x0C ; début de la zone variables en ACCESS RAM somme_pdsfort :1 ; Zone de 1 byte somme_pdsfaible : 1 ; zone de 1 bytes compteur :1 ; zone de 1 byte moyenne :1 ; le resultat sera ici ENDC ; Fin de la zone
On donne l'état (connaissance partielle : on ne connaît pas tout, mais c’est suffisant) suivant :
1°) D'après le schéma donné ci-dessus, désassembler la partie utile du code.
2°) Exécuter ensuite les instructions que vous pouvez, et donner les états successifs.
1°) La réponse de la question se trouve en dernière colonne :
0000 00009 ORG 0x00 0000 30FF 00010 movlw 0xFF 0001 008E 00011 movwf compteur ; ⟺ W ->compteur 0002 3000 00012 movlw 0x00 0003 008F 00013 movwf moyenne 00014 END
2°) W <- FF puis W -> compteur puis W <- 0 puis copié dans moyenne
Exercice 3
modifierÉcrire un programme qui transfert la valeur qui est dans "w_temp" dans la variable "mavariable".
CBLOCK 0x0C ; début de la zone variables en ACCESS RAM w_temp :1 ; Zone de 1 byte montableau : 8 ; zone de 8 byte mavariable :1 ; zone de 1 bytes ENDC ; Fin de la zone ORG 0x000 movf w_temp,w ; w_temp dans W movwf mavariable ;W-> mavariable END