Está en la página 1de 10

2012/09/17 06:07 1/10 Configurando los puertos del PIC16F876A/877A/886/887 como I/O digital

Configurando los puertos del


PIC16F876A/877A/886/887 como I/O digital

Sandro Caballero Rivas

En este articulo trabajamos con 4 PICS. Los PIC16F876A/877A son los que se utilizan en las tarjetas
del laboratorio. Los PIC16F886/887 son las versiones mejoradas de los PICs anteriores. El fabricante,
Microchip recomienda utilizar estas nuevas versiones. Las nuevas versiones integran significativas
mejoras a la funcionalidad interna del microcontrolador:

Oscilador interno configurable. Se pueden seleccionar varias frecuencias de reloj entre 8MHz y
31KHz
Mas pines de input/output.
Menos consumo de energia.
Mayor numero de canales para el convertidor A/D
Perifericos mejorados: ECCP/EUSART/Enhanced-watchdog, etc.

En esta figura se observa una comparativa de las caracteristicas principales de ambas opciones:

Los PIC16F876A/877A no se recomiendan para nuevos diseos. Es posible que el fabricante en un


futuro decida retirarlos del mercado dado que ya existen reemplazos mejorados.

En la protoboard utilizamos el PIC16F886(28 pins) cargado con el bootloader AN1310 de Microchip(


Bajando programas al PIC16F876A/877A/886/887). En la tarjeta del laboratorio utilizamos el
PIC16F877A(40 pins) cargado con el bootloader de Shane Tolmie http://www.microchipc.com/.

Puertos

A traves de los puertos de input y output(I/O) el microcontrolador se comunica con el mundo exterior.
Los puertos pueden ser utilizados como I/O digital o como I/O analogico:

I/O digital significa que el puerto recibe y transmite a traves de sus pines valores binarios
Laboratorio de microcomputadoras - http://localhost/dokuwiki/
Last update: 2012/09/17 06:06 articles:digitalio http://localhost/dokuwiki/doku.php?id=articles:digitalio

exclusivamente,'0' y '1'. Los valores binarios '0' y '1' se corresponden con los voltajes de GND y VDD.
I/O analogico significa que el puerto va a ser utilizado para recibir y/o transmitir por sus pines
voltajes analogicos continuos entre 0 y VDD generalmente.

La datasheet especifica como configurar cada puerto y que tipo de I/O y funcion va a desempear.

Los puertos existentes en los PIC del articulo son:

PIC16F876A PIC16F877A PIC16F886 PIC16F887


PORT(pins,direccion) PORT(pin,direccion) PORT(pins,direccion) PORT(pins,direccion)
A(6,bidireccional) A(6,bidireccional) A(8,bidireccional) A(8,bidireccional)
B(8,bidireccional) B(8,bidireccional) B(8,bidireccional) B(8,bidireccional)
C(8,bidireccional) C(8,bidireccional) C(8,bidireccional) C(8,bidireccional)
D(8,bidireccional) D(8,bidireccional)
E(3,bidireccional) E(1,input) E(4,3 bidireccionales y 1 input)

En la siguiente figura se muestra el diagrama de pines para cada uno de los PICs:

http://localhost/dokuwiki/ Printed on 2012/09/17 06:07


2012/09/17 06:07 3/10 Configurando los puertos del PIC16F876A/877A/886/887 como I/O digital

El diagrama de pines muestra:

El numero de pin dentro del encapsulado(DIP.SOIC,SSOP).


La direccion del flujo de datos del pin,input o output.
Un pin con una indica que se puede configurar como input solamente. Un pin con una indica
que el pin puede ser configurado como output solamente. Un pin con una indica que es un pin
bidireccional, es decir, puede ser configurado como input o como output(no puede ser input y
output al mismo tiempo).
Los nombres que recibe el pin.
Cada nombre de un pin esta separado por una '/'. Cada nombre se corresponde con una funcion
especifica que puede desempear el pin en un instante determinado. Solo puede configurarse el pin
para utilizar una de sus multiples funciones a la vez, es decir, no puede desempear todas sus
funciones al mismo tiempo.

Por ejemplo en la siguiente tabla se muestra para el PIC16F886 el resumen de las diferentes
funciones que puede desempear un pin dado:

Los nombres de las columnas resaltados en rojo se refieren a los modulos o perifericos internos que
tiene el microcontrolador:

I/O Ports
Analog pheriferals
Voltage comparators
Timers
ECCP
EUSART
MSSP
Interrup.

