lunes, 3 de febrero de 2014

Práctica 2: Uso de los puertos I/O 3ª Parte

A continuación se expondrá la última parte de la práctica


Tabla 2.3: Descripción de pines de PORTB



Tabla 2.4: Sumario de registros asociados a PORTB



Práctica
Una vez hecha esta extensa cobertura de la teoría implícita en el funcionamiento de PORTA y PORTB, es hora de revisar el enunciado de la práctica.
Se requiere implementar un dispositivo que active o desactive cuatro LED’s de forma individual.

Lista de materiales 

1 microcontrolador PIC 16F628A.
4 Resistencias de 680 Ω.
5 Resistencias de 10 kΩ.
4 LED’s.
5 Push button normalmente abiertos.
1 Fuente de voltaje de 5 V.
1 Protoboard.
Varios: Segmentos de alambre de diferentes longitudes y colores.
 


Diagrama de flujo





 
Esquemático  


Programa

;************Práctica 2: Puertos I/O ***********
;********* Autor: ESAU SANABRIA SANCHEZ************
;* Mediante esta práctica se ilustrará la configuración y uso de los puertos de I/O*
;* como entradas y salidas digitales.*
;
;***************ZONA DE DATOS**********************


__CONFIG  _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _LVP_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_ON ;DIRECTIVA DE CONFIGURACIÓN.
                #include    <P16F628.inc>  ;Definición de operandos utilizados.
                LIST         P=16F628A       ;Modelo de microcontrolador usado.
                RADIX         HEX               ;Se trabajará con números base hexadecimal.


;***************ZONA DE PROGRAMA******************

                ORG           0X00               ;Inicio del programa en la dirección cero de la memoria 
                                                      ;de programa.                                                     
                goto          INICIO             ;Salto a la primera instrucción de programa.

                ORG           0X05
    INICIO   clrf             PORTA                       ;Limpia PORTA
                movlw         0x07                         ;Deshabilita los comparadores,
                movwf         CMCON                     ;para dejar PORTA como entradas digitales                                                                                                       
                bsf              STATUS,RP0              ;Accede al banco 1.
                movlw          b'11111111'      ;Carga a W el valor 0x01h
                movwf          TRISA             ;PORTA queda configurado como entrada.
                movlw          b'00000000'      ;Carga a W el valor 0x00h
                movwf          TRISB              ;PORTB queda configurado como salida.
                bcf              PCON,3            ;Configura el reloj interno a 48KHz.
                bcf              STATUS,RP0     ;Sale del banco 1.               
                clrf              PORTB
    CICLO    movf            PORTA,W         ;Se lee el contenido de PORTA. Si  se oprime.
                                                        ;algún push button, se encenderá el
                movwf          PORTB             ;LED correspondiente en PORTB. Este ciclo                                                         ;de lectura y escritura se actualizará
                goto            CICLO              ; indefinidamente.
                END                                   ;Fin de programa.


Observaciones

Esta práctica aunque bastante sencilla, muestra uno de los recursos más potentes de los microcontroladores: el control de periféricos a través de software y puertos de entrada y salida.


Las líneas de instrucción:

                movlw             0x07                     

                movwf            CMCON


Son fundamentales para utilizar PORTA como entradas digitales y deshabilitar la función de entradas de comparador, omitirlas producirá funcionamiento erróneo del programa. 


En este punto pido al lector no dar importancia a las instrucciones que manejan bits como son bsf y bcf y la instrucción de salto incondicional goto ya que en posteriores prácticas se cubrirán explicaciones detalladas de las mismas.

Por otra parte una vez realizada la práctica el lector no puede pasar por alto el hecho de la limitación del programa, es decir la salida que se deseé activar solo permanecerá así mientras se mantenga oprimido su correspondiente push button. Sería deseable tener más control sobre cuando y como activar o desactivar un puerto de I/O. En la práctica 3 se abarcará el estudio de instrucciones para tal propósito.

Puedes descargar los archivos .asm y .hex de la práctica en el siguiente enlace: https://drive.google.com/folderview?id=0BxhGk5EaSqr-WHUwa3k2Z0NEQkk&usp=sharing

 

Práctica 2: Uso de los puertos I/O 2ª Parte

Continuamos exponiendo a detalle las funcionalidades de los puertos de I/O.


En la tabla 2.2 se muestran los registros asociados a PORTA 


Tabla 2.2:Registros asociados a PORTA

PORTB es un puerto de 8 bits bidireccional, el registro de direccionamiento de datos correspondiente es TRISB. Un ‘1’ en el registro TRISB habilita el pin como entrada poniéndose en alta impedancia el correspondiente driver de salida. Por otra parte un ‘0’  en TRISB coloca el contenido del latch de salida en el pin correspondiente, es decir se habilita el pin como salida.
Las funciones de PORTB se multiplexan mediante los recursos de interrupción externa, USART, el módulo CCP y la entrada - salida de reloj TMR1.
Cada pin de PORTB posee resistencias “pull-up” capaces de drenar 200 µA típicamente. Para habilitar dichas resistencias de pull-up se requiere poner a cero el bit 7 RBPU del registro OPTION. Cuando PORTB se habilita como salida, automáticamente se deshabilitan las resistencias de pull-up o cuando se produce un reseteo al energizar (Power On Reset).
Los pines RB<7:4> cuentan con una interrupción por cambio de estado, esto aplica a los pines configurados como entrada. Esta interrupción funciona de la siguiente manera: los valores de entrada de RB<7:4> son comparados con los valores almacenados de la última lectura de PORTB mediante una operación de O lógica, si un cambio es detectado en el estado en algún pin, se genera la interrupción a través de  RBIF (bit 0 del registro INTCON).
Esta interrupción puede despertar al PIC del estado de hibernación. Para atender, procesar y eventualmente deshabilitar esta interrupción, el usuario deberá acceder a la rutina de interrupción de servicio (de la cual se hablará más a detalle en próximas prácticas) mediante una de las siguientes opciones.

  •        Cualquier lectura o escritura de PORTB anularan el cambio de estado en RB<7:4>.
  •        Poner a ‘0’ el bit RBIF.
Cabe mencionar que esta interrupción junto con el recurso de resistencias pull-up, resultan particularmente interesantes cuando se desean implementar aplicaciones que requieran teclados.
A continuación se muestran los diagramas a bloques de cada pin de PORTB 

Figura: 2.9 Diagrama a bloques de RB0/INT

Figura: 2.10 Diagrama a bloques de RB1/RX/DT
  

Figura: 2.11 Diagrama a bloques de RB2/TX/CK


Figura: 2.12 Diagrama a bloques de RB3/CCP1

  
Figura: 2.13 Diagrama a bloques de RB4/PGM
  

Figura: 2.14 Diagrama a bloques de RB5


Figura: 2.15 Diagrama a bloques de RB6/T1OSO/PGC


 Figura: 2.16 Diagrama a bloques de RB7/T1OSI/PGD


A continuación las tablas 2.3 y 2.4 muestran un sumario de las funciones de PORTB y los registros asociados a este, respectivamente.