« Comment démarrer avec un PIC16F84 » : différence entre les versions

Contenu supprimé Contenu ajouté
Minorax (discussion | contributions)
obs tag
Ligne 124 :
'''Bank 0'''
 
<fontspan colorstyle="color:darkblue;">00h INDF</fontspan> <fontspan colorstyle="color:green;">Utilisé en adressage indirect avec FSR, il ne s’agit pas d’un registre physique</fontspan>
<fontspan colorstyle="color:darkblue;">01h TMR0</fontspan> <fontspan colorstyle="color:green;">Timer/Compteur 8 bits</fontspan>
<fontspan colorstyle="color:darkblue;">02h PCL</fontspan> <fontspan colorstyle="color:green;">Poids faible du compteur programme (PC)</fontspan>
<fontspan colorstyle="color:darkblue;">03h STATUS</fontspan> <fontspan colorstyle="color:green;">Registre d’état dont les bits sont : IRP RP1 RP0 TO PD Z DC C</fontspan>
<fontspan colorstyle="color:darkblue;">04h FSR</fontspan> <fontspan colorstyle="color:green;">Pointeur d’adresse en adressage indirect.</fontspan>
<fontspan colorstyle="color:darkblue;">05h PORTA</fontspan> <fontspan colorstyle="color:green;">Port d’Entrée/Sortie A dont les bits sont : x x x RA4/T0CKI RA3 RA2 RA1 RA0</fontspan>
<fontspan colorstyle="color:darkblue;">06h PORTB</fontspan> <fontspan colorstyle="color:green;">Port d’Entrée/Sortie B dont les bits sont: RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT</fontspan>
<fontspan colorstyle="color:darkblue;">07h Pas utilisé</fontspan>
<fontspan colorstyle="color:darkblue;">08h EEDATA</fontspan> <fontspan colorstyle="color:green;">Registre de données de l’ Eeprom</fontspan>
<fontspan colorstyle="color:darkblue;">09h EEADR</fontspan> <fontspan colorstyle="color:green;">Registre d’adresses de l’ Eeprom</fontspan>
<fontspan colorstyle="color:darkblue;">0Ah PCLATH</fontspan> <fontspan colorstyle="color:green;">5 bits de poids fort du compteur programme</fontspan>
<fontspan colorstyle="color:darkblue;">0Bh INTCON</fontspan> <fontspan colorstyle="color:green;">Registre des Interruptions dont les bits sont: GIE EEIE T0IE INTE RBIE T0IF INTF RBIF</fontspan>
 
 
'''Bank 1'''
 
<fontspan colorstyle="color:darkblue;">80h INDF</fontspan> <fontspan colorstyle="color:green;">Utilisé en adressage indirect avec FSR, il ne s’agit pas d’un registre physique</fontspan>
<fontspan colorstyle="color:darkblue;">81h OPTION_REG</fontspan> <fontspan colorstyle="color:green;">Registre d’options, bits : RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0</fontspan>
<fontspan colorstyle="color:darkblue;">82h PCL</fontspan> <fontspan colorstyle="color:green;">Poids faible du compteur programme (PC)</fontspan>
<fontspan colorstyle="color:darkblue;">83h STATUS</fontspan> <fontspan colorstyle="color:green;">Registre d’état dont les bits sont : IRP RP1 RP0 TO PD Z DC C</fontspan>
<fontspan colorstyle="color:darkblue;">84h FSR</fontspan> <fontspan colorstyle="color:green;">Pointeur d’adresse en adressage indirect.</fontspan>
<fontspan colorstyle="color:darkblue;">85h TRISA</fontspan> <fontspan colorstyle="color:green;">Registre de Direction du Port A</fontspan>
<fontspan colorstyle="color:darkblue;">86h TRISB</fontspan> <fontspan colorstyle="color:green;">Registre de Direction du Port B</fontspan>
<fontspan colorstyle="color:darkblue;">87h Pas utilisé</fontspan>
<fontspan colorstyle="color:darkblue;">88h EECON1</fontspan> <fontspan colorstyle="color:green;">Registre de Contrôle n°1 de l’ Eeprom : x x x EEIF WRERR WREN WR RD</fontspan>
<fontspan colorstyle="color:darkblue;">89h EECON2</fontspan> <fontspan colorstyle="color:green;">Registre de contrôle n°2 de l’ Eeprom (il ne s’agit pas d’un registre physique)</fontspan>
<fontspan colorstyle="color:darkblue;">0Ah PCLATH</fontspan> <fontspan colorstyle="color:green;">5 bits de poids fort du compteur programme</fontspan>
<fontspan colorstyle="color:darkblue;">0Bh INTCON</fontspan> <fontspan colorstyle="color:green;">Registre des ITs dont les bits sont: GIE EEIE T0IE INTE RBIE T0IF INTF RBIF</fontspan>
 
 
Ligne 166 :
Voici les bits du registre STATUS qui reflètent le status de l’ALU du PIC, le status du reset et permet également de changer de Bank de registres.
 
