Tutoriales de Electrónica Básica
MICROCONTROLADORES PIC:

Configuración de puertos del microcontrolador, veamos cómo hacer que unos sean de entrada y otros de salida y de paso un poco de código de ejemplo...

Configuración de los Puertos del PIC

Llegó el momento de ver como configurar los puertos del PIC. Para poder hacerlo es necesario conocer la tabla de registros de la memoria de datos, la cual como dijimos, está dividida en el BANCO 0 y BANCO 1.

Los registros importantes en la configuración de los puertos son:

STATUS dirección 0x3
PORTA   dirección 0x5
PORTB   dirección 0x6
TRISA    dirección 0x5
TRISB    dirección 0x6

Por defecto el PIC tendrá todos los I/O port's (es decir los puertos RA y RB), colocados como entrada de datos, y si queremos cambiarlos habrá que configurarlos.

Al configurar los puertos deberás tener en cuenta que:

Si asignas un CERO (0) a un pin, éste quedará como salida y...
Si le asignas un UNO (1), quedará como entrada

Esta asignación se hace en:

TRISA para los pines del PUERTO A (5 bits)
TRISB para los pines del PUERTO B (8 bits)

Por Ejemplo:

Si TRISA es igual a 11110 todos sus pines serán entradas salvo RA0 que esta como salida

Si TRISB es igual a 00000001 todos sus pines serán salidas salvo RB0 que esta como entrada

Cuando el PIC arranca se encuentra en el BANCO 0, como TRISA y TRISB están en el BANCO 1 no queda otra, deberemos cambiar de banco. Esto se logra a través del Registro STATUS

STATUS es un Registro de 8 bits u 8 casillas, en el cual la Nº 5 (RP0) define la posición del banco en donde nos encontramos

Si pones un CERO (0) a RP0 estaremos en el BANCO 0
Si le pones un UNO (1) ya ves, estaremos en el BANCO 1

REGISTRO STATUS
76 54 32 10
 IRP  RP1  RP0 TO    PD    Z    DC    C  

Listo, ahora ya sabemos como configurar los puertos, pero lo aclararemos con un ejemplo completo.

Vamos a escribir un código que configure todos los pines del puerto A como entrada y todos los del puerto B como salida.

  1. ;---------------Encabezado-------------
  2.         list    p=16f84      ; usaremos el PIC 16f84
  3.         radix   hex          ; y la numeración hexadecimal
  4. ;------------mapa de memoria---------
  5. estado  equ     0x03         ; Aquí le asignamos nombres a los
  6. trisa   equ     0x05         ; registros indicando la posición
  7. trisb   equ     0x06         ; en la que se encuentran 
  8. ;-------Configuración de puertos-------
  9. reset   org     0x00         ; origen del programa, aquí comenzaré
  10.                              ; siempre que ocurra un reset
  11.         goto    inicio	     ; salto a "inicio"
  12. 	org     0x05         ; origen del código de programa
  13. inicio	bsf     estado,5     ; pongo rp0 a 1 y paso al banco1
  14.         movlw   b'11111'     ; cargo W con 11111
  15.         movwf   trisa        ; y paso el valor a trisa
  16.         movlw   b'00000000'  ; cargo W con 00000000
  17.         movwf   trisb        ; y paso el valor a trisb
  18.         bcf     estado,5     ; pongo rp0 a 0 y regreso al banco0
  19. ;------------------------------------------
  20.         end		     ; se acabó
  21. ;------------------------------------------
Descripción del código:

Todo lo que escribas luego de un ";" (punto y coma) será ignorado por el ensamblador, estos son los famosos comentarios, y sirve para saber que hace cada línea de código.

Dicho esto no queda más que describir el código, así que vamos por partes.

  1. ;---------------Encabezado-------------
  2.         list    p=16f84      ; usaremos el PIC 16f84
  3.         radix   hex          ; y la numeración hexadecimal

Aquí le indicas al ensamblador para que microcontrolador estas codificando (PIC16F84). y cual será el sistema de numeración que utilizarás (hexadecimal).

Nota que hay tres columnas, en este caso la primera está vacía. Respeta las tabulaciones para no confundir al ensamblador.

  1. ;------------mapa de memoria---------
  2. estado  equ     0x03         ; Aquí le asignamos nombres a los
  3. trisa   equ     0x05         ; registros indicando la posición
  4. trisb   equ     0x06         ; en la que se encuentran 

Recuerdas lo de la memoria de datos...? Bien, al registro STATUS, que está en la posición 0x03 de la memoria de datos le puse la etiqueta "estado". equ es algo así comoooo...igual . (Es decir, le estoy asignando el nombre estado al registro que está en la posición 0x03 de la memoria de datos).

Luego hice lo mismo con trisa y trisb. Ahora sigamos...

  1. ;-------Configuración de puertos-------
  2. reset   org     0x00         ; origen del programa, aquí comenzaré
  3.                              ; siempre que ocurra un reset
  4.         goto    inicio	     ; salto a "inicio"
  5. 	org     0x05         ; origen del código de programa
  6. inicio	bsf     estado,5     ; pongo rp0 a 1 y paso al banco1
  7.         movlw   b'11111'     ; cargo W con 11111
  8.         movwf   trisa        ; y paso el valor a trisa
  9.         movlw   b'00000000'  ; cargo W con 00000000
  10.         movwf   trisb        ; y paso el valor a trisb
  11.         bcf     estado,5     ; pongo rp0 a 0 y regreso al banco0

La directiva org indica el sitio de la memoria en donde se escribe una parte del programa. En este caso el contador de programa apuntará a la dirección 0x00 (reset) entonces ejecutará la instrucción que sigue a continuación, (saltar a la etiqueta inicio) y nuestro código de programa comienza en la dirección de memoria 0x05 (aquí salto por encima de la interrupción 0x04)

BSF (SET FILE REGISTER), es la instrucción que pone un uno en el bit del registro especificado, en este caso pone a uno el bit 5 del registro STATUS (el rp0), para pasar al banco 1.

movlw es algo así como... mueve el siguiente literal al Registro W.

W es el Registro de Trabajo, y lo usamos para almacenar momentáneamente los datos que queremos mover. una vez hecho esto pasamos el dato a trisa, o a trisb, según el caso.

movwf es algo así como... mueve el contenido del registro W al registro f, en este caso f sería trisa o trisb.

BCF (BIT CLEAR FILE REGISTER), ésta instrucción limpia el bit del registro especificado, o lo pone a cero, en este caso pone a cero el bit 5 del registro STATUS para regresar al banco 0.

  1. ;------------------------------------------
  2.         end		     ; se acabó
  3. ;------------------------------------------

Fue suficiente por hoy...

R-Luis...