Laboratorio de microcomputadoras - http://localhost/dokuwiki/


Last update: 2012/09/17 06:06 articles:digitalio http://localhost/dokuwiki/doku.php?id=articles:digitalio

Estos circuitos no se muestran en la arquitectura general. Se muestran en la seccion especifica


'Spectial features of the CPU interrupts' de la datasheet.
Pullup circuits
Estos circuitos no se muestran en la arquitectura general. Se muestran en la seccion especifca 'I/O
ports' de la datasheet.
Basic internal modules.
Se refiere a los circuitos internos para : RESET,Programacion ICSP, OSCILADOR externo, Referencia
de voltaje.

Estos modulos o perifericos internos se muestran resaltados en rojo en la arquitectura del


microcontrolador(partes de que esta compuesto):

Por ejemplo el pin 2:

http://localhost/dokuwiki/ Printed on 2012/09/17 06:07


2012/09/17 06:07 5/10 Configurando los puertos del PIC16F876A/877A/886/887 como I/O digital

Se llama RA0 cuando se utiliza como I/O digital


Se llama AN0/ULPWU cuando se utiliza con los perifericos analogicos internos(convertidor A/D(AN0)
y circuito de ultra low power wakeup(ULPWU))
Se llama C12IN0- cuando se utiliza con los comparadores analogicos de voltaje

El pin 1:

Se llama RE3 cuando se utiliza como Input digital.


En este caso se deshabilita la funcion natural de reset del pin, es decir, ya no se conecta aqui el
push boton para dar reset al micro porque se deshabilito esa funcion. Eso quiere decir que el micro
ya no puede ser reseteado externamente.
Se llama MCLR/VPP cuando se utiliza como reset del microcontrolador(MCLR) o cuando se utiliza
como pin de programacion ICSP(VPP).

El pin 20 es el VDD del microcontrolador.

Los pines 8 y 19 son el GND del microcontrolador.

La funcion que va a desempear cada pin se elige y configura via un conjunto de registros de funcion
especifica,SFR que tiene asignado cada uno de los modulos internos mostrados en la arquitectura del
microcontrolador.

Estos registros de configuracion tienen valores por default al darle RESET o POWER al micro. Es decir,
en RESET y POWER ON todos los pines inician su funcionamiento con la funcion seleccionada por
default.

En practicas posteriores se mostrara como configurar e utilizar cada uno de los modulos o perifericos
internos del microcontrolador.

1.0 Configuracion de los puertos como I/O digital

El presente articulo se enfoca en la configuracion del modulo 'I/O Ports'. Este modulo se refiere a los
pines de los puertos utilizados como I/O digital.

I/O digital

Los pines de algunos puertos tienen la funcion de Input analogica(modulo A/D) y de I/O digital. Estos
pines por default estan configurados para ser utilizados como input analogica en RESET. Para
poderlos utilizar como I/O digital debemos configurarlos de forma explicita con algunas instrucciones.

En la siguiente tabla se indica para cada PIC los registros SFRs necesarios para configurar al PORTX
como I/O digital y el valor que se les asigna para lograrlo:

PORT PIC16F876A PIC16F877A PIC16F886 PIC16F887


A 0x07 ADCON1 0x07 ADCON1 0x00 ANSEL 0x00 ANSEL
B 0x00 ANSELH 0x00 ANSELH
C
D 0 TRISE<4>

Laboratorio de microcomputadoras - http://localhost/dokuwiki/


Last update: 2012/09/17 06:06 articles:digitalio http://localhost/dokuwiki/doku.php?id=articles:digitalio

0x07 ADCON1
E 0x00 ANSEL
0 TRISE<4>

Las celdas vacias indican que ese puerto en RESET esta configurado con la funcion I/O digital por
default. Es decir, no se necesita configurar un SFR extra para que sea I/O digital.

Direccion del pin y acceso a su contenido

Cada puerto tiene asociados 2 SFR como minimo:

TRISX.
En el registro TRISX se especifica si el pin 'n' del puerto X va a ser input o output.
El bit 'n' del registro TRISX,TRISX<n> configura la direcion del pin 'n' del PORTX,PORTX<n>.
Los valores del TRISX<n> son:
'1' input
'0' output
PORTX.
El registro PORTX esta ligado fisicamente a los pines del PIC.
Si los pines se configuraron como input, entonces PORTX tendra el voltaje digital que esta
conectado a los pines en ese momento, por ejemplo el voltaje que entregan los dip-switches.
Si los pines se configuraron como output, entonces PORTX tendra el voltaje digital que envia el PIC
al exterior, por ejemplo a los leds.

