Vous êtes sur la page 1sur 5

PUERTOS DE E/S

Puertos de E/S
Caractersticas generales en el PIC16F877
Presenta cinco puertos E/S configurables. * * * * * PORTA PORTB PORTC PORTD PORTE
6 pines 8 pines 8 pines 8 pines 3 pines
(0X05) (0X06 y 0x106) (0X07) (0X08) (0X09)

TOTAL 33 pines de E/S Direccin de los datos configurables. Registros de direccin de datos. * * * * * TRISA TRISB TRISC TRISD TRISE
(0x85) (0x86) (0x87) (0x88) (0x89)

Puertos de E/S
Gestin de los puertos E/S
Existen dos opciones para configurar y manejar los puertos E/S * Definiendo los registros como variables localizadas en RAM.
Se definen los puertos y los registros de direccin como variables de C y se colocan en las posiciones reales de estos registros en la memoria RAM de datos. Se definen la direccin de datos si es necesario y se gestionan las entradas y las salidas mediante funciones relativas al manejo de todo el puerto o de bits particulares del mismo.

* Usando las funciones integradas especficas del compilador.

La primera de las dos opciones indicadas constituye la manera ms directa de trabajar con los puertos E/S. Cuando se usan las funciones integradas del compilador de CCS, el cdigo que introduce el compilador puede variar en cuanto a tamao y tiempo de ejecucin. Depender de la activacin de ciertas directivas de preprocesado (#USE FAST_IO - #USE FIXED_IO - #USE STANDARD_IO)

Puertos de E/S
Opcin 1. Definiendo los registros en la RAM
Definir los registros PORTx y TRISx como bytes y situarlos en las posiciones que les correspondan en el mapa de memoria del PIC. Para ello resulta muy adecuada la directiva #BYTE.
#BYTE TRISB = 0x86 #BYTE PORTB = 0x06 // Define la variable TRISB y la sita en 86h. // Define la variable PORTB y la sita en 06h.

A partir de este punto, estas variables permiten controlar los puertos y se pueden utilizar en sentencias de asignacin.
TRISB = 0xF0; // 4 bits altos entradas y 4 bajos, salidas. ...... PORTB = 0x0A; // Asignacin a los 4 bits de salida. numero = PORTB; // Lectura del puerto B. ...... if (PORTB & 0xF0) PORTB|= 0x0F;

Puertos de E/S
El compilador de CCS incorpora una serie de funciones integradas que permite manejar los bits de una variable previamente definida. bit_clear (var , bit); bit_set (var , bit); bit_test (var , bit); swap (var); Pone a 0 el bit especificado de la variable. Pone a 1 el bit especificado de la variable. Muestra el bit especificado de la variable. Intercambia los nibbles de la variable.

#BYTE PORTB = 0x06 // Declaracin previa de PORTB. ...... bit_set (PORTB , 5); ...... if (! bit_test (PORTB , 2)) bit_set (PORTB , 2);

Tambin se puede declarar un bit de un registro con una variable mediante la directiva #BIT y trabajar directamente con la variable. #BIT nombre = posicin.bit
#BIT RA4 = 0x05.4 ...... RA4 = 0;

Puertos de E/S
Opcin 2. Usando funciones integradas del compilador
El compilador de CCS incorpora una serie de funciones integradas orientadas a trabajar con los puertos E/S. output_low (pin*); output_high (pin*); output_bit (pin* , valor); output_float (pin*); Pone a 0 el pin especificado. Pone a 1 el pin especificado. Pone el pin especificado al valor indicado. Define el pin como entrada, quedando a tensin flotante (simula salida en drenador abierto) Saca el valor indicado (0-255) en el puerto correspondiente.

output_a output_b output_c output_d output_e

(valor); (valor); (valor); (valor); (valor);

port_b_ pullups (valor);

Activa (valor=TRUE) o no (valor=FALSE) las resistencias de pull-up asociadas a los pines definidos como entrada en PORTB.

Puertos de E/S
set_tris_a set_tris_b set_tris_c set_tris_d set_tris_e (valor); (valor); (valor); (valor); (valor); Carga el registro de direccin de datos con el valor indicado.

input (pin*); input_a input_b input_c input_d input_e ( ( ( ( ( ); ); ); ); );

Devuelve el estado del pin sealado. Devuelve el valor presente en el puerto correspondiente.

Los parmetros de tipo pin* se corresponden con identificadores definidos en el 16F877.h cuyo formato es PIN_Xn (X es el puerto y n es el nmero de pin). Ejemplo en 16F877.h #define PIN_A0 40 #define PIN_A1 41 #define PIN_A2 42 #define PIN_A3 43

Puertos de E/S
La generacin de cdigo para las funciones output_x( ) e input_x( ) depende de la ltima directiva del tipo #USE *_IO que est activa.
PUERTO: A , B , C , D , E #USE FAST_IO (PUERTO) Cada vez que se emplea una funcin output...() se saca el valor directamente al puerto, y cada vez que se emplea una funcin input...() se lee el puerto, pero no se modifican previamente el registro TRIS correspondiente. El usuario debe asegurarse de que los registros TRIS estn cargados adecuadamente antes de llamar a las funciones. Ej. #USE FAST_IO (B) PUERTO: A ... E #USE STANDARD_IO (PUERTO) Cada vez que se emplea una funcin output...() se inserta cdigo previo para forzar a que el bit particular o el puerto completo sean de salida (mediante la carga del TRIS correspondiente). Si se trata de una funcin input...() se carga cdigo para definir bit o puerto completo como de entrada. sta es la opcin activa por defecto. Ej. #USE STANDARD_IO (C)

Puertos de E/S
#USE FIXED_IO (PUERTO_OUTPUTS=pin* , ...) PUERTO: A ... E Se genera cdigo relativo a la direccin de los datos de manera previa cada vez que aparece una funcin integrada del tipo input ( ) output( ), pero los pines se configuran de acuerdo con la informacin que acompaa a la directiva (slo se indican los pines de salida) y no dependiendo de que la operacin sea de entrada o de salida como sucede con #USE STANDARD_IO(PUERTO) Ej. USE FIXED_IO (B_OUTPUTS = PIN_B2 , PIN_B3)

El efecto de colocar una u otra directiva se puede observar en los ficheros *.lst que se generan como resultado de la compilacin. En general se puede decir que resulta ms cmodo gestionar los pines de E/S de modo STANDARD, pero hacindolo de modo FAST se adquiere ms control de lo que se le est mandando al PIC y se optimiza cdigo.

Vous aimerez peut-être aussi