Programació en C del PIC 16F690

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

Exemple RB - Rotació de LED bidireccional

En aquest exemple farem que cada cop que es premi el polsador els LED comencin a girar en sentit contrari al que ho feien fins al moment. Farem servir la variable Premut per recordar l'estat previ del polsador i la variable Adreta per recordar el sentit de gir actual. El programa serà el següent:

#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 Polsador   RA3		// Li assigna un nom a l'adreça del polsador
#define flipbit(var, bit) ((var) ^= (1<<(bit)))
unsigned char Valor;  				// Variable de 8 bits sense signe (0 a 255)
char NoPremut;					// Estat del polsador
char Adreta;					// Sentit de gir
void main (void){
						// Inicialització de variables
	Adreta = 0;				// Iniciem girant a l'esquerra
	NoPremut = 1;				// Suposem el polsador no premut
	Valor = 1;          			// Inicialment posem 1 (activem LED 0)
						// Configuració d'entrades i sortides
	TRISC = 0b00000000; 			// Posa el port C com a sortida
	TRISA = 0b00001000; 			// Posa RA3 com a entrada
	while (1){				// Inici del bucle de programa
		PORTC = Valor;			// Copiem el valor al port (als LED)
		if (Adreta == 0) {
			Valor = (unsigned char) ((Valor << 1)|(Valor >> 7));	// Desplacem els bits a l'esquerra
			if (Valor == 16)			// Si ja estem al LED 5,
				Valor = 1;    			// tornem al LED 0
		}
		if (Adreta == 1) {
			Valor = (unsigned char) ((Valor >> 1)|(Valor << 7));	// Desplacem els bits a la dreta
			if (Valor == 128)			// Ja hem sortit fora,
				Valor = 8;    			// tornem al LED 4
		}
		if (Polsador == 0 && Polsador != NoPremut)	// Si el polsador ha canviat d'estat i està premut
			flipbit(Adreta, 0);	// Invertim el sentit de gir
		NoPremut = Polsador;		// Guardem el nou valor
		_delay(200000);	    			// Retard per permetre la visualització
	}
}

Ara no cal eliminar els rebots del polsador ja que mirarem el polsador en moments molt separats en el temps.

 

 

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