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'1 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.
#pragma config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF #pragma config CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF #include <xc.h> // Carrega el fitxer de funcions necessari per al compilador XC8 #define _XTAL_FREQ 1000000 // La freqüència del rellotge és 1 MHz
unsigned char Valor; // Variable on es guarda el que es mostra als LED char Rapid; // Variable que controla si va ràpid o lent // Si val 0 va ràpid
void main (void){
TRISC = 0b00000000; // Posa el port C com a sortida
TRISA = 0b11111111; // Posa el port A com a entrada
OSCCON = 0b01001000; // 1 MHz
Valor = 1; // Inicialment posem 1 (activem LED 0)
while (1){ // Bucle infinit
PORTC = Valor; // Copiem el valor al port (als LED)
__delay_ms(1000); // Retard d'1 s (a 1 MHz))
Valor = (unsigned char) ((Valor << 1) | (Valor >> 7)); // Desplacem els bits
if (Valor == 16) // Si ja estem al LED 5,
Valor = 1; // tornem al LED 0
if (RA3 == 0){ // Si es prem el polsador
while(RA3 == 0)
; // Esperem que es deixi anar
Rapid++; // Canvia la velocitat
if(Rapid > 1){
Rapid = 0; // Només 0 o 1
}
}
if (Rapid == 1){ // Si va ràpid
OSCCON = 0b01111000; // 8 MHz
} else {
OSCCON = 0b01001000; // 1 MHz
}
}
}

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