Programació en C del PIC 16F690

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Exemple OR - Oscil·lador del rellotge

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
		}
	}
}

 

 

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