En aquest exemple hem configurat el rellotge a una velocitat d'1 MHz, més lenta del que és habitual. Per a aquesta velocidad es fa una rotació de LED amb pauses d'aproximadament 0,8 s. Per veure com funciona el canvi de velocitat, hem afegit que en prémer el polsador RA3 es passi a una velocitat vuit vegades més ràpida (freqüència de 8 MHz) i si es torna a prémer es repren la velocitat original.
PROCESSOR 16F690 #include <xc.inc> config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
Retard1 EQU 0x20 ; Definim dues variables de comptatge Retard2 EQU 0x21 Visualit EQU 0x22 ; Variable on guardem el que mostraran els LED Rapid EQU 0x23 ; Variable que memoritza si anem ràpid o no
PSECT code, class=CODE, delta=2, abs
main:
bsf RP0 ; Tria el banc 1
movlw 0xFF ; Posa l'acumulador a FFh (tot uns)
movwf TRISA ; Posa tots els bits del port A com a entrada
clrf TRISC ; Posa tots els bits del port C com a sortida
movlw 01001000B ; IRCF = 100, rellotge a 1 MHz
movwf OSCCON
bcf RP0 ; Tria el banc 0
clrf Rapid ; No anem ràpid
movlw 00001000B ; Activa el bit 3 al registre W
movwf Visualit ; Copia el valor de W a la variable Visualit
Bucle:
movf Visualit,w ; Copia la variable Visualit sobre el registre W
movwf PORTC ; Copia el valor de W al port C
Ret:
decfsz Retard1,f ; Decrementa la variable 1
; si dona zero, no es fa la instrucció següent
goto Ret ; Salta, excepte si el resultat ha estat zero
decfsz Retard2,f ; Decrementa la variable 2
goto Ret ; Salta, excepte si el resultat ha estat zero
bcf CARRY ; posa a zero el bit d'arrossegament
rrf Visualit,f ; Fa rodar els bits cap a la dreta
; el bit d'arrossegament entra per l'esquerra
; i el bit de la dreta passa a l'arrossegament
btfsc CARRY ; Comprova si s'ha activat l'arrossegament
; Si no s'ha activat, salta una instrucció
bsf Visualit,3 ; Si s'ha activat, torna a posar un 1
btfsc PORTA,3 ; Mira si està premut el polsador RA3
goto NoPremut ; Si no ho està, no cal fer res
Espera:
btfss PORTA,3 ; Mira si està premut el polsador RA3
goto Espera ; Si ho està, esperem que es deixi
movlw 00000001B ; Es prepara per invertir el bit 0
xorwf Rapid ; Canviem la velocitat
NoPremut:
movlw 01001000B ; IRCF = 100, rellotge a 1 MHz
btfsc Rapid,0 ; Mira si hem d'anar ràpid
movlw 01111000B ; IRCF = 111, rellotge a 8 MHz
bsf RP0 ; Tria el banc 1
movwf OSCCON
bcf RP0 ; Tria el banc 0
goto Bucle ; Repetim-ho...
END main

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.