<fontspan colorstyle="color:darkblue;"> b7: IRP non utilisé dans le 16F84</fontspan>
<fontspan colorstyle="color:darkblue;"> b6-5: RP1 RP0 Sélection de la bank de registres active</fontspan>
<fontspan colorstyle="color:green;">00: Bank0
01: Bank1
10: non utilisé sur le 16F84
11: non utilisé sur le 16F84</fontspan>
<fontspan colorstyle="color:darkblue;"> b4: TO\ Time Out du watch dog</fontspan>
<fontspan colorstyle="color:green;">1: après un démarrage, CLRWDT ou SLEEP.
0: après un time-out du watch dog</fontspan>
<fontspan colorstyle="color:darkblue;"> b3: PD\ Power down bit</fontspan>
<fontspan colorstyle="color:green;">1: après un démarrage ou après l’instruction CLRWDT
0: après l’exécution de l’instruction SLEEP</fontspan>
<fontspan colorstyle="color:darkblue;"> b2: Z bit Zero</fontspan>
<fontspan colorstyle="color:green;">1: Résultat de l’opération précédente nul
0: Résultat de l’opération non nul</fontspan>
<fontspan colorstyle="color:darkblue;"> b1: DC Digital carry / borrow\</fontspan>
<fontspan colorstyle="color:green;">1: Débordement du 4° bit du résultat de l’opération précédente
0: Pas de débordement</fontspan>
<fontspan colorstyle="color:darkblue;"> b0: C Carry / borrow\</fontspan>
<fontspan colorstyle="color:green;">1: Débordement bit du résultat de l’opération précédente
0: Pas de débordement</fontspan>
 
 
Ligne 193 :
Permet de configurer les résistances de rappel internes du PortB, et aussi l’INT externe, le Timer0 et le prescaler du Timer0 ou du watch-dog
 
<fontspan colorstyle="color:darkblue;"> b7: RBPU\ Résistances de rappel des entrées du PortB</fontspan>
<fontspan colorstyle="color:green;"> 1: Les résistances sont désactivées
0: Les résistances du PortB sont activées</fontspan>
<fontspan colorstyle="color:darkblue;"> b6: INTEDG Sélection du front actif de l’INT externe</fontspan>
<fontspan colorstyle="color:green;"> 1: Interruption sur le front montant de RB0/INT
0: Interruption sur le front descendant de RB0/INT</fontspan>
<fontspan colorstyle="color:darkblue;"> b5: TOCS Source de l’horloge du Timer0</fontspan>
<fontspan colorstyle="color:green;"> 1: Comptage sur la pin RA4/TOCKI
0: Comptage sur l’horloge interne CLKOUT</fontspan>
<fontspan colorstyle="color:darkblue;"> b4: TOCE Sélection du front actif pour le comptage sur RA4/TOCKI</fontspan>
<fontspan colorstyle="color:green;"> 1: Comptage sur front descendant
0: Comptage sur front montant</fontspan>
<fontspan colorstyle="color:darkblue;"> b3: PSA Assignation du Prescaler</fontspan>
<fontspan colorstyle="color:green;"> 1: Prescaler assigné au chien de garde WDT
0: Assigné au Timer TMR0</fontspan>
<fontspan colorstyle="color:darkblue;"> b2-b1-b0: PS2:PS1:PS0 Valeur du Prescaler du TMR0 ou du WDT</fontspan>
<fontspan colorstyle="color:green;">
''''' Valeurs du prescaler'''''
PS2:PS1:PS0 Prescaler TMR0 Prescaler WDT
Ligne 220 :
110 1/128 1/64
111 1/256 1/128
</fontspan>
 
 
==== INTCON (Bank 0 en 0Bh et Bank 1 en 8Bh) ====
 