En RESET todos los pins del PIC estan configurados como INPUT por default.

Los registros 'TRISX' y los bits que se pueden configurar se muestran en la siguiente tabla:

PORT PIC16F876A PIC16F877A PIC16F886 PIC16F887


A TRISA<5:0> TRISA<5:0> TRISA<7:0> TRISA<7:0>
B TRISB<7:0> TRISB<7:0> TRISB<7:0> TRISB<7:0>
C TRISC<7:0> TRISC<7:0> TRISC<7:0> TRISC<7:0>
D TRISD<7:0> TRISD<7:0>
E TRISE<2:0> TRISE<3> TRISE<3:0>

Las celdas vacias indican que el PIC no tiene pines fisicos en ese puerto.

La configuracion del registro TRISX generalmente solo se ejecuta una vez al inicio del programa. Por
ejemplo si se conectan 8 leds al PORTX, entonces el PORTX siempre va a ser output. Por lo cual no
hay necesidad de estar actualizando el valor del registro TRISX continuamente dentro del loop MAIN
del programa.

Nota:

- El valor que se escriba a cada pin de output permanecera fijo hasta que el programa lo sobreescriba.
- El valor leido de cada pin de input es el que este entrando del exterior en ese instante. Si no hay
nada conectado al pin se lee un '0'.
- Si la fuente de poder es de 5V: '1' 5V , '0' 0V
- En reset los pines PORTX<7:0> tienen valores aleatorios. Se deben inicializar a un valor conocido
antes de ser utilizados.

- El PIC16F886 tiene un PORTA de 8 pines, del pin 0 al pin 7. Sin embargo, en el sistema minimo de la
protoboard solo tenemos libres a los pines RA0 al RA5.

http://localhost/dokuwiki/ Printed on 2012/09/17 06:07


2012/09/17 06:07 7/10 Configurando los puertos del PIC16F876A/877A/886/887 como I/O digital

Los pines RA6 y RA7 se estan utilizando en el sistema minimo de la protoborad para conectar el
oscilador externo(crystal de 20MHz). Estos pines tienen los nombres RA6/OSC1/CLKIN y
RA7/OSC2/CLKOUT. Es decir, pueden ser configurados para utilizar una de esas tres funciones.
Por default el firmware del bootloader del PIC16F886 esta configurado para utilizar la funcion de
oscilador externo(OSC1 y OSC2).
Si se deseara utilizar esos dos pines como I/O digital se tendria que programar un bootloader que
utilizara el oscilador interno del PIC16F886. Con eso se elminaria el crystal externo y sus capacitores
y podrian usarse los pines como I/O digital.

- El PIC16F886 tiene un PORTE de 1 pin, RE3.


Este pin tiene el nombre RE3/MCLR/VPP. Es decir, puede ser configurado para utilizar alguna de esas
tres funciones.
Por default el firmware del bootloader del PIC16F886 esta configurado para utilizar la funcion 'MCLR' o
de RESET del micro. Es por eso que podemos conectar un push-botton externo y darle RESET al PIC.
Esa funcion de RESET se podria deshabilitar programando otro bootloader que tuviera deshabilitada la
funcion MCLR. Con eso, el pin RE3 podria usarse como Input digital, a costa de perder la capacidad de
resetear al micro de forma externa. La unica forma que quedaria de resetear al micro seria POWER
OFF y despues POWER ON.

2.0 Ejemplos

Por lo general la configuracion de los pines como I/O digital y la configuracion de su direccion se
realiza una sola vez, en la zona donde se inicializan los modulos internos del PIC. Es decir, antes de
entrar al loop MAIN del programa. Esto se debe a que en la mayoria de las aplicaciones los pines
tienen conectado hardware que siempre se usa como outputs, como los leds o que siempre se usa
como inputs, como los dip-switches.

Sin embargo, es posible tener aplicaciones en donde se requiera que un pin sea configurado como
output en un instante dado y en otro instante como input. En esas aplicaciones seria necesario
configurar la funcion del pin(I/O digital,Input analogica) y/o su direccion (input o output) dentro del
loop MAIN.

Configurar todos los puertos del PIC16F886 como I/O digital,PORTA input,PORTB OUPUT,
PORTC<7:4> input, PORTC<3:0> output

