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