Professional Documents
Culture Documents
Arquitectura de Computadores
Ingeniera de Sistemas
Manejo de puertos
Mag. Wilmar Yesid Campo
Diciembre de 2013
Introduccin
En casi todos los proyectos es necesario leer
alguna entrada de tipo digital conectada a
pulsadores, interruptores, sensores digitales o
similares; tambin es necesario escribir datos
por medio de una salida de tipo digital
conectada a LED, pantallas LCD, display de
siete segmentos o similares
1. A travs de la RAM
Se definen los registros PORTx y TRISx como
bytes y se sitan en la posicin
correspondiente de la memoria RAM. La
directiva utilizada de C es #BYTE:
1. A travs de la RAM
Una vez definidas estas variables se pueden configurar y
controlar los puertos a travs de los comandos de asignacin.
TRISA=0xFF;
//8 terminales de entrada
TRISB = 0x00;
TRISC = 0x0F
Escritura en puertos
PORTC =0x0A;
Lectura de puertos:
Valor= PORTA; //asigna el dato del puerto A a la variable valor
tarea1
Configurar los pines PORTB<0,2,4,6> como salida el resto
como entrada.
Configurar los pines PORTB<1,3,5,7> como salida el resto
como entrada.
Solucin:
1. TRISB=0xAA=(10101010) 'Configuramos los pines
PORTB<0,2,4,6> como salida el resto como entrada.
2. TRISB=0x55 = (01010101) 'Configuramos los pines
PORTB<1,3,5,7> como salida el resto como entrada.
1. A travs de la RAM
Manejo de sentencias
TRISD=0x0F;
If (PORTD & 0x0F) PORTD |= 0XA0;
Ejemplos
Bit_set (PORTC, 4)
If (bit_test(PORTB,0)==1) bit_clear(PORTB,1)
Explicacin adicional
El PORTB es un puerto bidireccional de 8 bits de ancho. El registro de la
direccin de los datos es TRISB. Activar el bit TRISB (=1) har que el pin
correspondiente de PORTB sea una entrada (es decir, pone el conductor
correspondiente de la salida en un modo alta impedancia). Borrar un bit
de TRISB (=0) hace que el pin correspondiente de PORTB sea una salida (es
decir, pone el contenido del latch de salida en el pin seleccionado).
El registro del latch de datos (LATB) slo es memoria mapeada. Las
operaciones de lectura-modificacin-escritura en el registro LATB lee y
escribe el valor del latch de salida del PORTB. Cada uno de los pines de
PORTB tiene un pull-up interno. Un solo bit de control puede cambiar todo
el pull-up. Esto se realiza borrando el bit, RBPU* (INTCON2<7>). El pull-up
cambia automticamente cuando el pin se configura como salida. Se
inhabilita el pull-up en un reinicio.
http://es.scribd.com/doc/38769517/109/REGISTROS-PORTB-TRISB-y-LATB
ejemplos
Ver ejemplo 1
Configurar los terminales RB1 como salida y RB0 como entrada (con
resistencias pull-up). La salida debe tener el mismo valor que la entrada.
Se utiliza un interruptor en la entrada y un led en la salida. Componentes
(PIC16F877A), RES, LED-BLUE y SW-SPST-MOM
Para las pull ups:
http://www.cursomicros.com/pic/arquitectura/resistencias-de-pullup.html
- input_x(valor);
set_tris_X(valor);
get_trisX();
ejemplos
Output_A(0xFF); //saca por el puerto A el
valor 11111
Valor=input_B(); //lee el valor del puerto B
Set_tris_C(0x0F); //configura el puerto C: C0C3 entradas, C4-C7 salidas
Uso de PIN
Existe una serie de funciones asociadas a un
terminal o pin*. El parmetro pin* se define
en un fichero include (por ejemplo, 16F876.h)
con un formato del tipo PIN_Xn, donde X es el
puerto y n es el numero de pin.
#define PIN_A0 40
#define PIN_A1 41
Uso de PIN
Las funciones son:
Uso de PIN
Las funciones output_x() e input_x()
dependen de la directiva tipo #USE *_IO que
est activa.
#USE FAST_IO (puerto) [PUERTO:A]
Con la funcin output_x() se saca el valor al
puerto y con la funcin input_x() se lee el
puerto. La directiva no modifica previamente
el registro TRIS correspondiente
Ejercicio 2
#include <16F877A.h>
#fuses XT, NOWDT
#use delay (clock = 4000000)
#use fast_io(B) /*se dice que si utilizamos esta directiva de fast_io es necesario
entrar a configurar el TRIS (aqu se hace mediante la instruccin
set-tris_B). Hay que configurar manualmente el TRISB*/
Void main () {
Port_b_pullups (TRUE);
Set_tris_B(0x01);
Output_low(PIN_B1);
While (1)
{
If (input (PIN_B0) == 1 )
Output_low(PIN_B1);
else
Output_high(PIN_B1);
}
}
Ejercicio 3
Realizar el mismo ejercicio usando la anterior
directiva
While (1)
{
If (input (PIN_B0) == 1 )
Output_low(PIN_B1);
else
Output_high(PIN_B1);
}
}
Ejercicio 4
Realizar un contador de 0 a 99 con un doble display de 7
segmentos de ctodo comn. La cuenta debe ser continua y
de 0 a 9 el digito de las decenas debe estar apagado.
Componentes: PIC16F877A, RX8 y 7SEG-MPX2-CC.
Ayuda:
Ejercicio 4
Ayudas: los terminales de los dos display son comunes por lo que el dato
es comn, para que aparezca el digito solo en las unidades, o solo en las
decenas se debe apagar el otro display mediante el terminal de ctodo. Es
decir si se desea visualizar las unidades se pasa el cdigo 10 al display y si
son las decenas se pasa el 01 (con un 1 el display esta apagado y con un 0
esta encendido). La alternancia entre los dos ctodos debe ser tan rpida
que el ojo no se de cuenta del parpadeo. En el caso que las decenas sean
cero su display se apagara
CONST DISPLAY[10] =
Permite visualizar de 0 a 9 mediante la combinacin de digitos tipica de
los display de 7 segmentos
Entradas y Salidas
LCD - liquid crystal display
Se acostumbra ha utilizar LCD del tipo
HD44780 con un numero de lneas variable y
un nmero de caracteres por lnea tambin
variable (por ejemplo, con 2 x 16 se trabaja
con dos lneas de 16 caracteres cada una).
LCD
Las pantallas LCD sirven para representar letras, nmeros y
caracteres presentes en el cdigo ASCCII.
En la actualidad las pantallas LCD incorporan internamente un
microcontrolador (Driver) encargado del manejo de los
diferentes comandos que permiten su escritura y lectura; as
como facilitar la comunicacin con el mundo exterior.
Existen de 16x2, 20x2 y 20x4
LCD
LCD
Los tres pines de control (RS, R/W y E) permiten
seleccionar y habilitar la pantalla LCD con la que se est
trabajando, as como escribir (aplicacin ms tpica) en
ella.
Los restantes pines (D0 a D7) sirven para enviar el dato
que se desea mostrar y/o el comando que permitir
desplazar la posicin del cursor, borrar la pantalla LCD,
cambiar de lnea y posicin dentro de la misma entre
otros.
Generalmente
por
ahorro
de
pines
del
microcontrolador, se trabaja con el bus de datos de 4
bits en la pantalla LCD (desde D4 hasta D7)
LCD
El bus de datos es de 8 bits, aunque tambin
existe la posibilidad de trabajar con 4 bits (con
un menor nmero de caracteres). El
compilador C incluye un fichero (driver) que
permite trabajar con un LCD. El archivo es
LCD.C y debe llamarse como un #include. Este
archivo dispone de varias funciones ya
definidas
LCD
Lcd_init();
Es la primera funcin que debe ser llamada.
Borra la LCD y lo configura en el formato de
4bits, con dos lneas y con caracteres de 5X8
puntos, en modo encendido, cursor apagado y
sin parpadeo.
Configura el LCD con un autoincremento del
puntero de direcciones y sin desplazamiento
del display real
LCD
lcd_gotoxy(byte x, byte y);
Indica la posicin de acceso al LCD. Por
ejemplo, (1,1) indica la primera posicin de la
primera lnea y (1,2) indica la primera posicin
de la segunda lnea.
Lcd_getc(byte x, byte y);
Lee el carcter de la posicin (x,y).
LCD
Lcd_putc (char s);
S es una variable de tipo char. Esta funcin
escribe la variable en la posicin
correspondiente. Si adems ,se indica:
\f se limpia el LCD
\n el cursor va a la posicin (1,2).
\b el cursor retrocede una posicin.
LCD
El compilador de C ofrece una funcin ms
verstil para trabajar con el LCD:
Printf (string)
Printf (cstring, values)
Printf (fname, cstring, values)
LCD
El formato es %nt, donde n es opcional y puede ser:
1-9: para especificar cuantos caracteres se deben especificar
01-09: para indicar la cantidad de ceros a la izquierda.
1.1-9.9 para coma flotante.
t puede indicar
c carcter, s cadena o carcter, u entero sin signo, d entero con
signo, Lu entero largo con signo, x entero hexadecimal
(minsculas), X entero hexadecimal (mayusculas), Lx entero
largo Hexadecimal (minusculas), LX entero largo hexadecimal
(mayusculas). F flotante con truncado, g flotante con redondeo,
e flotante en formato exponencial. w entero sin signo con
decimales insertados, la 1 cifra indica el total, la 2 el numero de
decimales
LCD
El driver LCD.C esta pensado para trabajar con el PORTD. Por defecto este
driver usa siete terminales para la comunicacin entre el LCD y el PIC. En
la siguiente figura se encuentran definidas las conexiones utilizadas y la
posibilidad de cambiar de puerto
REQUERIMIENTO
Realizar un men de control mediante dos
pulsadores, el programa debe mostrar un
men de 3 funciones. Mediante el pulsador se
debe seleccionar uno de los 3 elementos y con
otro ejecutar la funcin (encender un led).
Componentes: PIC16F877A, RES, BUTTON y
LM016L