Вы находитесь на странице: 1из 3

MANEJO DE PUERTOS EN C

Las lneas de entrada y salida (E/S) vienen distribuidas en varios puertos, cada
uno de ellos posee funciones especficas y estn distribuidos de la siguiente
manera:

PIC18F2550:
PUERTO A 7bits
PUERTO B 8bits
PUERTO C 8bits
PUERTO E 1bits

PIC18F4550:
PUERTO A 7bits
PUERTO B 8bits
PUERTO C 8bits
PUERTO D 8bits
PUERTO E 4bits

Para ambos dispositivos hay que tener algunas consideraciones especiales, al


momento de utilizar los puertos como entrada o salida, estas consideracin se
enumeran a continuacin.

1. El pin RA6 es compartido con el oscilador principal, en el caso de utilizar el


oscilador interno, este pin puede ser utilizado como entrada o salida.

2. El pin RC3 no est implementado

3. Los pines RC4 y RC5 son utilizados por el transceiver del modulo USB, en el
caso de que el modulo USB este deshabilitado, estos pines pueden ser
utilizados nicamente como entradas.

4. El pin RE3 es compartido con la funcin de MASTER CLEAR (MCLR), en el


caso que esta funcin sea deshabilitada este bit se puede utilizar nicamente
como un pin de entrada (Schmitt Buffer Input), no admite ser salida.

CONFIGURACIN DE PUERTOS MEDIANTE INSTRUCCIONES


OUTPUT E INPUT

Existen instrucciones en C que permiten enviar o recibir informacin por un


puerto, entre ellas se tienen:

OUTPUT_X (VALOR);
Saca por el puerto indicado en la X un valor entre 0 y 255
INPUT_X ( );
Toma del puerto indicado en la X el valor que posee en sus terminales
Estas son funciones que a su vez configuran los puertos, si la operacin es
input, configura el puerto como entrada y si es output, configura el puerto como
salida.
Existen instrucciones que manejan un solo bit de un registro entre ellas estn:

OUTPUT_LOW (PIN);
Pone determinado pin a cero
OUTPUT_HIGH (PIN);
Pone determinado pin a uno
OUTPUT_BIT (PIN, VALOR);
Pone determinado pin al valor especificado
OUTPUT_TOGGLE (PIN);
Complemente el valor de determinado pin
INPUT (PIN);
Lee el valor de determinado pin

Estas instrucciones se comportan igual que las anteriores, autoconfiguran los


puertos dependiendo si es una operacin output (salida) o input (entrada).

Hay otra instruccin que lee el valor de un pin con la caracterstica que ella no
configura el pin utilizado, aunque es una instruccin input

INPUT_STATE (PIN);
Lee el valor de determinado pin sin modificar el sentido del puerto.

VER EJEMPLO

CONFIGURACIN DE PUERTOS MEDIANTE MODIFICACIN DE LOS


REGISTROS TRIS

Para configurar los puertos como entrada o salida, se utilizan los registros
TRISX, donde la X representa el nombre del puerto (A, B, C, D, E), si se desea
el puerto como entrada se debe poner a 1 y si es como salida se debe poner
a 0 el bit correspondiente del registro TRIS, para ello se utilizan la funciones:

SET_TRIS_X (VALOR);
Se utiliza para configurar el registro tris de determinado puerto, por ejemplo si
se pone SET_TRIS_B (0B00001111), quiere decir que se est configurando los
cuatro bits ms significativos del puerto B como salida y los cuatros bits menos
significativos como entrada.

Debido a que las instrucciones input y output reconfiguran los registros tris, se
utiliza la directiva FAST_IO (X) para evitar que esto suceda, esta directiva se
usa al inicio del programa y hay que poner una directiva por cada puerto a
utilizar de la siguiente manera:
#USE FAST_IO (A);
Esta directiva est evitando que el puerto A, se reconfigure cada vez que se
utiliza una instruccin output o input sobre dicho puerto.

Si no se desea utilizar las funciones input y output se pueden definir los puertos
con un nombre especifico, de tal manera que se puedan utilizar como si fueran
una variable, hay que tener en cuenta la direccin de la memoria RAM que
cada puerto ocupa en determinado dispositivo, el 18F2550 y 18F4550 poseen
las mismas direcciones para sus puertos, la forma correcta de definir los
puertos ser de la siguiente forma:

#BYTE PORTA = 0xF80


#BYTE PORTB = 0xF81
#BYTE PORTC = 0xF82
#BYTE PORTD = 0xF83
#BYTE PORTE = 0xF84

La nica diferencia con respecto al 18F2550, es que ste no posee puerto D, la


forma de enviar o recibir datos por un puerto seria as:

PORTA = 28;
As se enva el nmero 28 al puerto A
VAR = PORTB;
As se carga la variable VAR con el valor del puerto B

De esta forma se puede escribir o leer un puerto sin necesidad de utilizar las
funciones input y output, estoy no quiere decir que no se puedan utilizar,
simplemente es otra forma de hacerlo.

Вам также может понравиться