Ligne 228 :
 
 
<fontspan colorstyle="color:darkblue;"> b7: GIE Autorisation Globale des Interruptions</fontspan>
<fontspan colorstyle="color:green;"> 1: Autorise toutes les interruptions
0: Interdit toutes les interruptions</fontspan>
<fontspan colorstyle="color:darkblue;"> b6: EEIE Autorisation de l’interruption de fin d’écriture en Eeprom</fontspan>
<fontspan colorstyle="color:green;"> 1: Autorise l’interruption de fin d’écriture en Eeprom
0: Interdit l’interruption de fin d’écriture en Eeprom</fontspan>
<fontspan colorstyle="color:darkblue;"> b5: TOIE Autorisation de l’interruption de débordement de TMR0</fontspan>
<fontspan colorstyle="color:green;"> 1: Autorise l’interruption de TMR0
0: Interdit l’interruption de TMR0</fontspan>
<fontspan colorstyle="color:darkblue;"> b4: INTE Autorisation de l’interruption sur RB0/INT</fontspan>
<fontspan colorstyle="color:green;"> 1: Autorise l’interruption sur RB0/INT
0: Interdit l’interruption sur RB0/INT</fontspan>
<fontspan colorstyle="color:darkblue;"> b3: RBIE Autorisation de l’interruption lors d’un changement d’état sur le PortB</fontspan>
<fontspan colorstyle="color:green;"> 1: Autorise l’interruption sur RB7:RB4
0: Interdit l’interruption sur RB7:RB4</fontspan>
<fontspan colorstyle="color:darkblue;"> b2: TOIF Flag de débordement de TMR0</fontspan>
<fontspan colorstyle="color:green;"> 1: Le TMR0 a débordé (à effacer par programme)
0: Le TMR0 n’a pas débordé</fontspan>
<fontspan colorstyle="color:darkblue;"> b1: INTF Flag d’interruption sur RB0/INT</fontspan>
<fontspan colorstyle="color:green;"> 1: Il y a eu une demande d’interruption sur RB0/INT
0: Il n’y a pas d’interruption sur RB0/INT</fontspan>
<fontspan colorstyle="color:darkblue;"> b0: RBIF Flag d’interruption sur le PortB</fontspan>
<fontspan colorstyle="color:green;"> 1: Au moins une pin RB7:RB4 a changé d’état (doit être effacé par programme)
0: Il n’y a pas de changement d’état sur RB7:RB4</fontspan>
 
==Les instructions==
Ligne 367 :
 
