Digitalio config 16f887a_886

10
2012/09/17 06:07 1/10 Configurando los puertos del PIC16F876A/877A/886/887 como I/O digital Laboratorio de microcomputadoras - http://localhost/dokuwiki/ 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 diseños. 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

Transcript of Digitalio config 16f887a_886

Page 1: Digitalio config 16f887a_886

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

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

Configurando los puertos delPIC16F876A/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 tarjetasdel laboratorio. Los PIC16F886/887 son las versiones mejoradas de los PICs anteriores. El fabricante,Microchip recomienda utilizar estas nuevas versiones. Las nuevas versiones integran significativasmejoras a la funcionalidad interna del microcontrolador:

Oscilador interno configurable. Se pueden seleccionar varias frecuencias de reloj entre 8MHz y●

31KHzMas 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 diseños. Es posible que el fabricante en unfuturo 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 elPIC16F877A(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●

Page 2: Digitalio config 16f887a_886

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

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

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 desempeñar.

Los puertos existentes en los PIC del articulo son:

PIC16F876A PIC16F877A PIC16F886 PIC16F887PORT(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:

Page 3: Digitalio config 16f887a_886

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

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

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 ← indicaque el pin puede ser configurado como output solamente. Un pin con una ↔ indica que es un pinbidireccional, es decir, puede ser configurado como input o como output(no puede ser input youtput al mismo tiempo).Los nombres que recibe el pin.●

Cada nombre de un pin esta separado por una '/'. Cada nombre se corresponde con una funcionespecifica que puede desempeñar el pin en un instante determinado. Solo puede configurarse el pinpara utilizar una de sus multiples funciones a la vez, es decir, no puede desempeñar todas susfunciones al mismo tiempo.

Por ejemplo en la siguiente tabla se muestra para el PIC16F886 el resumen de las diferentesfunciones que puede desempeñar un pin dado:

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

I/O Ports●

Analog pheriferals●

Voltage comparators●

Timers●

ECCP●

EUSART●

MSSP●

Interrup.●

Page 4: Digitalio config 16f887a_886

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

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

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/Oports' de la datasheet.Basic internal modules.●

Se refiere a los circuitos internos para : RESET,Programacion ICSP, OSCILADOR externo, Referenciade voltaje.

Estos modulos o perifericos internos se muestran resaltados en rojo en la arquitectura delmicrocontrolador(partes de que esta compuesto):

Por ejemplo el pin 2:

Page 5: Digitalio config 16f887a_886

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

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

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 elpush boton para dar reset al micro porque se deshabilito esa funcion. Eso quiere decir que el microya 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 desempeñar cada pin se elige y configura via un conjunto de registros de funcionespecifica,SFR que tiene asignado cada uno de los modulos internos mostrados en la arquitectura delmicrocontrolador.

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

En practicas posteriores se mostrara como configurar e utilizar cada uno de los modulos o perifericosinternos 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 lospines 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. Estospines por default estan configurados para ser utilizados como input analogica en RESET. Parapoderlos 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 PORTXcomo I/O digital y el valor que se les asigna para lograrlo:

PORT PIC16F876A PIC16F877A PIC16F886 PIC16F887A 0x07 → ADCON1 0x07 → ADCON1 0x00 → ANSEL 0x00 → ANSELB 0x00 → ANSELH 0x00 → ANSELHCD 0 → TRISE<4>

Page 6: Digitalio config 16f887a_886

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

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

E 0x07 → ADCON10 → TRISE<4> 0x00 → ANSEL

Las celdas vacias indican que ese puerto en RESET esta configurado con la funcion I/O digital pordefault. 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 estaconectado 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 PICal 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 PIC16F887A 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. Porejemplo si se conectan 8 leds al PORTX, entonces el PORTX siempre va a ser output. Por lo cual nohay necesidad de estar actualizando el valor del registro TRISX continuamente dentro del loop MAINdel 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 haynada 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 conocidoantes de ser utilizados.

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

Page 7: Digitalio config 16f887a_886

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

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

Los pines RA6 y RA7 se estan utilizando en el sistema minimo de la protoborad para conectar eloscilador externo(crystal de 20MHz). Estos pines tienen los nombres RA6/OSC1/CLKIN yRA7/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 deoscilador externo(OSC1 y OSC2).Si se deseara utilizar esos dos pines como I/O digital se tendria que programar un bootloader queutilizara el oscilador interno del PIC16F886. Con eso se elminaria el crystal externo y sus capacitoresy 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 esastres funciones.Por default el firmware del bootloader del PIC16F886 esta configurado para utilizar la funcion 'MCLR' ode 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 lafuncion MCLR. Con eso, el pin RE3 podria usarse como Input digital, a costa de perder la capacidad deresetear al micro de forma externa. La unica forma que quedaria de resetear al micro seria POWEROFF 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 serealiza una sola vez, en la zona donde se inicializan los modulos internos del PIC. Es decir, antes deentrar al loop MAIN del programa. Esto se debe a que en la mayoria de las aplicaciones los pinestienen conectado hardware que siempre se usa como outputs, como los leds o que siempre se usacomo inputs, como los dip-switches.

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

Configurar todos los puertos del PIC16F886 como I/O digital,PORTA → input,PORTB → OUPUT,●

PORTC<7:4> → input, PORTC<3:0> → output

Page 8: Digitalio config 16f887a_886

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

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

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

Page 9: Digitalio config 16f887a_886

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

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

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

Page 10: Digitalio config 16f887a_886

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

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

3.0 Referencias

Datasheet PIC16F886/8871.Datasheet PIC16F876A/877A2.Proteus . Software comercial para el desarrollo de esquematicos, simulacion virtual del prototipo y3.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