Curso Análisis Fisicoquímico y Microbiológico de Aguas -EAI - SESIÓN 5.pdf
2.1 puertos como salida
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.1. Puertos como Salida
Objetivos
1. Entender el funcionamiento de los puertos como salida.
2. Configurar el puerto para que opere como salida.
3. Indicarle al puerto configurado como salida a que tome un estado lógico.
2.1.1. Introducción
Cada pin del microcontrolador es capaz de manejar LEDs directamente, pero como
son señales TTL, no se debería sustraerle mucha corriente, el valor máximo, según el
datasheet, es 40mA, un valor por encima de este haría que ese pin en particular se
dañase irreversiblemente.
2.1.2. Configurando como salida
Para configurar un puerto o un pin del mismo como salida se debe realizar lo siguiente:
1. Escribir en el registro DDxn un uno lógico, por ejemplo, si quiero todo el puerto
A como salida sería DDRA=0b11111111, si solo quiero los dos últimos pines como
salida, sería DDRA=0b00000011.
2. Para tener un estado de uno lógico (5V) o un cero lógico (0V) en el pin, debo
escribir ese mismo valor lógico en el pin deseado del registro PORTx.
Ejemplo
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRA = 0b11111111;//PUERTO A COMO SALIDA
while (1)//LOOP INFINITO
{
PORTA = 0b11111111;//ENCIENDO TODO EL PUERTO A
_delay_ms(1000);//ESPERO 1 SEGUNDO
PORTA = 0b00000000;//APAGO TODO EL PUERTO A
_delay_ms(1000);//ESPERO 1 SEGUNDO
}
}
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
DDRA = 0b11111111 Hace que todo el puerto A funcione como salida
PORTA = 0b11111111 Hace que todos los pines del puerto A pasen en estado
lógico uno (5V).
PORTA = 0b00000000 Hace que todos los pines del puerto A pasen en estado
lógico cero (0V).
_delay_ms(1000) genera 1000 milisegundos de retardo.
while(1) hace el loop infinito.
Muchas veces necesitamos apagar o encender un pin individual del PORTn, para ello
se debe utilizar bit masking. Para apagar bits se utiliza la AND (&), para encender bits
la OR (|) y para alternar bits la XOR (∧) de la siguiente manera:
Apagar bits (AND)
PORTA &= 0b11111110. Apaga el bit0 del Puerto A
PORTA &= ∼(1 PINA0). Apaga el bit0 del Puerto A
PORTA &= ∼_BV(PINA0). Apaga el bit0 del Puerto A
Encender bits (OR)
PORTA |= 0b00000001. Encender el bit0 del Puerto A
PORTA |= (1 PINA0). Encender el bit0 del Puerto A
PORTA |= _BV(PINA0). Encender el bit0 del Puerto A
Alternar bits (XOR)
PORTA ^= 0b00000001. Alternar el estado del bit0 del Puerto A
PORTA ^= (1 PINA0). Alternar el estado del bit0 del Puerto A
PORTA ^= _BV(PINA0). Alternar el estado del bit0 del Puerto A
Obs: Para utilizar _BV() 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.1.3. Conclusión
Pedro Ramírez <pedroramirez22@gmail.com> 2