'' Liste des broches, classées par catégories:''
<fontspan colorstyle="color:darkblue;">OSC1/CLKIN (pin 16)</fontspan> <fontspan colorstyle="color:green;">Quartz ou entrée de l’horloge externe</fontspan>
<fontspan colorstyle="color:darkblue;">OSC2/CLKOUT (pin 15)</fontspan> <fontspan colorstyle="color:green;">Quartz en mode cristal ou sortie d’horloge à 1/4 de la fréquence en mode RC</fontspan>
<fontspan colorstyle="color:darkblue;">MCLR\ (pin 4)</fontspan> <fontspan colorstyle="color:green;">Master Clear (Reset) ou tension de programmation. (Reset actif à l’état bas).</fontspan>
<fontspan colorstyle="color:darkblue;">Port A :</fontspan>
<fontspan colorstyle="color:darkblue;">RA0 (pin 17)</fontspan> <fontspan colorstyle="color:green;">Port A I/O TTL</fontspan>
<fontspan colorstyle="color:darkblue;">RA1 (pin 18)</fontspan> <fontspan colorstyle="color:green;">Port A I/O TTL</fontspan>
<fontspan colorstyle="color:darkblue;">RA2 (pin 1)</fontspan> <fontspan colorstyle="color:green;">Port A I/O TTL</fontspan>
<fontspan colorstyle="color:darkblue;">RA3 (pin 2)</fontspan> <fontspan colorstyle="color:green;">Port A I/O TTL</fontspan>
<fontspan colorstyle="color:darkblue;">RA4/T0CKI (pin 3)</fontspan> <fontspan colorstyle="color:green;">Port A I/O Entrée Trigger, sortie Drain ouvert. Entrée de comptage TMR0</fontspan>
<fontspan colorstyle="color:darkblue;">Port B :</fontspan> <fontspan colorstyle="color:green;">peut être programmé pour avoir des résistances de pull-up internes sur ses entrées.</fontspan>
<fontspan colorstyle="color:darkblue;">RB0/INT (pin 6)</fontspan> <fontspan colorstyle="color:green;">Port B I/O TTL en I/O et Entrée d’Interruption avec Trigger</fontspan>
<fontspan colorstyle="color:darkblue;">RB1 (pin 7)</fontspan> <fontspan colorstyle="color:green;">Port B I/O TTL</fontspan>
<fontspan colorstyle="color:darkblue;">RB2 (pin 8)</fontspan> <fontspan colorstyle="color:green;">Port B I/O TTL</fontspan>
<fontspan colorstyle="color:darkblue;">RB3 (pin 9)</fontspan> <fontspan colorstyle="color:green;">Port B I/O TTL</fontspan>
<fontspan colorstyle="color:darkblue;">RB4 (pin 10)</fontspan> <fontspan colorstyle="color:green;">Port B I/O TTL avec Interruption sur changement d’état de l’entrée</fontspan>
<fontspan colorstyle="color:darkblue;">RB5 (pin 11)</fontspan> <fontspan colorstyle="color:green;">Port B I/O TTL avec Interruption sur changement d’état de l’entrée</fontspan>
<fontspan colorstyle="color:darkblue;">RB6 (pin 12)</fontspan> <fontspan colorstyle="color:green;">Port B I/O TTL avec Interruption sur changement d’état de l’entrée.</fontspan>
Serial programming clock avec entrée Trigger.
<fontspan colorstyle="color:darkblue;">RB7 (pin 13)</fontspan> <fontspan colorstyle="color:green;">Port B I/O TTL avec Interruption sur changement d’état de l’entrée.</fontspan>
Serial programming data avec entrée Trigger.
<fontspan colorstyle="color:darkblue;">VSS (pin 5)</fontspan> <fontspan colorstyle="color:green;">Masse</fontspan>
<fontspan colorstyle="color:darkblue;">VDD (pin 14)</fontspan> <fontspan colorstyle="color:green;">Alimentation positive</fontspan>
</font>
 
Ligne 439 :
'''Exemple de configuration du PORTA:'''
 
