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.
#include <p16F690.inc> __config (_INTRC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_OFF&_MCLRE_OFF&_CP_OFF&_BOR_OFF&_IESO_OFF&_FCMEN_OFF)
cblock 0x20 Retard1 ; Definim dues variables de comptatge Retard2 Visualit ; Variable on guardem el que mostraran els LED Rapid ; Variable que memoritza si anem ràpid o no endc
org 0 Inici bsf STATUS,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 b'01001000' ; IRCF = 100, rellotge a 1 MHz movwf OSCCON bcf STATUS,RP0 ; Tria el banc 0 clrf Rapid ; No anem ràpid movlw b'00001000' ; 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 STATUS,C ; 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 STATUS,C ; 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 b'00000001' ; Es prepara per invertir el bit 0 xorwf Rapid ; Canviem la velocitat NoPremut movlw b'01001000' ; IRCF = 100, rellotge a 1 MHz btfsc Rapid,0 ; Mira si hem d'anar ràpid movlw b'01111000' ; IRCF = 111, rellotge a 8 MHz bsf STATUS,RP0 ; Tria el banc 1 movwf OSCCON bcf STATUS,RP0 ; Tria el banc 0 goto Bucle ; Repetim-ho... end

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