Laboratorio de microcomputadoras - http://localhost/dokuwiki/


Last update: 2012/09/17 06:06 articles:digitalio http://localhost/dokuwiki/doku.php?id=articles:digitalio

Valores para SFRs Traduccion a codigo en ensamblador

BCF STATUS,RP0 ;sel. BANK0 para registros PORTA,


BCF STATUS,RP1 ;PORTB,PORTC
0x00 -> PORTA CLRF PORTA ;inicializar a 0 a los regs. PORTA,
0x00 -> PORTB CLRF PORTB ;PORTB,PORTC. Porque en reset
0x00 -> PORTC CLRF PORTC ;tienen valores aleatorios
BSF STATUS,RP0 ;sel. BANK3 para registros ANSEL,
BSF STATUS,RP1 ;ANSELH
0x00 -> ANSEL CLRF ANSEL ;PORTA con funcion I/O digital
0x00 -> ANSELH CLRF ANSELH ;PORTB con funcion I/O digital
BSF STATUS,RP0 ;sel. BANK1 para TRISA,TRISB,TRISC
BCF STATUS,RP1
0xFF -> TRISA MOVLW H'FF' ;todos los pins del PORTA inputs
MOVWF TRISA
0x00 -> TRISB CLRF TRISB ;todos los pines del PORTB outputs
0xF0 -> TRISC MOVLW 0xF0 ;pines RC7:RC4 inputs,
MOVWF TRISC ;RC3:RC0 outputs

Configurar todos los puertos del PIC16F877A como I/O digital,PORTA input,PORTB OUPUT,
PORTC<7:4> input, PORTC<3:0> output, PORTD input , PORTE<2:1> input, PORTE<0>
output

http://localhost/dokuwiki/ Printed on 2012/09/17 06:07


2012/09/17 06:07 9/10 Configurando los puertos del PIC16F876A/877A/886/887 como I/O digital

Valores para SFRs Traduccion a codigo en ensamblador

BCF STATUS,RP0 ;sel. BANK0 para registros PORTA,


BCF STATUS,RP1 ;PORTB,PORTC,PORTD,PORTE
0x00 -> PORTA CLRF PORTA ;inicializar a 0 a los regs. PORTA,
0x00 -> PORTB CLRF PORTB ;PORTB,PORTC,PORTD,PORTE.
0x00 -> PORTC CLRF PORTC ;porque en reset tienen valores
0x00 -> PORTD CLRF PORTD ;aleatorios
0x00 -> PORTE CLRF PORTE
BSF STATUS,RP0 ;Sel. BANK1 para registros ADCON1,
BCF STATUS,RP1 ;TRISA,TRISB,TRISC,TRISD,TRISE
0x07 -> ADCON1 MOVLW 0x07 ;PORTA y PORTE con funcion de I/O
MOVWF ADCON1 ;digital
0 -> TRISE<4> BCF TRISE,4 ;PORTD y PORTE sin funcion de
;Parallel slave port
0xFF -> TRISA MOVLW H'FF' ;Todos los pines del PORTA inputs
MOVWF TRISA
0x00 -> TRISB CLRF TRISB ;Todos los pines del PORTB outputs
0xF0 -> TRISC MOVLW 0xF0 ;RC7:RC4 inputs, RC3:RC0 outputs
MOVWF TRISC
0xFF -> TRISD MOVLW H'FF' ;Todos los pines del PORTD inputs
MOVWF TRISD
1 -> TRISE<2> BSF TRISE,2 ;RE<2> input
1 -> TRISE<1> BSF TRISE,1 ;RE<1> input
0 -> TRISE<0> BCF TRISE,0 ;RE<0> output

Laboratorio de microcomputadoras - http://localhost/dokuwiki/


Last update: 2012/09/17 06:06 articles:digitalio http://localhost/dokuwiki/doku.php?id=articles:digitalio

3.0 Referencias

1. Datasheet PIC16F886/887
2. Datasheet PIC16F876A/877A
3. Proteus . Software comercial para el desarrollo de esquematicos, simulacion virtual del prototipo y
creacion del circuito impreso(PCB). Se utilizo para la creacion de los esquematicos.

From:
http://localhost/dokuwiki/ - Laboratorio de microcomputadoras

Permanent link:
http://localhost/dokuwiki/doku.php?id=articles:digitalio

Last update: 2012/09/17 06:06

http://localhost/dokuwiki/ Printed on 2012/09/17 06:07

También podría gustarte