puertos de E/S

Anuncio
E/S
25
3 ENTRADA / SALIDA
Dependiendo del dispositivo usado, se tienen hasta 5 puertos de entrada/salida
disponibles:
PORTA
PORTB
PORTC
PORTD
PORTE
Cada uno de estos puertos es de 8 bits, sin embargo no todos los puertos tienen
todos sus bits implementados. Los bits de cada uno de los puertos se denotan con Rxy
Donde:
x indica el puerto (A,B, C, D o E)
y indica el número de bit (desde 0 hasta 7 en algunos puertos)
Por ejemplo el pin llamado RA0 se refiere al bit 0 de PORTA. Véase la Figura 2-1.
Los pines de los PIC18 USB además de funcionar como puertos de E/S también tienen
otras funciones multiplexadas como:
•
•
•
•
•
•
•
Entrada de voltajes de referencia para ADC.
Entradas y salidas de periféricos (UART, USB, SPI, I2C, etc.).
Entradas de contadores de Timers.
Entradas de voltaje analógico.
Salida de oscilador
Entrada de voltaje y datos de programación
Etc.
De manera predeterminada, al resetear estos PICs, los pines están configurados como
puertos de entrada (y como entradas analógicas en los denominados ANx).
Ing. Juan Ramon Terven Salinas
E/S
26
3.1 Registros asociados con los puertos de E/S
Cada puerto tiene 3 registros asociados:
TRISx
PORTx
LATx
Donde “x” representa el puerto (A, B, C, D o E).
Registro TRISx
El registro TRISx se usa para configurar el sentido de datos del puerto, puede ser
Entrada (con “1”) o Salida (con “0”). Una manera recomendable de recordar esto es “1”
de “Input” y “0” de “Output”.
Registro PORTx
Por medio del registro PORTx se accede a los datos de los pines. Cuando se escribe
en PORTx, se escribe en el latch del puerto. Cuando se lee el PORTx, se lee el valor
directamente del pin.
Registro LATx
Este registro está directamente conectado con el latch del puerto. Cuando se escribe en el
LATx se escribe en el latch del puerto y cuando se lee el LATx se lee del latch del
puerto.
3.2 Entradas Analógicas
Los PIC18 USB posee un ADC de 10 bits con 10 entradas analógicas en los
PIC18F2455 y PIC18F2550 y 13 entradas analógicas en los PIC18F4455 y PIC18F4550.
Las entradas analógicas del ADC se denotan como AN0 hasta AN12 y se encuentran
multiplexadas con los puertos de E/S, de tal manera que estos pines pueden ser entradas
digitales o entradas analógicas.
Nota: Al reset estos pines quedan configurados como entradas analógicas.
Ing. Juan Ramon Terven Salinas
E/S
27
Para configurar los pines como analógicos o digitales, se usa el registro ADCON1.
Los primeros 4 bits de ADCON1 denominados PCFG0 – PCFG3 se usan para indicar
que pines serán analógicos y que pines serán digitales. En la Tabla 3-1 se muestran los
valores que pueden tener estos bits y como afecta a los pines.
Tabla 3-1. Configuración de pines A/D [8]
Por ejemplo si queremos configurar que todos los pines sean digitales podemos escribir:
ADCON1 |= 0x0f;
Ing. Juan Ramon Terven Salinas
E/S
28
Ejemplo 3-1. Salida de puertos
Armar el circuito de la Figura 3-1 en Proteus (por simplicidad en la figura no se muestra
el circuito del bootloader)
Escribir, compilar y simular el Programa 3-1 en Proteus.
/* Ejemplo 1: Salida de Puertos
*
* Configura PORTB como salidas digitales
* Activa y desactiva todos los bits de PORTB
*/
#include "p18f4550.h"
void retardo(int);
// Prototipo de función retardo
extern void _startup (void);
#pragma code REMAPPED_RESET_VECTOR = 0x1000
void _reset (void)
{
_asm goto _startup _endasm
}
#pragma code
void main (void)
{
// PORTB como salida
TRISB = 0;
// configura pines como digitales
ADCON1 |= 0x0f;
while(1)
{
PORTB = 255;
retardo(50);
PORTB = 0;
retardo(50);
}
}
//Función retardo
void retardo(int r)
{
int i;
while(r--)
for(i=0; i<1000; i++);
}
Programa 3-1. Salida de puertos
Ing. Juan Ramon Terven Salinas
E/S
29
Figura 3-1. Circuito
Ing. Juan Ramon Terven Salinas
E/S
30
Ejemplo 3-2. Entrada / Salida
Armar el circuito de la Figura 3-2 en Proteus.
Escribir, compilar y simular el Programa 3-2 en Proteus.
/*
*
*
*
*
*/
Ejemplo 2: Entrada/Salida de Puertos
Configura PORTA como entradas digitales
y PORTB como salidas digitales
Lee PORTA y lo envía por PORTB
#include "p18f4550.h"
void retardo(int);
// Prototipo de función
extern void _startup (void);
#pragma code REMAPPED_RESET_VECTOR = 0x1000
void _reset (void)
{
_asm goto _startup _endasm
}
#pragma code
void main (void)
{
int entrada;
// PORTB como salida
TRISB = 0;
// PORTA como entrada
TRISA = 0xff;
// configura pines como digitales
ADCON1 |= 0x0f;
while(1)
{
entrada = PORTA;
PORTB = entrada;
}
}
void retardo(int r)
{
int i;
while(r--)
for(i=0; i<1000; i++);
}
Programa 3-2. Entrada/Salida
Ing. Juan Ramon Terven Salinas
E/S
31
Figura 3-2. Circuito
Ing. Juan Ramon Terven Salinas
E/S
32
Ejercicios a calificar:
E1
Programa de E/S en Proteus
Si todos SW(RA0 : RA3) estan cerrados, todos los LEDs(PORTB)
prendidos
Si SW1(RA0) y SW2(RA1) estan cerrados LED1(RB0) activado
Si todos SW estan abiertos, LED8 (RB7) activado
Cualquier otra combinación, todos apagados
E2
Programa de E/S en Proteus y Proto
Si SW1(RA0) cerrado y los demás abiertos, activa LED7(RB6)
Si SW2(RA1) cerrado y los demás abiertos, activa D6(RB5)
Si SW3(RA2) y SW4(RA3) cerrados y los demás abiertos, activa
todos(PORTB)
Si SW5(RA4) y SW6(RA5) cerrados y los demás abiertos, todos apagados.
Cualquier otra combinación Activa D1
E3
Rotación de LEDs con velocidad variable
Escriba un programa que realice una rutina de corrimientos en los LEDs del
PORTB en función del valor del switch de RA0
Si RA0 = 0 Rotación a la derecha
Si RA0 = 1 Rotación a la izquierda
El resto de los Switchs (RA1, RA2 y RA3) se usarán para variar la velocidad.
En total se tendrán 8 velocidades diferentes, ya que con 3 bits se pueden
lograr 8 combinaciones.
E4
Rutina de péndulo con velocidad variable
Realizar una rutina de péndulo en los 8 LEDs
Se usarán los 4 Switches para variar la velocidad del péndulo
En total se tendrán 16 velocidades diferentes, ya que con 4 bits se tienen 16
combinaciones.
Ing. Juan Ramon Terven Salinas
Descargar