<fontspan colorstyle="color:darkblue;">BSF STATUS, RP0</fontspan> <fontspan colorstyle="color:green;">; Acces Bank1</fontspan>
<fontspan colorstyle="color:darkblue;">MOVLW 0xFB</fontspan> <fontspan colorstyle="color:green;">; TRISA.b2 à 0 pour RA2 en sortie (% 1111.1011)</fontspan>
<fontspan colorstyle="color:darkblue;">MOVWF TRISA</fontspan>
<fontspan colorstyle="color:darkblue;">BCF STATUS, RP0</fontspan> <fontspan colorstyle="color:green;">; Acces Bank0</fontspan>
<fontspan colorstyle="color:darkblue;">…</fontspan>
<fontspan colorstyle="color:darkblue;">…</fontspan>
<fontspan colorstyle="color:darkblue;">BCF STATUS, RP0</fontspan> <fontspan colorstyle="color:green;">; Acces Bank0</fontspan>
<fontspan colorstyle="color:darkblue;">BSF PORTA, RA2</fontspan> <fontspan colorstyle="color:green;">; Allume la Led connectée à la ligne RA2</fontspan>
 
 
Ligne 460 :
'''Exemple de code:'''
 
<fontspan colorstyle="color:green;">; Clignotement d'une Led sur RA2</fontspan>
 
<fontspan colorstyle="color:green;">;;;;;;; *** Configuration</fontspan>
<fontspan colorstyle="color:darkblue;"> LIST p=16F84A</fontspan> <fontspan colorstyle="color:green;">; Processeur 16F84A</fontspan>
<fontspan colorstyle="color:darkblue;">#INCLUDE <p16F84A.inc></fontspan> <fontspan colorstyle="color:green;">; Définition des registre internes du 16F84</fontspan>
<fontspan colorstyle="color:darkblue;">__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC</fontspan> <fontspan colorstyle="color:green;">; Option de programmation </fontspan>
 
<fontspan colorstyle="color:green;"> ;;;;;;; *** Définitions</fontspan>
<fontspan colorstyle="color:darkblue;"> RA2 EQU 0x02</fontspan> <fontspan colorstyle="color:green;">; PortA, sortie RA2</fontspan>
 
<fontspan colorstyle="color:green;"> ;;;;;;; *** Variables</fontspan>
<fontspan colorstyle="color:darkblue;">CBLOCK 0x0C
vTempo1, vTempo2;
ENDC</fontspan>
 
<fontspan colorstyle="color:green;"> ;;;;;;; *** Vecteurs</fontspan>
<fontspan colorstyle="color:darkblue;">ORG H'0000'</fontspan> <fontspan colorstyle="color:green;">; Déclaration du Reset</fontspan>
<fontspan colorstyle="color:darkblue;">GOTO Start</fontspan>
 
<fontspan colorstyle="color:green;">; * Tempo de clignotement qui utilise deux variables pour obtenir une tempo longue</fontspan>
 
