Referència | Trucs | Perifèrics | Recursos CITCEA | |
Tutorial | Exemples | Projectes | Inici |
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.
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.