Telechargé par Lebon Dran

Bibliothèque de routines pour 12F629 P1

publicité
Machine
Translated by Google
01/05/2022 16:26
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
Bibliothèque de routines
pour PIC12F629
Presque toutes ces instructions fonctionnent également avec PIC16F628.
Vérifiez simplement la ou les valeurs de port et le premier fichier
disponible. voir : Site Web de Talking Electronics AE EP PZ
Voir l'article Début ici avec PIC12F629 pour des notes de programmation utiles et une carte des fichiers.
Voici une liste de sous­routines, d'idées et d'aide pour le PIC12F629 . Elles s'appliquent à tout projet utilisant le
PIC12F629.
Ils peuvent être placés dans votre programme et modifiés de n'importe quelle manière ­ pour s'adapter aux
lignes d'entrée/sortie.
La version "Copier et Coller" de ces sous­routines se trouve ICI .
Votre programme doit être créé sur un modèle dans un éditeur de texte tel que le Bloc­notes, en utilisant
blank12F629.asm comme mise en page de départ. Il fournit la disposition et l'espacement corrects.
Un problème inhabituel que vous pouvez rencontrer est un échec de compilation de votre programme en raison
d'un formatage/caractères cachés. MPASM ne génère pas le fichier .hex nécessaire si un problème existe
dans un programme, mais il présente un fichier .lst contenant les défauts. Si vous ouvrez .lst et voyez des
erreurs anormales, elles seront dues à des caractères de formatage masqués. Retapez simplement tous les
mots autour de l'erreur (dans le fichier .asm) et le programme se compilera. N'utilisez pas EditPad car il produit
des caractères cachés. Pour utiliser la bibliothèque de routines ci­dessous, accédez à l'ensemble de routines
« Copier et coller » du bloc­notes et « Copier et coller » dans votre programme dans un autre bloc­notes, au
besoin.
Des sous­programmes supplémentaires peuvent être trouvés dans le cours de programmation PIC. Ceci est
sur la section d'abonnement du site Web.
Assurez­vous que chaque sous­routine utilise un fichier (un registre) avec un nom (un nombre hexadécimal)
qui n'entre pas en conflit avec une autre sous­routine que vous avez créée.
Assurez­vous que les CALLs vont à une sous­routine qui a un RETURN (utilisez retlw 00) pour ramener le
micro à la bonne cadence dans le programme et créé des étiquettes qui vous permettent de savoir ce que fait
la sous­routine.
La bibliothèque suivante est présentée par ordre alphabétique. L'utilisation de ces sous­routines vous
permettra de démarrer très rapidement et vous aider avec 70 % à 90 % d'un nouveau projet.
Lisez toute la bibliothèque pour savoir ce qui est possible.
Pensez simplement à un mot ou à une exigence, allez au mot et lisez­le. De nombreuses sous­routines sont
également disponible dans la section " Copier et Coller ".
Collez­les dans votre programme et modifiez­les en conséquence. Le micro prendra chaque instruction et
l'exécutera. Assurez­vous d'avoir un RETLW 00 qui ramène le micro au Main.
Assurez­vous que chaque sous­section fonctionne correctement avant d'ajouter d'autres instructions.
Complétez progressivement votre programme et enregistrez­le sous un NOUVEAU NOM afin de pouvoir le
rappeler en cas de problème majeur. Ne l'enregistrez pas sous le nom précédent car parfois MPASM ne
l'assemblera pas (il pensera qu'il a déjà été assemblé et ­ ne fait rien !!) et vous vous demanderez pourquoi
les améliorations ne fonctionnent pas !!
Ajouter une valeur à un fichier Le PIC12F629 n'a pas une seule instruction pour ajouter un
numéro à un fichier. Deux instructions sont nécessaires pour effectuer cette opération.
Ajouter MOVLW 0CCh
ADDWF2Eh,1
;Mettre CCh dans
W ; CC sera ajouté au contenu du fichier "2E".
Ajoutez des "bits" à un port ­ activez les bits ou les "lignes".
Ceci est pratique lorsque plusieurs lignes de sortie doivent être activées.
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
1/23
Machine Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
; supposons que GPIO a les bits 0, 1 et 2 HIGH et nous
j'ai besoin de ; pour
MOVLW 10h
activer le bit 5 ; Mettez 10h
IORWFGPIO,1
dans W ­ c'est le bit 5 ; 10h seront ajoutés au
contenu du fichier "05".
alternativement, le bit 5 peut être SET
bsfGPIO,5
Si plus d'une ligne doit être rendue "HIGH" ou "LOW", en même temps, vous devez utiliser :
movlw xxh
iorwf GPIO,1
Ceci est nécessaire en tant que PIC12F629 ne parviendra pas à définir deux lignes ou plus via les instructions
suivantes :
GPIO bsf, 0
GPIO bsf, 2
L'auteur a constaté que le PIC12F629 ne parviendra pas à définir la deuxième ligne.
Adresser un dossier Cela signifie « agir sur » ou « travailler avec » un dossier. Il peut s'agir de
"déplacer une valeur dans un fichier", "incrémenter un fichier", "décrémenter un fichier" ou toute autre opération
similaire. Seuls les fichiers peuvent être précisés (les instructions du programme ne peuvent pas être
envoyées ou modifiées). Les fichiers dont nous parlons sont les fichiers "vides" de 20h à 5F. Programme Ni le
ni les valeurs des tableaux ne peuvent être modifiées. Les valeurs d'une table peuvent être accédées et copiées
par un ensemble d'instructions couvertes par CALL Table . Les instructions d'adressage typiques sont :
MOVWF2A,0
;Copiez le fichier 2A dans W
DECFSZ2A,1
;Décrémenter le fichier 2A
INCF2A,1
;Incrémenter le fichier 2A
INCF2A,0
;mettra l'incrément du fichier 2A dans W mais le fichier 2A ne changera pas !!
Adressage d'un ensemble de fichiers
Un certain nombre de fichiers peuvent être utilisés pour stocker des données temporaires, telles que les chiffres ou les lettres d'un tableau de bord.
Ceci est parfois appelé « bloc­notes » ou « zone du bloc­notes ». Les fichiers doivent être séquentiels pour faire
programmation facile.
Supposons que nous ayons 8 fichiers et que nous devions les traiter avec un simple sous­programme pour afficher les données sur un écran.
Le sous­programme est appelé ADRESSAGE INDIRECT. Voir Adressage indirect.
TOUS LES DRAPEAUX ET BITS
Voici quelques­uns des indicateurs et bits courants.
Pour les autres drapeaux, voir PIC12F629 Fiche technique (.pdf 4 926 Ko)
sélection de banque : bsf 03,5
porter
sélectionne la banque 1 ­ c'est ici que l'on accède au registre OPTION.
gcf 03,5
sélectionne la banque 0 ­ c'est la zone de programmation normale
03,0
Testez le bit de retenue :
btfss 03,0 ;ignorer si un report du bit le plus significatif a
s'est produit.
pré­échelonneur
assigné à
WDT
bsf Option_reg,3
ou:
voir : Minuterie de surveillance
Le registre des options est dans la banque 1
bsf 81h,3
Timer0 est dans la banque 0
assigné à
bcf Option_reg,3
ou:
Minuterie0
bcf 81h,3
GPIO
fichier 05h
voir port d'entrée/sortie. "Définition des bits de port HIGH ou LOW"
TRISIO
dossier 85h
voir "Réglage des bits des ports d'entrée ou de sortie"
pré­échelonneur
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
2/23
Machine
Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
Statut
fichier 03
Contient les indicateurs de report, de sélection de banque et de zéro.
zéro drapeau
03,2
l'indicateur zéro est le bit 2 du fichier 03 (le fichier STATUS)
zéro bit
1 = Le résultat d'une opération arithmétique ou logique est zéro
0 = Le résultat d'une opération arithmétique ou logique n'est pas nul
Vous pouvez regarder le bit 2 :
btfss 03,2 ; sauter si le bit zéro est défini
ET ­ voir aussi Masque
L'opération AND masquera tout ou partie des bits d'un fichier. De cette façon, vous pouvez "supprimer" n'importe quel morceau du haut ou du
grignotage inférieur, etc.
La manière la plus rapide d’effectuer l’opération est la suivante :
Pour masquer (supprimer) le quartet inférieur, il est AND avec F0h (écrit 0F0h)
Pour masquer (supprimer) le quartet supérieur, il est ANDé avec 0Fh (peut s'écrire 00Fh)
Placez la valeur (disons countA) sur laquelle opérer, dans w :
nombre de movfA,w
etlw 0F0h
;seuls les 4 bits supérieurs seront en w.
OPÉRATEURS ARITHMÉTIQUES ET PRÉSÉANCE
­ voir aussi les pseudo­instructions
OPÉRATEUR
Exemple
$
Programme courant/retour
Comptoir
aller à $ + 3
(
Parenthèse gauche
1 + ( ré * 4)
)
Parenthèse droite
(longueur + 1) * 256
! NON (complément logique) si ! (un == b)
– Négation (complément à 2) – 1
~ Complément
*
/
*
longueur
Multiplicateur
drapeau = ~ drapeau
*
un = b
c
Diviseur
un = b / c
%Module
entrée_len = tot_len % 16
+ Ajouter
tot_len = entrée_len
– Soustraire
entrée_len = (tot – 1) / 8
*
8+1
<< Décalage à gauche
drapeaux = drapeaux << 1
>> Décalage à droite
drapeaux = drapeaux >> 1
>= Supérieur ou égal
si entrée_idx >= num_entrées
> Plus grand que
si entrée_idx > num_entrées
<
si entrée_idx < num_entrées
Moins que
<= Inférieur ou égal == Égal
si entrée_idx <= num_entrées
à
si Entry_idx == num_entries
! = Pas égal à
si entrée_idx ! = nombre_entrées
& ET au niveau du bit
drapeaux = drapeaux & ERROR_BIT
^ OU exclusif au niveau du bit drapeaux = drapeaux
^ ERREUR_BIT
| OU inclusif au niveau du bit drapeaux = drapeaux | ERROR_BIT
&& ET logique
si (len == 512) && (b == c)
| | OU logique Égal à
si (len == 512) | |(b ==c)
=
indice d'entrée = 0
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
3/23
Machine Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
+= Ajouter à, définir égal
–=
*=
/=
indice d'entrée += 1
Soustraire, mettre égal
indice d'entrée – = 1
Multiplicateur, mis égal
index d'entrée *= longueur_entrée
Diviseur, mis égal
entrée totale /= entrée_longueur
%= module, mis égal
indice d'entrée %= 8
<<= Décalage à gauche, mis à niveau drapeaux <<= 3
>>= Décalage à droite, mis à niveau drapeaux >>= 3
&= ET, mis égal
drapeaux &= ERROR_FLAG
| = OU inclusif, mis égal
^
= OU exclusif, mis égal
drapeaux | = ERREUR_FLAG
++ Incrément
je ++
– – Décrémenter
je – –
drapeaux ^= ERROR_FLAG
Moyenne
La routine suivante présente la moyenne de 4 valeurs. Résultat en : Moyenne et Moyenne+1.
cbloc h'20' ; début des registres à usage général
Tampon : 8 ; le tampon contient 8 fichiers
Moyenne : 2 ; Moyenne, Moyenne + 1 contiendra le débordement
fin
movlw Tampon ; obtenir l'adresse du tampon
movwf FSR ; pointeur FSR vers le tampon
Appelez GetADC ; lisez l'ADC
bsf STATUT,RP0 ;banque 1
movwf ADRESL ; récupère l'octet de poids faible
ÉTAT bcf,RP0 ; retour à la banque 0
movwf INDF ; stocker dans le tampon
incf FSR,F ;et pointeur vers l'emplacement suivant
movwf ADRESSE ; obtenir l'octet de poids fort
movwf INDF et stockez­le
incfFSR,F ; pointe vers l'emplacement suivant
movfw FSR ; voir si FSR a atteint
xorlw Tampon+8 ; la fin du tampon
movlw Tampon ; préparer la réinitialisation du FSR
btfsc STATUT, Z ; si c'est à la fin
movwf FSR ; réinitialisez­le
movfw Tampon ; déplacer la première valeur vers la moyenne
mowf Moyenne
movfw Tampon+1 ; et octet de poids fort
movwf Moyenne+1
movfw Tampon+2 ; ajouter une seconde valeur
addwf Moyenne,f ; premier octet de poids faible
btfsc STATUS,C ;s'il ya eu un débordement
incf Moyenne+1,f ; incrémenter l'octet de poids fort
movfw Tampon+3 ; et ajouter l'octet de poids fort
addwf Moyenne+1,f
movfw Tampon+4 ; ajouter une troisième valeur
addwf Moyenne,f
btfsc STATUT,C
incf Moyenne+1,f
movfw Tampon+5
addwf Moyenne+1,f
movfw Tampon+6 ; ajoute une quatrième valeur
addwf Moyenne,f
btfsc STATUT,C
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
4/23
Machine
Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
incf Moyenne+1,f
movfw Tampon+7
addwf Moyenne+1,f
bcf STATUT,C ; diviseur par 2
rrf Moyenne+1,f ; en décalant l'octet de poids fort
rrf Moyenne,f ; puis octet de poids faible
bcf STATUT,C ; diviseur par 4
rrf Moyenne+1,f
rrf Moyenne,f
SÉLECTION DE BANQUE
Lors de l'écriture d'un programme, toutes vos instructions sont écrites dans une zone appelée bank0. Cependant certains des
les registres se trouvent dans d'autres banques et vous devez vous rendre dans ces banques pour charger les données dans le fichier sélectionné (registre) ou
lire à partir du fichier.
Le moyen le plus simple de passer de bank0 à bank1 est de définir rp0 dans le fichier d'état : bsf status, rp0
Pour passer de bank1 à bank0 le bit rp0 est effacé : bcf status, rp0
Cependant vous pouvez utiliser une directive reconnue par l'assembleur appelée : banksel Vous pouvez
utiliser le nom de n'importe quel registre de la banque que vous souhaitez sélectionner avec la directive banksel, tel que :
banquel
trisA
banquel
trisio
pour aller à la banque0 :
bankel 0x00 ou 00h
Voici la liste des fichiers pour un PIC12F629 dans bank0 et bank1 :
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
5/23
Machine
Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
Après avoir accédé à un fichier dans Bank1, vous devez vous rendre à bank0, en ajoutant l'instruction : bcf
status, rp0 ou banksel 0x00 pour continuer votre programme.
Bip voir tonalité
Un bip est une tonalité de courte durée.
Binaire vers HEX : voir Décimal vers Binaire vers HEX
Nombres binaires hexadécimaux et décimaux
Tout mélange de nombres binaires, hexadécimaux et décimaux peut être affiché dans un programme.
Les nombres binaires sont présentés comme : 0b00000000' ou b'00000000' ou B'00000000' ou 00000000b ou
b'0100' indique les 4 plus bas.
Les nombres hexadécimaux sont affichés comme : 0x2 ou 0x0F (= quinze) ou 0x3C ou h' ou $
ou <chiffres>h (doit commencer par 0 ....9)
Les nombres décimaux sont affichés comme : d'250' ou nombres décimaux sans préfixe.
Transfert
de bloc Un bloc de données peut être transféré vers un autre emplacement via le sous­programme suivant :
12 octets à l'adresse 30h ­ 3Bh à transférer vers 50h ­ 5Bh
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
23/06
Machine
Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
Transféreur
movlw 0Ch
movwf temp1 ; nombre de boucles
déplacement 30h ; début du 1er bloc
movwf 04h ; charger FSR
movf 00h,0 ;déplace la valeur regardée par FSR dans W
bcf 04h,5
bsf 04h,6 ; tourne FSR 30h à 50h
movwf 00h
bsf 04h,5
bvf 04h,6 ; tourne FSR 50h à 30h
incf 04h,1
decfsz temp1,1
aller à­8$
retour 00
Bouton voir Commutateur
bz ­ branchement sur l'indicateur zéro défini sur "1" Voir plus d'instructions dans "MACRO".
Délai d'
attente
movf Sw,0 bz
délai d'attente xxxxxxx
NouveauSw
aaaayyyyy
;Déplacez le fichier "Sw" vers W ;Si le
fichier Sw est zéro, le résultat de son déplacement vers w
(ou vers lui­même) mettra le
drapeau zéro sur "1" et le micro passera en "timeout".
APPEL voir aussi Stack
CALL signifie se brancher et revenir d'un sous­programme. Cela ne signifie PAS ALLER À. GOTO signifie
brancher inconditionnellement et peut­être ne pas revenir à la routine actuelle. CALL signifie se brancher à un
autre sous­programme et RETURN à l'adresse suivante. Chaque CALL doit avoir sa propre instruction
RETURN ou RETLW 00 à 0FFh.
Utilisez uniquement RETLW 00. N'utilisez pas RETURN.
Lorsqu'une instruction CALL est exécutée, la valeur d'adresse suivante est placée sur la pile et le micro se rend
à l'emplacement identifié dans l'instruction.
Ne faites pas "GOTO" une sous­routine qui a un RETURN à la fin. Le micro ne saura pas où retourner la voiture
l'instruction GOTO ne met pas d'adresse de retour en mémoire (la pile).
L'instruction CALL fonctionne sur les 1024 emplacements complets d'une puce PIC12F629.
UTILISATION DE L'INSTRUCTION D'APPEL
Le micro passera à CALL Delay dans la sous­routine ci­dessous. Il avancera ensuite dans le programme
jusqu'à Delay et exécutera les instructions jusqu'à ce qu'il atteigne RETURN. Le micro remontera alors le
programme jusqu'à la ligne xxxxxxxxx.
Délai
d'appel xxxxxxxxx
­­­­­­­­
­­­­­­­­
­ ­ ­ ­ ­ ­ ­ ­ MOVLW
80h MOVWF2A
Délaï
DelA
DECFSZ2A,1
ALLER À DelA
RETLW 00
;Mètre 80h dans W
;Copieur 80h dans le fichier 21A
;Décrémenter le fichier 21A
;Boucle jusqu'à ce que le fichier 2A soit nul
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
23/07
Machine
Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
CALL Table voir aussi Table et Output a Table Value Les instructions CALL Table utilisent la valeur
en W et l'ajoutent au P rogram Counter ( PC ­ emplacement 02 (fichier 02) ­ le ,1 indique que la valeur en W
sera placé dans le fichier de compteur de programme ) pour créer une VALEUR DE SAUT pour sauter vers
le bas d'une table et prendre une valeur. L'instruction à côté de chaque valeur dans une table place la valeur en
W et fait revenir le micro à l'instruction après CALL Table . La prochaine instruction devrait être de déplacer la
valeur de W vers un fichier.
Appel MOVF 2A,0 ;Le fichier 2A contient 05. Déplacez­le vers W Tableau ;W reviendra
avec 6D d'appel MOVWF 2C
;Déplacez 6D vers le fichier 2C
Tableau ADDWF 02h,1
RETLW3Fh
RETLW 06h
RETLW 5Bh
RETLW4Fh
RETLW 66h
RETLW 6Dh
RETLW7Dh
RETLW 07h
RETLW7Fh
RETLW 6Fh
;Ajoutez W au compteur de programme pour créer un
sauter.
Carry ­ voir aussi ROTATE pour l'une des opérations impliquant CARRY.
Le bit de rapport se trouve dans le registre STATUS (fichier 03) et est le bit 0.
Le bit de rapport est SET lorsque le résultat d'une opération est supérieur à 0ffh.
Le bit de retenue est SET lorsque le résultat d'une opération est inférieur à zéro.
Il est effacé par l'instruction :
BCF 03,0 ­ effacer le bit0 dans le fichier 03
Carry est SET par l'instruction :
BSF 03,0
Pour tester le carry :
BTFSS 03,0
ALLER À AAA ; Le micro ira ICI si le carry n'est PAS Positionner.
GOTO BBB ;Le micro ira ICI si le portage est SET.
Le rapport est également utilisé lorsqu'un fichier est tourné vers la gauche ou vers la droite.
Lorsqu'un fichier est tourné vers la gauche, le MSB (bit le plus significatif (bit 7) est passé dans le rapport et le
bit de report est passé dans le fichier en tant que bit 0. Si vous ne voulez pas que le "bit de report" affecte le
résultat de l'opération il faut l'effacer au préalable, donc :
gcf 03,0
CBLOCK ­ (définit un bloc de constantes) Il s'agit d'une directive utilisée pour définir les fichiers qui
seront réservés à une application. Le format de CBLOCK est :
bloc c 0x20 ; définir le début des fichiers. Le premier "fichier" ou "register" pour un 12F629 est 20h
Faible octet ; ce sera le fichier 20h
Medbyte ; ce sera le fichier 21h
Hibyte ;ce sera le fichier 22h etc etc etc
fin
Cette méthode de déclaration des variables est assez bonne, mais les macros ne peuvent pas en tirer parti.
L'alternative à cblock est :
Équiv. 20h
Medbyte équiv. 21h
Hibyte équiv. 22h
cblock peut utiliser d'autres fichiers, à partir de disons 4Ch : Les 3 fichiers d1, d2 et d3 sont des fichiers pour un
routine de retard et sont des fichiers 4Ch, 4Dh et 4Eh.
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
23/08
Machine Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
bloc c 0x4C
d1
d2
d3
fin
Une autre méthode de définition de fichiers est :
org 20h
save ds 1
flag ds 2
count ds 1
csave ds 1
temp ds 2
ontime ds 1
oftime ds 1
timer ds 3
freq ds 2
mode ds 1
rate ds 1
hi ds 1
low ds 1
delay ds 3
Le compilateur autorisera un fichier (20h) pour « enregistrer » et deux fichiers pour « drapeau ». la minuterie recevra 3 fichiers.
Lors de l'écriture du programme, vous écrivez l'instruction telle que incf flag,1 pour le premier fichier flag et
btfss flag+1 pour le deuxième fichier de drapeau.
Une autre façon de définir les amendes dans cblock :
cblock 0x20 ;définit le début des fichiers. Le premier "fichier" ou "registre" pour un 12F629 est 20h
délai ; ce sera le fichier 20h
delay2 ; ce sera le fichier 21h
timing,timing3,timing6 ;fichier 22h,23h,24h
détecter:4 ;fichier 25h,26h,27h,28h Remarque ":4"indique que 4 fichiers sont nécessaires.
fin
Changer de direction
La direction d'une ligne d'entrée/sortie (ou d'un port entier) peut être modifiée à tout moment pendant l'exécution d'un
programme. Le fichier que nous chargeons, paramétrons ou effaçons est le fichier 85. Il se trouve dans la banque 1. Ce fichier s'appelle TRISIO.
BSF 03,5
;Aller à la banque 1
BSF TRISIO,1
;Effectuer une entrée GP1
FBC 03,5
;Allez à la banque 0 ­ la zone de mémoire du programme.
BSF 03,5
;Aller à la banque 1
BCF TRISIO,1
;Faire une sortie GP1
FBC 03,5
;Allez à la banque 0 ­ la zone de mémoire du programme.
Voir aussi : SetUp pour paramétrer les lignes d'Entrée/Sortie. Voir Entrée pour les instructions permettant de créer une entrée de ligne. Voir
Sortie pour créer une sortie de ligne. Les lignes sont modifiées en définissant ou en effaçant les bits du registre TRISIO. C'est
appelé MANIPULATION DES BITS. Cela évite de toucher (et de bouleverser) d’autres lignes.
Voir Bascule pour changer l'ÉTAT d'une ligne (de HAUT à BAS ou de BAS à HAUT).
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
23/09
Machine
Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
Effacer une liste de fichiers (registres)
movlw Fichier de démarrage
;FSR est chargé avec la valeur du premier fichier à effacer
movwf FSR
;
clrf
ClrBoucle
INDF
;INDF est le fichier 00 et cette commande efface en fait le fichier consulté
par FSR
;avancer au fichier suivant
incfFSR,f
movlw Fichier de fin
;Charger FSR avec la valeur End File
subwf FSR, w
;effectuer une soustraction ;le
bit zéro sera défini lorsque le résultat est le fichier de fin zéro atteint
statut btfss, z
aller à ClrLoop
;effacer l'EEPROM
clear movlw .22 ; le numéro à effacer
movwf boucle le
statut bsf, rp0 clrf eeadr
;sélectionner la banque1
decf eeadr ;pour commencer à la première adresse bsf
status,rp0 ;sélectionnez bank1 incf eeadr,1
clrf eedata ;mettez
un espace à chaque adresse
statut bcf, rp0 ; sélectionnez l'appel de la banque
0, écrivez les
boucles decfsz, 1
aller à ­6 $ au
retour de 00
Comparer
Pour comparer deux valeurs, vous pouvez utiliser XOR.
Pour comparer deux nombres, ils sont XORés ensemble et s'ils sont identiques, le drapeau Z sera activé. Prendre deux
Nombres:
numéro = 7A = 0111 1010
W = 7A = 0111 1010
En commençant par l'extrémité droite, posez­vous la question : « L'un OU l'autre est­il un 1 ? La réponse est non. Le suivant
colonne. "Est­ce qu'un chiffre OU l'autre est un 1 ?" Non, les DEUX chiffres sont 1 ! c'est pourquoi la réponse est NON. Dans
de cette façon, chaque colonne a la réponse NON, lorsque les deux nombres correspondent.
Quand toutes les réponses sont zéro, le drapeau se lève ! dire que le résultat est ZÉRO. En d’autres termes, c’est SET.
Pour trouver le drapeau zéro, regardez dans le registre STATUS, le bit 2, c'est­à­dire le fichier 03,2.
Ex : Pour comparer deux fichiers :
MOVF2A,0
;Déplacer un fichier dans W
XORWF2B,0
;XOR W et 2B
BTFSS 03,2
;Test du drapeau Z Si le drapeau Z est défini (c'est­à­dire 1), les deux fichiers sont les mêmes !
La même chose peut être faite en utilisant l’opération de soustraction :
MOVF2A,0
;Déplacer un fichier dans W
SUBWF2B,0
;Soustraire W de 1B
BTFSS 03,2
;Test du drapeau Z Si le drapeau Z est défini (c'est­à­dire 1), les deux fichiers sont les mêmes !
Même:
L'indicateur Z est SET (c'est­à­dire 1) lorsque les deux fichiers sont identiques !
Comparaison
Le contenu d'un fichier peut être comparé au contenu du registre de travail (W) pour déterminer leur relation
grandeurs. Cela se fait en soustrayant le contenu de W du fichier sélectionné. En testant le Carry et le Zero
drapeaux, 4 résultats peuvent être obtenus :
Par exemple:
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
23/10
Machine Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
MOVLW 22h
;Mettre 22h en W
MOVWF3C
;Déplacement de 22h vers le fichier 3C
MOVLW 15h
;Mettre 15h en W
SUBWF 3C,1
;Soustraire 15h de 22h
BTFSS 03,2
;Test zéro indicateur
BTFSS 03,0
;Test drapeau de transport
OU
L'indicateur zéro est défini si W = valeur du fichier = correspondance
L'indicateur zéro est CLAIR si aucune correspondance
L'indicateur de report est défini si aucun emprunt n'a eu lieu (W est inférieur ou égal à la valeur du fichier)
L'indicateur de report est CLEAR si un emprunt a eu lieu (W est supérieur à la valeur du fichier)
(Mettez une valeur dans W et exécutez SUBWF). Test de transport :
Plus que : l'indicateur de retenue est CLEAR si W est supérieur à la valeur du fichier.
Inférieur à : l'indicateur de retenue est défini si W est inférieur ou égal à la valeur du fichier.
Supposons qu'un fichier (fichier 3E) soit incrémenté à 8, comme dans Logic Probe with Pulser. Nous devons savoir si le fichier est
1, 2 ou 3. La première chose à faire est d’éliminer la possibilité de zéro.
TestA MOVLW 00h
;Eliminer le fichier 3E s'il est nul,
XORWF3E,0
BTFSC 03,2
ALLER À TestA1
;Fichier XOR 3E avec W
;Testez l'indicateur zéro pour voir si le fichier 3E est nul
;Le fichier 3E est nul
L'opération SUBWF ci­dessous soustrait le registre W (via un processus appelé méthode du complément à 2) de
fichier 3E et l'indicateur de retenue dans le registre Option (fichier 03) sera défini si 3E est égal à W ou supérieur à W (c'est­à­dire : 4 ou
plus).
MOVLW04
;Mettez 04 dans W pour l'opération de soustraction
SUBWF 3E,0
;Carry sera défini si 3E est = ou supérieur à 4
BTFSS 03,0
ALLER À Salut
;Tester le drapeau de portage
;Allez à un autre sous­programme tel que "Salut"
Voici le résultat pour toutes les possibilités de file3E :
Si 3E = 0 C = 0 (nous avons éliminé la possibilité de zéro via les 4 premières lignes ci­dessus)
Si 3E = 1 C = 0 (le report est nul ­ ce n'est pas le CARRY BIT c'est l'indicateur SET (1) ou clear (0))
Si 3E = 2 C = 0
Si 3E = 3 C = 0 (le report est clair)
Si 3E = 4 C = 1 (le report est défini)
Si 3E = 5 C = 1
Si 3E = 6 C = 1
Si 3E = 7 C = 1
Si 3E = 8 C = 1
Le bit de retenue dans le fichier Option est le bit 0. On teste donc le bit 0 du fichier 03 :
BTFSS 03,0
Le résultat en 3E ne peut être que 1, 2 ou 3.
Configuration ­ configuration
Le mot de configuration se situe à l'adresse 2007h et n'est accessible que lors de la programmation.
La directive '__CONFIG' est utilisée pour intégrer les données de configuration dans le fichier .asm.
Notez la double barre inférieure à l'avant de « config ».
Certains paramètres de configuration :
_CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF
Chaque paramètre comporte une seule barre inférieure et un signe "&", avec un seul espace entre le signe "&".
Tous les paramètres de configuration (parfois appelés « fusibles ») sont « définis » ou « actifs » lorsque =1.
MAIS trois sont "actifs" lorsqu'ils sont définis =0. C'est ce qu'on appelle "bas actif"
Ce sont : CP ­ Code Protect = actif lorsque = 0
CPD ­ Code Protect Data = actif quand = 0 PWRTE ­ Power­
up Timer = actif quand = 0.
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
23/11
Machine
Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
Utilisez ce qui suit pour régler les "fusibles :" (facile à lire et à comprendre)
_CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _LVP_OFF
Par défaut, tous les bits de configuration sont initialisés à "1"
Voici un exemple de création du mot de configuration :
; ­­­­­ Mot de configuration ­­­­­­­­­­­
; Bande interdite 11 Tension la plus élevée (00 tension la plus basse) pour BOD et POR
; Non implémenté 000 Lires comme '0'
; Protection du code de données 1 CPD désactivé (0=activé)
; Protection du code 1 CP désactivée (0 = protection du code de la mémoire programme activée)
; Détection de baisse de tension 1 DBO activée (0=DBO désactivée)
; E/S numériques GP3/MCLRE 0, MCLR lié en interne à Vdd
; Temporisateur de mise sous tension 1 PWRT désactivé (0=PWRT activé)
; Horloge chien de garde 0 WDT désactivé (0=WDT désactivé)
; Oscillateur 100 E/S INTOSC sur GP4 & GP5
__config b'11000111010100'
Oscillateur :
000 = Oscillateur LP Cristal basse consommation sur GP4 et GP5
001 = Oscillateur XT Cristal/résonateur sur GP4 et GP5
010 = Oscillateur HS Cristal/résonateur haute vitesse sur GP4 et GP5
011 = EC : Fonction I/O sur GP4 ClkIn sur GP5
100 = Oscillateur E/S INTOSC sur GP4 & GP5
101 = INTOSC ClkOut sur GP4 I/O sur GP5
110 = Fonction I/O oscillateur RC sur GP4 RC sur GP5
111 = Oscillateur RC ClkOut sur GP4 RC sur GP5
Copier des bits d'un fichier à un autre Pour copier bit3 :bit2 de "source" vers bit7:bit6
"cible"
movlw b'00111111'
et cible wf, f
source swapf, w
etlw b'11000000'
iorwf cible,f
; ;effacer la cible
bit7:bit6 ;le quartet inférieur de la source sera
remplacé par ;un quartet haut et le résultat sera
placé dans w ;seuls les deux premiers bits de la
source resteront ;les deux premiers bits de la source seront ajoutés à
la "cible"
Pour copier bit3:bit2 de "source" vers bit3:bit2 "cible"
source movf, w etlw
b'00000011' iorwf cible,f
;déplacer source dans
w ;seuls les deux bits inférieurs de source
resteront ;les deux bits inférieurs de source seront ajoutés à
"cible"
Compteur
Si vous souhaitez compter le nombre d'impulsions d'un bouton­poussoir ou d'un interrupteur, le moyen le plus
simple consiste à incrémenter un fichier. Un fichier peut contenir jusqu'à 255. Le résultat est stocké sous forme
de nombre hexadécimal de 01 à FF.
Si vous voulez compter jusqu'à trois, pré­chargez un fichier avec 3 et décrémentez­le et détectez zéro.
Tableau de données ­ voir DT ci­dessous
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
23/12
Machine Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
Anti­rebond d'un bouton (Switch)
Voir Switch et Sondage
Déboguer
Ce n'est pas un terme utilisé dans la création d'un programme en langage PIC, cependant nous en avons deux
suggestions pour trouver un "bogue" ou un problème dans un programme.
1 . Revenez à votre version précédemment enregistrée et notez les différences dans les programmes. Essayez
de détecter visuellement le défaut.
2 . "Home­in" sur la section défectueuse et voyez jusqu'où le micro passe en insérant une instruction Attendez.
(Voir Wait ) Une LED sur une ligne de sortie s'allume pour indiquer que le micro a atteint l'instruction.
Nombres décimaux, hexadécimaux et binaires
Tout mélange de nombres binaires, hexadécimaux et décimaux peut être affiché
dans un programme. Les nombres binaires sont présentés comme : 0b00000000' ou b'00000000' ou
B'00000000' ou 00000000b ou b'0100' indique les 4 plus bas. Les nombres hexadécimaux sont affichés
comme : 0x2 ou 0x0F (= quinze) ou 0x3C ou h' ou $ ou <chiffres>h (doit commencer par 0 ....9) Les nombres
les décimaux sont affichés comme : d'250' ou nombres décimaux sans préfixe.
Décimal à Binaire à HEX :
0 0000 0000 0
1
0000 000
1
16 0001 0000 10h
1
17
0001 000
1
0001 00
32
0010 000
0
20h
11h
33 0010 0001 21h
12h
34
0010 001
0
22h
2 0000 0010 2
18
3 0000 0011 3
19
0001 00
11
13h
35
0010 0011
0
23h
4 0000 0100 4
20
0001 010
0
14h
36
0010 010
0
24h
5 0000 0100 5
21 0001 0101 15h
6 0000 0110 6
22
0001 011
0
7 0000 0111 7
23 0001 0111 17h
8 0000 1000 8
24
0001 1 00
0
18h
40
0010 1 00
0
28h
9 0000 1001 9
25
0001 1
001
19h
41
0010 1
001
29h
dix 0000 1010 ONU
26
0001 1 01
0
1Ah
42
0010 001
0
2Ah
11 0000 1011B
27
0001 1
011
1 ch
43
0010 1 011
2 ch
0
12 0000 1100°C
28
0001 11 0
0
1Ch
44
0010 11 0
0
13 0000 1101 ré
29
0001 11
01
1Dh
45 0010 11 01 2Dh
14 0000 1110 E
30 0001 1110 1Eh
46 0010 1110 2Eh
15 0000 111 1F
31 0001 1111 1Fh
47 0010 1111 2Fh
dix
37 0010 0101 25h
16h
38 0010 011 0 26h
39 0010 0111 27h
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
2
canaux
13/23
Machine Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
48
0011 000
0
30h
64
0100
0000
40h
80
010 1
000 0
50h
49
0011 000
1
31h
65
0100
000 1
41h
81
010 1
0001
51h
50
0011
0010
32h
66
42h
82
010 1
001 0
52h
51
0011
0011
33h
67
0100 00
11
43h
83
010 1
0011 0
53h
52
0011
0100
34h
68
0100
010 0
44h
84
010 1
010 0
54h
53
0011
0100
35h
69
0100
0101
45h
85
010 1
0101
55h
54
0011
0110
36h
70
0100 011
0
46h
86
010 1
011 0
56h
55
0011
0111
37h
71
0100
0111
47h
87
010 1
0111
57h
56
0011
1000
38h
72
0100 1
00 0
48h
88
010 1 1
00 0
58h
57
0011
1001
39h
73
0100 1
001
49h
89
010 1 1
001
59h
58
0011
1010
3Ah
74
0100 1
01 0
4Ah
90
010 1
001 0
5Ah
59
0011
1011
3 ch
75
0100 1
011
4 ch
91
010 1 1
011 0
5 ch
60
0011
1100
3
canaux
76
0100 11
00
4
canaux
92
010 1 11
00
5
canaux
61
0011
1101
3DH
77
0100 11
01
4Dh
93
010 1 11
01
5DH
62
0011
1110
3Eh
78
0100
1110
4Eh
94
010 1
1110
5Eh
63
0011 111
1
3Fh
79
0100
1111
4Fh
95
010 1
1111
5Fh
0100 00
dix
96
010 1 000
0
60h
112 0111 0000 70h
128 1000 000 0 80h
97
010 1 000
1
61h
113 0111 000 1 71h
129 1000 0001 81h
98 0101 0010 62h
114 0111 0010 72h
130 1000 0010 82h
99 0101 0011 63h
115 0111 0011 73h
131 1000 00110 83h
100 0101 0100 64h
116 0111 0100 74h
132 1000 0100 84h
101 0101 0100 65h
117 0111 0101 75h
133 10000 0101 85h
102 0101 0110 66h
118 0111 0110 76h
134 1000 0110 86h
103 0101 0111 67h
119 0111 0111 77h
135 1000 0111 87h
104 0101 1000 68h
120 0111 1000 78h
136 1000 1000 88h
105 0101 1001 69h
121 0111 1001 79h
137 1000 1001 89h
106 0101 1010 6Ah
122 0111 1010 7Ah 138 1000 0010 8Ah
107 0101 1011 6Bh
123 0111 1011 7Bh 139 1000 10110 8Bh
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
14/23
Machine Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
108 0101 1100 6Ch
124 0111 1100 7Ch 140 1000 1100 8Ch
109 0101 1101 6Dh
125 0111 11 01 7Dh 141 1000 11 01 8Dh
110 010 1 1110 6Eh
126 0111 1110 7Eh 142 1000 1110 2Eh
111 010 1 111 1 6Fh
127 0111 1111 1Fh
143 1000 1111 8Fh
144
1001 000
0
90h
1
60
1010
0000
A0h
1 76
145
1001 000
1
91h
161
1010 000
1
A1h
177 1011 0001 B1h
146
1001
0010
92h
162
A2h
178
1011 001
0
147
1001
0011
93h
163
101000
11
A3h
179
1011 0011
B3h
0
148
1001
0100
94h
164
1010 010
0
A4h
180
1011 010
0
B4h
149
1001
0100
95h
165
1010
0101
A5h
181
1 1011
0101
B5h
150
1001
0110
96h
166
1010 011
0
A6h
182
1011 011
0
B6h
151
1001
0111
97h
167 1010 0111 A7h
152
1001
1000
98h
168
1010 1 00
0
A8h
184
1011 1 00
0
B8h
153
1001
1001
99h
169
1010 1
001
A9h
185
1011 1
001
B9h
154
1001
1010
9Ah
170
1010 1 01
0
Ah
186
1011 001
0
Bah
155
1001
1011
9 ch
171
1010 1
011
ABh
187
1011 1
011 0
BBh
156
1001
1100
9
canaux
172
1010 11 0
0
7
canaux
188
1011 11 0
0
BCh
157
1001
1101
9DH
173
1010 11
01
ADh
189
1011 11
01
8DH
158
1001
1110
9Eh
174 1010 1110 AEh
190 1011 1110 BEh
159
1001 111
1
9Fh
175 1010 1111 AFh
191 1011 1111 BFh
1010 00
dix
192 1100 000 0C0h
208 1101 0000 J0h
193 1100 000 1 C1h
209
194 1100 0010 C2h
210
195 1100 0011 C3h
211
196 1100 0100 64h
212
197 1100 0100 C5h
213 1101 0101 J5h
1101 000
1
1011 000
0
224 1110 000 0 E0h
225 1110 0001 E1h
J2h
226 1110 001 0 E2h
1101 00
11
J3h
227 1110 0011 0 E3h
1101 010
0
J4h
228 1110 010 0 E4h
dix
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
B2h
183 1011 0111 B7h
J1h
1101 00
B0h
229 1110 0 0101 E5h
15/23
Machine
Translated by Google
01/05/2022 16:27
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
198 1100 0110 C6h
214 1101 011
0
199 1100 0111 C7h
215 1101 0111 J7h
200 1 100 1 000 C8h
216
1101 1 00
0
J8h
201 1100 1001 69h
217
1101 1
001
J9h 233 1110 1 001 E9h
202 1100 1010 6Ah
218
1101 1 01
0
Dah 234 1110 001 0 EAh
203 1100 1011 6Bh
219
1101 1
011
dbh
204 1100 1100 CC
220
1101 11 0
0
DCh 236 1110 11 0 0 ChE
1101 11
01
7Dh 237 11100 11 01 EDH
205 1100 1101 CDh 221
J6h
230 1110 011 0 E6h
231 1110 0111 E7h
232 1110 1 00 0 E8h
235
1110 1 011
0
206 1100 1110 CEh
222 1101 1110 DEh 238 1110 1110 2Eh
207 1100 111 1 FCh
223 1101 1111 DFh 239 1110 1111 EFh
EBh
240 1111 000 0 F0h
241 1111 000 1F1h
242 1111 0010 F2h
243 1111 0011 F3h
244 1111 0100 F4h
245 1111 0100 F5h
246 1111 0110 F6h
247 1111 0111 F7h
238 1111 1000 F8h
249 1111 1001 F9h
250 1111 1010 FAh
251 1111 1011 FBh
242 1111 1100 CHF
243 1111 1101 FDH
254 1111 1110 FEh
255 1111 111 1 FFFh
Décrémenter
Pour décrémenter un fichier, utilisez l'instruction : DECF 3A,1. Cela remet la nouvelle valeur dans le fichier. Né
pas utiliser DECF 3A,0 car la nouvelle valeur passe en W !
Pour décrémenter un fichier deux fois, utilisez :
DECF 3A,1
DECF 3A,1
Pour diviser par deux la valeur d'un fichier, le contenu est décalé vers la droite :
RRF 3A,1­ le fichier ne doit pas avoir de bit dans bit0.
Un fichier peut être décrémenté jusqu'à ce qu'il soit à zéro :
DECFSZ, 3A,1
Pour décrémenter W on peut utiliser l'instruction : addlw ­1
On peut aussi décrémenter un fichier en lui augmentant une valeur.
Par exemple, nous pouvons décrémenter un fichier d'un montant de 0,10 en y augmentant 0,246. (0ffh = 0,256)
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
16/23
Machine
Translated by Google
01/05/2022 16:28
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
supposons que le fichier 3Ah ait une valeur de .60 movlw .246
(dix de moins qu'un fichier complet) addwf 3Ah le fichier 3A
contiendra
désormais .50
Délai Un sous­programme de délai est nécessaire pour presque tous les programmes. L'un des principaux
les objectifs est de ralentir l'exécution d'un programme pour permettre la visualisation des affichages et la
production de tonalités. Le délai le plus court est NOP. Il s'agit d'une instruction "ne rien faire" qui prend 1
microseconde. Vous aurez besoin d'un million de " NOP " pour produire un délai de 1 seconde. Voici quelques
instructions pour produire un délai très court :
non aller à $+1
appeler $+2
aller à $+1 retlw 00
;1 microseconde
;
;2 microsecondes ; ;3
instructions produisant 2 + 2 + 2 +2 microsecondes
;le micro retournera là où la sous­routine était ;appelée
depuis
Il n'est pas pratique d'utiliser des instructions avec un délai d'une microseconde seulement car l'espace du
le programme ne permettra qu'environ 1 000 instructions ou 2 000 microsecondes !
La réponse est de créer une boucle. Si un fichier est chargé avec une valeur et décrémenté, cela créera un
délai judiciaire. Les deux instructions : DECFSZ 3A,1 et GOTO DelA prendront 3uS. 80h boucles = 127 boucles x 3
+ 1 boucle x 2uS + 2uS en entrée + 1uS en sortie = 386uS
Del
MOVLW 80h
MOVWF3A
DelA
DECFSZ 3A,1
ALLER À DelA
RETLW 00
;Mètre 80h dans W
;Copieur 80h dans le fichier 1A
;Décrémenter le fichier 3A
;Boucle jusqu'à ce que le fichier 3A soit nul
Une routine de retard plus simple ci­dessous décrémente un fichier avec 256 boucles. Chaque boucle est de
4uS et le résultat est légèrement supérieur à 1 000uS = 1mS. La routine se termine avec 00h dans le fichier.
Lors de la deuxième exécution, la routine effectue 256 boucles ­ le fichier n'a pas besoin d'être préchargé.
Le délai le plus long (tel que celui ci­dessous) en utilisant un seul fichier est d'environ 1 ms.
Supprimer NOP
DECFSZ 3A,1
GOTO Suppr
RETLW 00
;Décrémenter le fichier 3A
;Boucle jusqu'à ce que le fichier 3A soit nul
1mS de retard
La même longueur de retard peut être produite en utilisant le registre "w":.
Supprimer
Supprimer1
movlw
.255 addlw ­.1
btfss 3,2 aller à Del1
retour 00
; (pas d'instruction de décrémentation) donc soustrayez 1
de "w" ;
testez le bit zéro dans le fichier d'état et sautez si le bit
zéro est défini. ;
cela produit 255 boucles de 4uS ­ environ 1mS
DELAIS IMBRIQUES
Pour produire des retards supérieurs à 1 ms, deux fichiers ou plus sont nécessaires. Chaque fichier est placé
autour du précédent pour obtenir un effet multiplicateur. Le retard interne produit 256 boucles, le fichier de
sortie produit 256 boucles du fichier interne. Cela donne 256 x 256 boucles = 256 mS.
Le délai le plus simple décrémente un fichier à zéro. A la fin d'une exécution, un délai contient 00 et cela
produit le délai le plus long, la prochaine fois qu'il est utilisé.
Cela signifie qu'un fichier n'a pas besoin d'être préchargé.
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
17/23
Machine Translated by Google
01/05/2022 16:28
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
Ce qui suit est un délai imbriqué à deux fichiers. Le temps de retard est d'environ 260 ms (disons
1/4 seconde) :
Supprimer NOP
DECFSZ 3A,1
ALLER À
Supprimer
DECFSZ 3B,1
ALLER À
;Décrémenter le fichier 3A
;Boucle jusqu'à ce que le fichier 3A soit égal à zéro
;Décrémenter le fichier 3B
;Boucle jusqu'à ce que le fichier 3B soit égal à zéro
Supprimer
RETLW 00
Délai de 260 ms
Si vous souhaitez un délai entre 1mS et 256mS, vous devrez pré­charger le fichier 3B. Pour chaque valeur
chargé dans le fichier 3B, un retard de 1mS sera produit. Un délai de 125 ms est illustré ci­dessous :
Supprimer
Supprimer1
MOVLW7Dh
MOVLW3B
NON
;Chargeur W avec 125 pour un délai de 125mS
DECFSZ 3A,1
ALLER À Del1
;Décrémenter le fichier 3A
DECFSZ 3B,1
ALLER À Del1
RETLW 00
;Boucle jusqu'à ce que le fichier 3A soit à zéro
;Décrémenter le fichier 3B
;Boucle jusqu'à ce que le fichier 3B soit à zéro
Délai de 125 ms
Un délai de 0,5 seconde :
; Délai = 0,5 seconde = 500 000 cycles
; Fréquence d'horloge = 4 MHz
bloc c 0x20 ; les fichiers de retard d1, d2 et d3 sont à 20h, 21h et 22h d1 d2 d3 endc
Délai1
Délai2
movlw 0x0B0h
movwf d1
movlw 17h
movwf d2
movlw 0x02
movwf d3
;499994 cycles ;ceci envoie le micro à : goto Delay 2
;instruction de 2 cycles qui fait avancer le ; micro à
l'instruction suivante ; 2 autres cycles vérifiés
3­2­08
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay2
goto $+1
goto $+1
goto $+1
retlw 00
L'instruction goto $+2 est une instruction à 2 cycles qui envoie les micro 2 instructions dans le programme.
Cette consigne présente deux avantages. Il fournit un délai de 2 microsecondes à 4 MHz et évite la création
d'une étiquette.
Dans la section de décrémentation de la sous­routine (Delay2), l'instruction : goto $+2 fait passer le micro à
2 instructions plus bas dans le programme. Il s'agit simplement d'une manière nouvelle et innovante de produire
une routine de retard.
Le second goto $+2 envoie le micro à : goto Delay2. La première instruction aurait pu être goto $+4 mais cette
la routine est conçue pour « perdre » du temps et chaque instruction ajoute au retard.
Un délai de 2 secondes :
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
18/23
Machine Translated by Google
01/05/2022 16:28
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
; Délai = 2 secondes = 2 000 000 cycles
; Fréquence d'horloge = 4 MHz
bloc c 0x20 ; les fichiers de retard d1, d2 et d3 sont à 20h, 21h et 22h d1 d2 d3 endc
Délai1
Délai2
movlw 0x11
movwf d1
movlw 0x5D
movwf d2
movlw 0x05
movwf d3
;1 999 996 cycles ;ceci envoie le micro à : goto Delay
2 ;instruction de 2 cycles qui fait avancer le ; micro à
l'instruction suivante
decfsz d1, f
aller à $+2
decfsz d2, f
aller à $+2
decfsz d3, f aller à
Delay2
aller à $+1
aller à $+1
retlw 00
Code généré par http://www.golovchenko.org/cgi­bin/delay
La sous­routine suivante présente un délai de "X" minutes et "Y" secondes.
L'exemple suivant fait que le micro attend EXACTEMENT 930 000 000 cycles d'instructions.
c'est­à­dire : 15 minutes 30 secondes
Exemple :
movlw 0x0F ; Cela durera 15 minutes. C'est l'appel de valeur "X"
_WAIT_1Min
déplacement 0x30 ; Cela reflète 30 secondes. Il s'agit de l'appel de valeur "Y"
_WAIT_1s
; Les retards suivants sont calibrés pour un fonctionnement à 4 MHz
;
; OPÉRATION : Créer un littéral en W. Ce littéral représente le multiplicateur
; du retard. Appelez immédiatement la fonction.
;
; Exemple :
; mouvement 0x0F
; appeler _WAIT_1Min
; movlw 0x30
; appeler _WAIT_1s
;
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
cblock 0x20 ­ les noms des fichiers ci­dessous commencent au fichier 20h
;......
minute
seconde
déci
milli
micro
;......
fin
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*
60 000 000
_Attendre 1 min ; W
minute de mouvement
*
déplacement 0x3B ; 1 000 000
59 appeler _WAIT_1s
*
100 000
déplacement
0x09 ; 9 appeler _WAIT_100m
*
movlw 0x63 ; 99 1000
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
19/23
Machine Translated by Google
01/05/2022 16:28
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
appeler _WAIT_1m
*
movlw 0x63 ; 99 10
appelez _WAIT_10us
aller à déc4 ; <= 59 999 996 cycles
NON
aller à $+1
aller à $+1
aller à $+1
movlw 0x3B
appeler _WAIT_1s
movlw 0x09
appeler _WAIT_100m
movlw 0x63
appeler _WAIT_1m
movlw 0x63
appelez _WAIT_10us
4 décembre
decfsz minute, F
goto $­0x0D ­ le micro ira à "NOP" ci­dessus
retourner
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*
_ATTENTE_1s ; W 1 000 000
movwf seconde
*
100 000
déplacement
0x09 ; 9 appeler _WAIT_100m
*
movlw 0x63 ; 99 1000
appeler _WAIT_1m
*
movlw 0x63 ; 99 10
appelez _WAIT_10us
aller à déc3 ; <= 999 996 cycles
NON
aller à $+1
aller à $+1
aller à $+1
movlw 0x09
appeler _WAIT_100m
movlw 0x63
appeler _WAIT_1m
movlw 0x63
appelez _WAIT_10us
3 décembre
decfsz seconde,F
aller à $­0x0B
retourner
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*
100 000
_ATTENDEZ_100m ; W
movwf déci
*
1000
movlw 0x63 ; 99
appeler _WAIT_1m
*
movlw 0x63 ; 99 10
appelez _WAIT_10us
aller à déc2 ; <= 99 996 cycles
NON
aller à $+1
aller à $+1
aller à $+1
movlw 0x63
appeler _WAIT_1m
movlw 0x63
appelez _WAIT_10us
2 décembre
decfsz déci,F
goto $­9 ­ le micro ira à "NOP" ci­dessus
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
20/23
Machine
Translated by Google
01/05/2022 16:28
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
retourner
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*
_ATTENDEZ_1m ; W
1000 cycles
movwf milli
*
movlw 0x63 ; 99
10 s = 0,99 ms
appels _WAIT_10us
aller à décembre
NON
aller à $+1
aller à $+1
aller à $+1
movlw 0x63
appelez _WAIT_10us
déc
decfsz milli,F
goto $­7 ­ le micro ira à "NOP" ci­dessus
retourner
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
*
_WAIT_10us ; W 10cycles
micro
aller au 5 décembre
NON
aller à $+1
aller à $+1
aller à $+1
5 décembre
decfsz micro,F
aller à­5$
retourner
Un délai peut être créé à l'aide des minuteries du PIC12F629. Timer0 est de 8 bits et est identifié comme : tmr0 equ H'0001'
Timer1 est de 16 bits et peut être utilisé avec deux temporisations de 8 bits : tmr1L equ
H'000E' tmr1H equ
H'000F'
(c'est égal à trois timers 8 bits)
Aucune pré­configuration n'est requise. Vous pouvez les utiliser à la place d'un fichier.
; 1 seconde de retard en utilisant timer1L et timer1H
_1Sec
movlw 05h
movwf delC nop
decfsz
tmr1L,1
goto $­2
decfsz tmr1H,1
goto $­4
decfsz delC,1
aller à $­6
retlw 00
+1
Voici une instruction astucieuse : +1 Vous pouvez aller à ou appeler n'importe quelle sous­routine en
en utilisant le nom de la sous­routine et vous l'entrerez via la première instruction ­ c'est normal. Mais si la sous­routine charge une
valeur au début, vous pouvez charger une valeur différente et appeler la sous­routine pour
obtenir un résultat différent. Tout ce que vous avez à faire est d'entrer la sous­routine à une position, une ou
deux instructions, en bas de la routine :
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
21/23
Machine
Translated by Google
01/05/2022 16:28
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
appeler timer+1 ou : goto delay+2
La sous­routine utilisera votre nouvelle valeur et sortira avec un résultat différent, ou un retard.
Détecter une valeur
Si un fichier a été incrémenté dans une sous­routine, vous pourrez peut­être connaître la valeur qu'il contient.
Vous voudrez peut­être connaître sa valeur exacte ou si elle est supérieure ou inférieure à une certaine valeur.
Pour voir s'il s'agit d'une valeur exacte, il est XOR avec une valeur connue. Voir XOR.
Pour détecter une valeur particulière, ils sont ensemble XOR. Voir XOR.
Vous pouvez également détecter une valeur particulière par BIT TESTING. Vous devez vous assurer que tous
les nombres testés peuvent être distingués en testant un seul bit. Par exemple : 1, 2, 4, 8, 10h peuvent être
testés via les bits 0, 1, 2, 3, 4. Mais si 3 est inclus dans votre exigence, vous ne pouvez pas tester un seul bit.
Différent
Pour savoir si deux nombres sont différents, ils sont ensemble XOR. Voir OU exclusif
Divider Une division simple telle qu'une division par 2 peut être effectuée par l'instruction RRF. Les RRF
successives diviseront par 4, 8, saisissent, etc. Les autres divisions dépasseront le cadre de ce cours. Le nombre ne
peut ne pas avoir de bit dans bit0, si une division précise est requise.
DS ou ds (signifie : définir l'espace)
Ce terme peut être vu dans certains programmes, comme :
compte ds 2
somme ds 1
dve ds3
C'est le code pour : "avancer le pointeur de chargement de la valeur spécifiée."
Réservez le nombre d’emplacements de fichiers. ORG doit être défini pour que cela fonctionne.
Il alloue simplement deux emplacements pour compter, un pour somme et trois pour dve Ceci permet au
programmeur de produire des fichiers pour : count, count+1, sum, dve, dve+1, dve+2
DT ­ Tableau de données
La directive (commande) DT permet de créer une table sans avoir à écrire :
retour 40h
retour 79h
retour 3Ah
retour 4Ch
Par exemple :
SegTable ANDLW 0Fh ; convertir un nombre en W en forme de segment
ADDWF PCL,F
DT 40h,79h,24h,30h,19h,12h,02h,78h,00h,10h
DT7Fh,7Fh,7Fh,7Fh,7Fh,7Fh
Versions du compilateur :
SegTable ANDLW 0Fh ; convertir un nombre en W en 7 segments
ADDWF PCL,F
retrait 40h
retrait 79h
retrait 24h etc.
Double
Pour doubler la valeur du contenu d'un fichier, il est décalé vers la GAUCHE (RLF 3A,1). Le nombre doit être
inférieure à 80h. (il ne doit pas y avoir de bit à l'emplacement bit7).
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
22/23
Machine
Translated by Google
01/05/2022 16:28
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
EEPROM
Le PIC12F629 dispose de 128 octets d'EEPROM, de 00h à 7F pour stocker en permanence les données.
Si vous n'avez besoin de stocker que quelques octets de données pendant une courte période, utilisez des
fichiers qui ne sont pas nécessaires à l’exécution du programme. Ces informations seront perdues lors de la
mise hors tension.
Les 128 octets d'EEPROM nécessitent un ensemble spécial d'instructions pour placer les données dans
l'EEPROM. Le temps d'écriture réel de ces données est très long (en termes informatiques) et peut se faire en
arrière­plan, pendant que le programme principal s'exécute. Un indicateur sera SET lorsque les données sont disponibles
été écrites et cela permettra d'entrer un autre octet de données.
Chaque cellule EEPROM peut être écrite environ 1 million de fois.
Avant de lire une valeur dans un emplacement de l'EEPROM, elle doit être chargée avec une valeur lors de la
"héliogravure". Pour charger le premier emplacement dans l'EEPROM avec une valeur, les instructions suivantes
sont placés dans un programme. L'EEPROM commence à l'emplacement 2100h et le terme DE signifie :
"définir l'EEPROM". Il y a 128 emplacements EEPROM et en suivant la disposition du deuxième tableau,
n'importe quel emplacement peut être spécifiquement pendant la gravure.
ORG 2100h
DE 43h
;Point de départ de l'EEPROM ;Le premier
l'emplacement de l'EEPROM contient la valeur 43h
AILETTE
Les emplacements dans l'EEPROM :
ORG 2100h
;Point de départ
DE 84h, 16h, 23h, 80h, 0CAh, 32h, 7Bh, 0A2h
DE 34h, 53h, 25h, 02h, 0FFh, 20h, 03h, 04h
; ; ; jusqu'à huit lignes
AILETTE
LIRE L'EEPROM :
La sous­routine pour lire une valeur dans l'EEPROM est illustrée ci­dessous.
EELire État bsf, rp0
movlw Config_addr
movwf EEADR
bsf EECON1, rd
movf EEDATA,0
État bcf, rp0
retour 00
;aller à la Banque 1
; ;adresse à lire
;EE
lire ;déplacer les données vers
W ;retour à la banque 0
ÉCRIRE SUR EEPROM :
La sous­routine d'écriture sur EEPROM est illustrée ci­dessous.
EEWécrire bsf status,rp0 bsf
EECN1,WREN bcf
INTCON,GIE molw
55h movwf
EECON2 movlw
AAh
movwf EECON2
bsf EECON,WR
bsf INTCON,GIE
bcf Statut,rp0
retlw 00
;banque1 ;activer
l'écriture ;désactiver les
interruptions ;déverrouiller l'écriture
;
;
; :démarrer
l'écriture ;activer les
interruptions ;banque 0
;Retour
En haut
www.talkingelectronics.com/projects/StartHere12F629/Library12F629_P1.html
23/23
Téléchargement