You are on page 1of 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:
q

q q q q

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:
q

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:


q q

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:
q q q q q q q q

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
q q

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:
q

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 0 TRISE<4>

0x00 ANSEL

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:
q

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.
r r

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.
q

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

0x00 -> PORTA 0x00 -> PORTB 0x00 -> PORTC

0x00 -> ANSEL 0x00 -> ANSELH

0xFF -> TRISA 0x00 -> TRISB 0xF0 -> TRISC

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

0x00 0x00 0x00 0x00 0x00

-> -> -> -> ->

PORTA PORTB PORTC PORTD PORTE

0x07 -> ADCON1 0 -> TRISE<4> 0xFF -> TRISA 0x00 -> TRISB 0xF0 -> TRISC 0xFF -> TRISD 1 -> TRISE<2> 1 -> TRISE<1> 0 -> TRISE<0>

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

You might also like