Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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 nmero de bit (desde 0 hasta 7 en algunos puertos) Por ejemplo el pin llamado RA0 se refiere al bit 0 de PORTA. Vase la Figura 2-1.
Los pines de los PIC18 USB adems de funcionar como puertos de E/S tambin tienen otras funciones multiplexadas como: Entrada de voltajes de referencia para ADC. Entradas y salidas de perifricos (UART, USB, SPI, I2C, etc.). Entradas de contadores de Timers. Entradas de voltaje analgico. Salida de oscilador Entrada de voltaje y datos de programacin Etc.
De manera predeterminada, al resetear estos PICs, los pines estn configurados como puertos de entrada (y como entradas analgicas en los denominados ANx).
E/S
26
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.
E/S
27 Para configurar los pines como analgicos o digitales, se usa el registro ADCON1.
Los primeros 4 bits de ADCON1 denominados PCFG0 PCFG3 se usan para indicar que pines sern analgicos y que pines sern digitales. En la Tabla 3-1 se muestran los valores que pueden tener estos bits y como afecta a los pines.
Por ejemplo si queremos configurar que todos los pines sean digitales podemos escribir: ADCON1 |= 0x0f;
E/S
28
/* 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 funcin 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); } } //Funcin retardo void retardo(int r) { int i; while(r--) for(i=0; i<1000; i++); } Programa 3-1. Salida de puertos
E/S
29
E/S
30
/* * * * * */
Ejemplo 2: Entrada/Salida de Puertos Configura PORTA como entradas digitales y PORTB como salidas digitales Lee PORTA y lo enva por PORTB
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
E/S
31
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 combinacin, todos apagados
E2
Programa de E/S en Proteus y Proto Si SW1(RA0) cerrado y los dems abiertos, activa LED7(RB6) Si SW2(RA1) cerrado y los dems abiertos, activa D6(RB5) Si SW3(RA2) y SW4(RA3) cerrados y los dems abiertos, activa todos(PORTB) Si SW5(RA4) y SW6(RA5) cerrados y los dems abiertos, todos apagados. Cualquier otra combinacin Activa D1 Rotacin de LEDs con velocidad variable Escriba un programa que realice una rutina de corrimientos en los LEDs del PORTB en funcin del valor del switch de RA0 Si RA0 = 0 Rotacin a la derecha Si RA0 = 1 Rotacin a la izquierda El resto de los Switchs (RA1, RA2 y RA3) se usarn para variar la velocidad. En total se tendrn 8 velocidades diferentes, ya que con 3 bits se pueden lograr 8 combinaciones. Rutina de pndulo con velocidad variable Realizar una rutina de pndulo en los 8 LEDs Se usarn los 4 Switches para variar la velocidad del pndulo En total se tendrn 16 velocidades diferentes, ya que con 4 bits se tienen 16 combinaciones.
E3
E4