<fontspan colorstyle="color:darkblue;">Tempo MOVLW 0xFF</fontspan> <fontspan colorstyle="color:green;">; Charge W avec 0xFF</fontspan>
<fontspan colorstyle="color:darkblue;"> MOVWF vTempo2</fontspan> <fontspan colorstyle="color:green;">; pour charge la vTempo2</fontspan>
<fontspan colorstyle="color:darkblue;">_Tempo2 MOVWF vTempo1</fontspan> <fontspan colorstyle="color:green;">; et la vTempo1</fontspan>
<fontspan colorstyle="color:darkblue;">_Tempo1 DECFSZ vTempo1, f</fontspan> <fontspan colorstyle="color:green;">; Décrémente vTempo et met le résultat dans vTempo</fontspan>
<fontspan colorstyle="color:darkblue;"> GOTO _Tempo1</fontspan> <fontspan colorstyle="color:green;">; puis saute l'instruction suivante si 0. </fontspan>
<fontspan colorstyle="color:darkblue;"> DECFSZ vTempo2, f</fontspan>
<fontspan colorstyle="color:darkblue;"> GOTO _Tempo2</fontspan>
<fontspan colorstyle="color:darkblue;"> RETURN</fontspan>
<font color=green>; * Tempo de clignotement qui utilise deux variables pour obtenir une tempo longue</font>
<font color=darkblue>Tempo MOVLW 0xFF</font> <font color=green>; Charge W avec 0xFF</font>
<font color=darkblue> MOVWF vTempo2</font> <font color=green>; pour charge la vTempo2</font>
<font color=darkblue>_Tempo2 MOVWF vTempo1</font> <font color=green>; et la vTempo1</font>
<font color=darkblue>_Tempo1 DECFSZ vTempo1, f</font> <font color=green>; Décrémente vTempo et met le résultat dans vTempo</font>
<font color=darkblue> GOTO _Tempo1</font> <font color=green>; puis saute l'instruction suivante si 0. </font>
<font color=darkblue> DECFSZ vTempo2, f</font>
<font color=darkblue> GOTO _Tempo2</font>
<font color=darkblue> RETURN</font>
<font color=green>; * Programme principal</font>
<font color=darkblue>Start BSF STATUS, RP0</font> <font color=green>; Acces Bank1</font>
<font color=darkblue> MOVLW 0xFB</font> <font color=green>; TRISA.b2 à 0 pour RA2 en sortie</font>
<font color=darkblue> MOVWF TRISA</font>
<font color=darkblue> BCF STATUS, RP0</font> <font color=green>; Acces Bank0</font>
<font color=darkblue> BSF PORTA, RA2</font> <font color=green>; Allume la Led</font>
<font color=darkblue> CALL Tempo</font>
<font color=darkblue> BCF PORTA, RA2</font> <font color=green>; Eteint la Led</font>
<font color=darkblue> CALL Tempo</font>
<font color=darkblue> GOTO Start</font> <font color=green>; Reboucle au départ</font>
<font color=darkblue> END</font>
<fontspan colorstyle="color:green;">; * Programme principal</fontspan>
 
<fontspan colorstyle="color:darkblue;">Start BSF STATUS, RP0</fontspan> <fontspan colorstyle="color:green;">; Acces Bank1</fontspan>
<fontspan colorstyle="color:darkblue;"> MOVLW 0xFB</fontspan> <fontspan colorstyle="color:green;">; TRISA.b2 à 0 pour RA2 en sortie</fontspan>
<fontspan colorstyle="color:darkblue;"> MOVWF TRISA</fontspan>
<fontspan colorstyle="color:darkblue;"> BCF STATUS, RP0</fontspan> <fontspan colorstyle="color:green;">; Acces Bank0</fontspan>
<fontspan colorstyle="color:darkblue;"> BSF PORTA, RA2</fontspan> <fontspan colorstyle="color:green;">; Allume la Led</fontspan>
<fontspan colorstyle="color:darkblue;"> CALL Tempo</fontspan>
<fontspan colorstyle="color:darkblue;"> BCF PORTA, RA2</fontspan> <fontspan colorstyle="color:green;">; Eteint la Led</fontspan>
<fontspan colorstyle="color:darkblue;"> CALL Tempo</fontspan>
<fontspan colorstyle="color:darkblue;"> GOTO Start</fontspan> <fontspan colorstyle="color:green;">; Reboucle au départ</fontspan>
<fontspan colorstyle="color:darkblue;"> END</fontspan>
 
La temporisation utilisée peut être améliorée de la sorte, afin d’obtenir des temps calibrés:
 
<fontspan colorstyle="color:darkblue;">
CBLOCK 0x0C
vWait1, vWait2, vWait3;
ENDC</fontspan>
<fontspan colorstyle="color:green;"> ; * Tempo 500µS 1+1+165*(1+2)+1+2=500µS</fontspan>
<fontspan colorstyle="color:darkblue;">T_500us MOVLW 0xA5</fontspan> <fontspan colorstyle="color:green;">; 1 cy</fontspan>
<fontspan colorstyle="color:darkblue;"> MOVWF vWait1</fontspan> <fontspan colorstyle="color:green;">; 1 cy</fontspan>
<fontspan colorstyle="color:darkblue;"> NOP</fontspan> <fontspan colorstyle="color:green;">; 1 cy</fontspan>
<fontspan colorstyle="color:darkblue;">_T1 DECFSZ vWait1, f</fontspan> <fontspan colorstyle="color:green;">; 1 cy</fontspan>
<fontspan colorstyle="color:darkblue;"> GOTO _T1</fontspan> <fontspan colorstyle="color:green;">; 2 cy</fontspan>
<fontspan colorstyle="color:darkblue;"> NOP</fontspan> <fontspan colorstyle="color:green;">; 1 cy</fontspan>
<fontspan colorstyle="color:darkblue;"> RETURN</fontspan> <fontspan colorstyle="color:green;">; 2 cy</fontspan>
 
