Programació en C del PIC 16F690 amb PICkit 2

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

Exemple PA - Diversos polsadors connectats a una sola entrada

En aquest exemple fem servir cinc polsadors connectats a una sola entrada per encendre els LED de la placa. En aquest cas l'entrada és AN2 (RA2). Agafem un rang de 10 cap a cada costat del valor teòric que correspon a cada polsador. Cada polsador encén el LED que li correspon i el P5 els encén tots.

El programa serà el següent:

#pragma config FOSC = INTRCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF, CP = OFF, CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
#include "pic16f690.h"				// Carrega el fitxer d'adreces i paràmetres del PIC 16F690
#include <xc.h>					// Carrega el fitxer de funcions
						// Definició de les funcions que farem servir 
char Polsador(void);				// Funció de lectura dels polsadors
char Polsad;					// Polsador que s'ha premut
void main (void) {
	ANSEL = 0b00000101;			// Configura AN0 i AN2 com entrada analògica
	ANSELH = 0;				// Desactiva les altres entrades analògiques
	TRISC = 0;				// Tot el port C és de sortida
	TRISB = 0;				// Tot el port B és de sortida
	TRISA = 0xFF;				// Tot el port A és d'entrada
	ADCON1 = 0b00010000;			// Posa el conversor a 1/8 de la freqüència
	ADCON0 = 0b00001001;			// Activa el conversor A/D connectat a AN2
						// amb el resultat justificat per l'esquerra
	while (1) {
		Polsad = Polsador();		// Llegim els polsadors
		if (Polsad == 5) {		// Si s'ha premut el polsador 5
			PORTC = 0b00001111;	// Encén tots els LED
		}
		if (Polsad == 4) {		// Si s'ha premut el polsador 4
			PORTC = 0b00001000;	// Encén el LED 4
		}
		if (Polsad == 3) {		// Si s'ha premut el polsador 3
			PORTC = 0b00000100;	// Encén el LED 3
		}
		if (Polsad == 2) {		// Si s'ha premut el polsador 2
			PORTC = 0b00000010;	// Encén el LED 2
		}
		if (Polsad == 1) {		// Si s'ha premut el polsador 1
			PORTC = 0b00000001;	// Encén el LED 1
		}
		if (Polsad == 0) {		// Si no s'ha premut cap polsador (o dos a la vegada)
			PORTC = 0b00000000;	// Apaga tots els LED
		}
		_delay(200000);	    		// Retard per permetre la visualització
	}
}
char Polsador(void) {
	char Pols = 0;
	ADCON0bits.GO = 1;		// Posa en marxa el conversor
	while (ADCON0bits.GO == 1)	// Mentre no acabi
		;    			// ens esperem
	if (ADRESH < 220 && ADRESH > 200) {
		Pols = 1;		// Comprova polsador 1
	}
	if (ADRESH < 194 && ADRESH > 174) {
		Pols = 2;		// Comprova polsador 2
	}
	if (ADRESH < 163 && ADRESH > 143) {
		Pols = 3;		// Comprova polsador 3
	}
	if (ADRESH < 90 && ADRESH > 70) {
		Pols = 4;		// Comprova polsador 4
	}
	if (ADRESH < 55 && ADRESH > 35) {
		Pols = 5;		// Comprova polsador 5
	}
	return Pols;
}

 

 

Licencia de Creative Commons
This obra by Oriol Boix is licensed under a Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported License.