Programació en mpasm del PIC 16F690

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 el segon bsf, 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, només 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.

Els registres TRIS i WPUA estan al banc 1 i el WPUB al banc 2. Els tres ports estan al banc 0. El següent tros de programa configura els ports A i B com a entrades:

	bsf		STATUS,RP0		; Tria el banc 1
	bcf		OPTION_REG,7		; Activa el control individual de pull-ups
	movlw		0xFF			; Posa l'acumulador a FFh (tot uns)
	movwf		TRISA			; Posa tot el port A com a entrada
	movwf		WPUA			; Activa les resistències de pull-up
	movwf		TRISB			; Posa tot el port B com a entrada
	bcf		STATUS,RP0
	bsf		STATUS,RP1		; Tria el banc 2
	movlw		0xFF			; Posa l'acumulador a FFh (tot uns)
	movwf		WPUB			; Activa les resistències de pull-up
	clrf		ANSEL			; Posa totes les entrades com a binàries
	clrf		ANSELH			; i no com analògiques
	bcf		STATUS,RP0
	bcf		STATUS,RP1		; Tria el banc 0

Per saber quins registres hi ha a cada banc, consulteu els registres de la memòria de dades.

 

 

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