<fontspan colorstyle="color:green;"> ; * Tempo 100ms 1+1+198*(2+500µS+1+2)+6+2=100'000µS = 100 mS</fontspan>
<fontspan colorstyle="color:darkblue;">T_100ms MOVLW 0xC6</fontspan> <fontspan colorstyle="color:green;">; 1 cy</fontspan>
<fontspan colorstyle="color:darkblue;"> MOVWF vWait2</fontspan> <fontspan colorstyle="color:green;">; 1 cy</fontspan>
<fontspan colorstyle="color:darkblue;"> NOP</fontspan> <fontspan colorstyle="color:green;">; 1 cy</fontspan>
<fontspan colorstyle="color:darkblue;">_T2 CALL T_500us</fontspan> <fontspan colorstyle="color:green;">; 2 cy + 500µS</fontspan>
<fontspan colorstyle="color:darkblue;"> DECFSZ vWait2, f</fontspan> <fontspan colorstyle="color:green;">; 1 cy</fontspan>
<fontspan colorstyle="color:darkblue;"> GOTO _T2</fontspan> <fontspan colorstyle="color:green;">; 2 cy</fontspan>
<fontspan colorstyle="color:darkblue;"> NOP</fontspan> <fontspan colorstyle="color:green;">; </fontspan>
<fontspan colorstyle="color:darkblue;"> NOP</fontspan> <fontspan colorstyle="color:green;">; </fontspan>
<fontspan colorstyle="color:darkblue;"> NOP</fontspan> <fontspan colorstyle="color:green;">; </fontspan>
<fontspan colorstyle="color:darkblue;"> NOP</fontspan> <fontspan colorstyle="color:green;">; </fontspan>
<fontspan colorstyle="color:darkblue;"> NOP</fontspan> <fontspan colorstyle="color:green;">; </fontspan>
<fontspan colorstyle="color:darkblue;"> NOP</fontspan> <fontspan colorstyle="color:green;">; 6 cy</fontspan>
<fontspan colorstyle="color:darkblue;"> RETURN</fontspan> <fontspan colorstyle="color:green;">; 2 cy</fontspan>
 
<fontspan colorstyle="color:green;"> ; * Tempo 1 S 1+1+10*(2+100'000µS+1+2)+2= 1,000054 secondes</fontspan>
<fontspan colorstyle="color:darkblue;">T_1s MOVLW 0x0A</fontspan> <fontspan colorstyle="color:green;">; 1 cy</fontspan>
<fontspan colorstyle="color:darkblue;"> MOVWF vWait3</fontspan> <fontspan colorstyle="color:green;">; 1 cy</fontspan>
<fontspan colorstyle="color:darkblue;"> NOP</fontspan> <fontspan colorstyle="color:green;">; 1 cy</fontspan>
<fontspan colorstyle="color:darkblue;">_T3 CALL T_100ms</fontspan> <fontspan colorstyle="color:green;">; 2 cy + 100mS</fontspan>
<fontspan colorstyle="color:darkblue;"> DECFSZ vWait3, f</fontspan> <fontspan colorstyle="color:green;">; 1 cy</fontspan>
<fontspan colorstyle="color:darkblue;"> GOTO _T3</fontspan> <fontspan colorstyle="color:green;">; 2 cy</fontspan>
<fontspan colorstyle="color:darkblue;"> RETURN</fontspan> <fontspan colorstyle="color:green;">; 2 cy</fontspan>