clases de dinamica ejercicios preuniversitarios.pdf
2.2 puertos como entrada
1. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M07 MICROCONTROLADORES II
Laboratorio: D-19
Duración: 2 Hs PUERTOS COMO GPIO
2.2. Puertos como Entrada
Objetivos
1. Entender el funcionamiento de los puertos como entrada.
2. Configurar el puerto para que opere como entrada.
3. Indicarle al puerto configurado como entrada que revise el estado del mismo.
2.2.1. Configurando como entrada
Para configurar un puerto o un pin del mismo como entrada se debe realizar lo
siguiente:
1. Escribir en el registro DDRx un cero lógico, por ejemplo, si quiero todo el puerto
A como entrada sería DDRA=0b00000000, si solo quiero los dos primeros pines como
entrada, sería DDRA=0b11111100.
2. Para poner un pin del puerto a PULL-UP internamente se debe escribir un uno
lógico en el PORTx.
3. Para leer el valor del puerto se debe utilizar una máscara adecuada aplicando la
operación AND con el registro PINx.
Ejemplo
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRC = 0x00;//TODO EL PUERTO C COMO ENTRADA
PORTC = 0xFF;//PULL-UP INTERNAMENTE
DDRG = 0xFF;//TODO EL PUERTO G COMO SALIDA
while (1)//LOOP INFINITO
{
if((PINC & 0b00000001) != 0)//REVISO EL BIT0 DEL PUERTO C (SW0)
PORTG = 0xFF;//ENCIENDO TODO EL PUERTO G
if((PINC & 0b00000010) != 0)//REVISO EL BIT1 DEL PUERTO C (SW1)
PORTG = 0x00;//APAGO TODO EL PUERTO G
}
}
Pedro Ramírez <pedroramirez22@gmail.com> 1
2. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M07 MICROCONTROLADORES II
Laboratorio: D-19
Duración: 2 Hs PUERTOS COMO GPIO
DDRC = 0x00 Hace que todo el puerto C funcione como entrada
PORTC = 0xFF Hace que todas las entradas del puerto C a PULL-UP.
if((PINC & 0b00000001) != 0) Lee el estado del bit0 del puerto C.
if((PINC & 0b00000010) != 0) Lee el estado del bit1 del puerto C.
Para leer el estado de una entrada se debe utilizar la mascara adecuada. Por ejemplo:
Formas de leer estado del BIT0 del puerto C
PINC & 0b00000001. Revisa el estado del bit0 del Puerto C.
PINC & (1 PINC0). Revisa el estado del bit0 del Puerto C.
PINC & _BV(PINC0). Revisa el estado del bit0 del Puerto C.
bit_is_set(PINC, PINC0). Revisa si el bit0 del Puerto C esta a 1.
bit_is_clear(PINC, PINC0). Revisa si el bit0 del Puerto C esta a 0.
Formas de leer estado del BIT2 del puerto C
PINC & 0b00000100. Revisa el estado del bit2 del Puerto C.
PINC & (1 PINC2). Revisa el estado del bit2 del Puerto C.
PINC & _BV(PINC2). Revisa el estado del bit2 del Puerto C.
bit_is_set(PINC, PINC2). Revisa si el bit2 del Puerto C esta a 1.
bit_is_clear(PINC, PINC2). Revisa si el bit2 del Puerto C esta a 0.
Obs: Para utilizar las funciones bit_is_set y bit_is_clear se debe agregar la
librería #include<avr/sfr_defs.h>
Referencia: https://www.nongnu.org/avr-libc/user-manual/group__avr__sfr.html
2.2.2. Conclusión
Pedro Ramírez <pedroramirez22@gmail.com> 2