Gpio Puertos
Gpio Puertos
Gpio Puertos
Puertos de Entrada/Salida
1
©ATE-Universidad de Oviedo
Puertos de Entrada/Salida
Puertos de Entrada/Salida
•Para la mayoría de los puertos, la dirección del pin I/O es controlada por
el registro de dirección de datos, llamado TRIS. TRISX<n> controla la
dirección del pin n del puerto X.
©ATE-Universidad de Oviedo
1
Puertos de Entrada/Salida
2
Estructura típica de un puerto de entrada/salida
de propósito general.
El valor de RESET de los registros TRIS suele ser un ‘1’, de forma que por
defecto los pines estén configurados como entradas evitando posibles cortocircuitos
en la alimentación que podrían dañar el micro o el resto del sistema.
3
©ATE-Universidad de Oviedo
Puertos de Entrada/Salida
El registro PORT funciona como un latch para los datos de salida. Cuando el
registro PORT se lee (Ej, MOVF PORTB,W), el micro lee los niveles presentes
en los pines de I/O (no en los latches).
©ATE-Universidad de Oviedo
2
Puertos de Entrada/Salida
4
PUERTOS DE ENTRADA/SALIDA – CARACTERISTICAS ELECTRICAS
5
©ATE-Universidad de Oviedo
Puertos de Entrada/Salida
Debe tenerse cuidado con los pines que en determinados momentos son entradas y en otros salida o
viceversa con instrucciones que sean del tipo READ-MODIFY-WRITE como por ejemplo son las
instrucciones BCF ó BSF ó XORWF.
En el ejemplo que se muestra a continuación el usuario esperaría tener al final del programa los pines
7 y 6 del PORTB como salidas con un valor 0 en ellas. Sin embargo, se encuentra con que el bit 6 si
tiene un 0, pero el bit 7 tiene un 1
; Selección inicial del puerto: PORTB<7:4> Entradas
; PORTB<3:0> Salidas
; PORTB<7:4> tiene las resistencias de pull-up activas y no están conectadas a
otro circuito ;;
; PORT latch PORT pins
; ---------- ---------
BCF PORTB, 7 ; 01pp pppp 11pp pppp ;RB7 es entrada
BCF PORTB, 6 ; 10pp pppp 11pp pppp
BSF STATUS, RP0 ;
BCF TRISB, 7 ; 10pp pppp 11pp pppp ;RB7 es salida
BCF TRISB, 6 ; 10pp pppp 10pp pppp ;RB6 es salida
;
©ATE-Universidad de Oviedo
3
Puertos de Entrada/Salida
Puerto A
Puerto bidireccionalde 6 bits RA0-RA5
7
©ATE-Universidad de Oviedo
Puertos de Entrada/Salida
©ATE-Universidad de Oviedo
4
Puertos de Entrada/Salida
8
REGISTROS ASOCIADOS AL PUERTO A
9
©ATE-Universidad de Oviedo
©ATE-Universidad de Oviedo
5
Puertos de Entrada/Salida
Puertos de Entrada/Salida
Si se quiere que todos los pines del PORTA funcionen como entradas/salidas digitales
se debe escribir un 011x en los bits PCFG<3:0> de ADCON1 . Otro valor en estos
bits hará que todos ó alguno de los pines del puerto A pasen a funcionar como pines
del módulo conversor A/D (ver Lección - Módulo de conversión A/D en el PIC16F87X
para más detalles) . El valor de RESET del registro ADCON1 es todo a 0, por lo
que por defecto, tras un reset el puerto está configurado como entradas analógicas.
10
Puerto B
Puerto bidireccional de 8 bits RA0-RA7
Si el bit de TRISB es un ‘1’ es entrada y si es un ‘0’ es salida. En el momento
que el pin de PORTB pase a ser una salida (TRISB<x>=0) el circuito de pull-
up se desactiva.
Disponen de resistencias “pull-up” en todos los pines. Se utilizan para que las
entradas al puerto no queden al “aire”. Se configura con un “0” en el bit 7 del
reg. OPTION (RBPU).
11
©ATE-Universidad de Oviedo
©ATE-Universidad de Oviedo
6
Puertos de Entrada/Salida
Puertos de Entrada/Salida
13
©ATE-Universidad de Oviedo
©ATE-Universidad de Oviedo
7
Puertos de Entrada/Salida
Puertos de Entrada/Salida
Ejemplo:
CLRF PORTB ;borramos PORTB
BSF STATUS,RP0 ; selección banco1
MOVLW 0xCF ;
MOVFW TRISB ;selecciona RB4 y RB5 como
salidas
14
Puerto C
PORTC es un puerto bidireccional de 8 bits. TRISC (1 entrada, 0 salida).
los pines RC3 y RC4 pueden configurarse para que pasen a formar parte del
módulo I2C.
ESTRUCTURA DE LOS PINES RC<2:0> Y RC<7:5> ESTRUCTURA DE LOS PINES RC<4:3>
15
©ATE-Universidad de Oviedo
©ATE-Universidad de Oviedo
8
Puertos de Entrada/Salida
Puertos de Entrada/Salida
16
Puerto D
PORTD es un puerto bidireccional de 8 pines
con entrada de tipo Schmitt Trigger.
17
©ATE-Universidad de Oviedo
©ATE-Universidad de Oviedo
9
Puertos de Entrada/Salida
Puertos de Entrada/Salida
18
Puerto E
PORTE tiene 3 pines (RE0/RD/AN5, RE1/WR/AN6, y RE2/CS/AN7) que son
individualmente configurables como entradas o salidas.
Para el funcionamiento en este modo, el usuario debe asegurarse que los bits
TRISE<2:0> están a 1, y que estos pines sean entradas digitales. En este
modo los buffers de entrada son TTL.
19
©ATE-Universidad de Oviedo
©ATE-Universidad de Oviedo
10
Puertos de Entrada/Salida
Puertos de Entrada/Salida
20
FUNCION DE LOS PINES
21
©ATE-Universidad de Oviedo
©ATE-Universidad de Oviedo
11
Puertos de Entrada/Salida
Puertos de Entrada/Salida
22
bit 7 ADFM: bit de selección del formato del resultado de la conversión A/D.
1 = Justificado a la derecha. Los 6 bits más significativos de ADRESH se leen como ‘0’.
0 = Justificado a la derecha. Los 6 bits más significativos de ADRESL se leen como ‘0’.
bit 6-4 No implementados: Leidos como ‘0’ bit 3-0 PCFG3:PCFG0: bits de control de
configuración del puerto A/D.
23
©ATE-Universidad de Oviedo
©ATE-Universidad de Oviedo
12
Puertos de Entrada/Salida
Puertos de Entrada/Salida
24
FORMAS DE ONDA DE ESCRITURA DEL PUERTO ESCLAVO PARALELO
Una escritura al PSP se produce cuando las líneas CS y WR se ponen a la vez a nivel bajo. Una
vez que el dispositivo externo considera finalizada la escritura, coloca a nivel alto alguna de esas
2 líneas. Este paso a nivel alto es detectado por el microcontrolador durante el ciclo Q2 de
algún ciclo de instrucción que se esté ejecutando. El flag de Buffer de entrada completo (IBF)
se coloca a 1 en el ciclo Q4 de la instrucción. El flag de interrupción PSIPF (PIR1<7>) también
se pone a ‘1’ pudiendo ocasionar un salto a la rutina de interrupción si los bits PSPIE (PIE1<7>)
y los bits GIE y PEIE del INTCON están a 1.
El flag IBF solo puede limpiarse si se lee el PORTD.
El flag de overflow en el buffer de entrada IBOV (TRISE<5>) se pondrá a ‘1’ si el dispositivo
externo intenta hacer una segunda escritura sin que el nucleo del microcontrolador haya leído el
PORTD.
25
©ATE-Universidad de Oviedo
©ATE-Universidad de Oviedo
13
Puertos de Entrada/Salida
Puertos de Entrada/Salida
Una lectura del PSP se realiza cuando el sistema externo pone a la vez las señales CS y RD a nivel bajo. El
flag que indica buffer de salida lleno OBF (TRISE<6>) se pone a ‘0’ inmediatamente, indicando que el latch
del PORTD está esperando a ser leído por el bus externo. El programa del microcontrolador debe colocar en
el PORTD el dato del que quiere informar al resto del sistema. Cuando el sistema externo pone la señal CS o
la RD a nivel alto, el microcontrolador espera al ciclo Q2 de la siguiente instrucción y en el ciclo Q4 de esa
instrucción pone a 1 el flag de interrupción PSPIF indicando que la lectura del dato por parte del dispositivo
externo se ha completado.
Cuando no estamos en modo PSP, los bits IBF y OBF permanecen a ‘0’. No obstante, si el bit IBOV había
sido previamente puesto a 1, debe limpiarse en el programa.
Como hemos visto, el flag PSPIF se pone a 1 cuando se ha completado una lectura o escritura, este flag
debe limpiarse por parte del programa de usuario. La interrupción puede deshabilitarse si se pone a ‘0’ el bit
de habilitación PSPIE (PIE<7>).
26
©ATE-Universidad de Oviedo
14