Página de inicio Mi Correo






   » Foro
   » Nuevo Foro
   » Mi Correo
   » Mis Actividades...


--- Novedades ---



    
  » Microcontroladores » Tutorial Básico (4 de 10)  

.: 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
7 6 5 4 3 2 1 0
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.


;---------------Encabezado-------------

	list	p=16f84	     ; usaremos el PIC 16f84
	radix	hex	     ; y la numeración hexadecimal

;------------mapa de memoria---------

estado	equ	0x03	     ; Aquí le asignamos nombres a los 
trisa	equ	0x05	     ; registros indicando la posición
trisb	equ	0x06	     ; en la que se encuentran 

;-------Configuración de puertos-------

reset	org	0x00 	     ; origen del programa, aquí comenzaré
			     ; siempre que ocurra un reset
	goto 	inicio	     ; salto a "inicio"
	org	0x05 	     ; origen del código de programa
inicio	bsf	estado,5  	     ; pongo rp0 a 1 y paso al banco1
	movlw	b'11111'	     ; cargo W con 11111
	movwf	trisa	     ; y paso el valor a trisa
	movlw	b'00000000'    ; cargo W con 00000000
	movwf	trisb	     ; y paso el valor a trisb
	bcf	estado,5  	     ; pongo rp0 a 0 y regreso al banco0

;------------------------------------------
	end		     ; se acabó
;------------------------------------------
.: 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.

;---------------Encabezado-------------

	list	p=16f84	     ; usaremos el PIC 16f84
	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.

;------------mapa de memoria---------

estado	equ	0x03	     ; Aquí le asignamos nombres a los 
trisa	equ	0x05	     ; registros indicando la posición
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...

;-------Configuración de puertos-------

reset	org	0x00 	     ; origen del programa, aquí comenzaré
			     ; siempre que ocurra un reset
	goto 	inicio	     ; salto a "inicio"
	org	0x05 	     ; origen del código de programa
inicio	bsf	estado,5  	     ; pongo rp0 a 1 y paso al banco1
	movlw	b'11111'	     ; cargo W con 11111
	movwf	trisa	     ; y paso el valor a trisa
	movlw	b'00000000'    ; cargo W con 00000000
	movwf	trisb	     ; y paso el valor a trisb
	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.

;------------------------------------------
	end		     ; se acabó
;------------------------------------------

Fue suficiente por hoy...



R-Luis...

<--Anterior   Introducción   Siguiente -->
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
Tabla de Referencias


    
--| |--