Programació en C del PIC 16F690 amb PICkit 2

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

Entrades i sortides binàries

El microcontrolador té tres ports d'entrades i sortides binàries. No tots els ports estan complets:

Port E/S Rang Observacions
PORTA 6 RA0 - RA5 RA3 és només d'entrada
PORTB 4 RB4 - RB7
PORTC 8 RC0 - RC7

La majoria de les entrades i sortides binàries comparteixen pota amb entrades i sortides analògiques (les excepcions són RA3, RA5, RB6, RB7, RC4 i RC5). Les potes compartides estan configurades per defecte com entrades analògiques; si volem fer-les servir com a binàries caldrà desactivar el bit corresponent als registres ANSEL i ANSELH. Cal tenir present que les entrades analògiques estan sobreposades sobre les binàries però amb numeració diferent.

Per a cada port disposem de dos registres. Els registres TRIS (TRISA, TRISB o TRISC) ens permeten configurar, bit a bit, si volem entrada (bit activat) o sortida (bit desactivat). Els registres PORT (PORTA, PORTB o PORTC) ens permeten llegir l'estat de l'entrada o escriure el valor de la sortida.

L'activació o desactivació de bits sobre els ports no funciona igual com amb la resta de memòria. Quan hi ha una instrucció bcf o bsf el microcontrolador llegeix l'adreça completa (vuit bits), modifica el bit i torna a escriure l'edreça completa. En el cas dels ports, el que es llegeix no és l'estat de les sortides sinó el de les entrades. Així quan fem la segona instrucció, es llegeix l'estat de les entrades i com l'entrada RC0 està desactivada tenim un zero en aquesta posició, es canvia el bit 2 i s'escriu.

Per solucionar el problema, podem fer les modificacions sobre una variable i després copiar tota la variable sencera sobre el port. Així si en altres punts del programa es modifica també la variable el que s'enviarà serà el contingut complet. Al final de l'exemple LI tenim una mostra de com fer-ho.

Algunes de les potes corresponents als ports també intervenen en el procés de programació del microcontrolador (RA0, RA1, RA3 i RA4). Quan acabem de programar, el programador es desconnecta del nostre microcontrolador (en el PICkit2 si hem activat 3-State on 'Release from Reset') però aquest procés triga un temps. Convé que esperem uns mil·lisegons abans de fer servir aquestes entrades dins d'un programa. Això és especialment impòrtant en el cas del polsador de la placa de manera que el programa pot actuar com si l'haguéssim premut si mirem l'estat del polsador molt al començament del programa. Això no passa si el programa ja està gravat i la placa es posa en marxa alimentant amb una font en lloc de fer servir el programador.

Quan un bit dels ports A o B està configurat com a entrada, podem decidir dues maneres de funcionar, amb o sense resistències de pull-up. Sense resistències de pull-up (funcionament per defecte) requereix més complicació de hardware. Si, en canvi, activem les resistències de pull-up podem activar una entrada connectant-la directament al negatiu o, millor, fent-ho a través d'una resistència d'entre 33 Ω i 1 kΩ. Per activar la resistència de pull-up cal activar el bit corresponent al registres WPU (WPUA o WPUB). Per poder controlar individualment les resistències de pull-up cal que el bit 7 del registre OPTION_REG (bit RABPU) estigui desactivat; en cas contrari les resistències estaran totes desactivades.

El següent tros de programa configura els ports A i B com a entrades:

	OPTION_REG = 0b01111111;		// Habilita el control de resistències de pull-up als ports A i B
	TRISA = 0b11111111;			// Posa tot el port A com a entrada
	WPUA = 0b11111111;			// Activa les resistències de pull-up
	TRISB = 0b11111111;			// Posa tot el port B com a entrada
	WPUB = 0b11111111;			// Activa les resistències de pull-up
	ANSEL = 0; 				// Posa totes les entrades com a binàries
	ANSELH = 0; 				// i no com analògiques

Per saber quins registres hi ha a cada banc, consulteu la taula 2-8 del document de característiques del PIC 16F690.

 

 

Licencia de Creative Commons
Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.