Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Objetivo
Desarrollar un Codigo que habilite al puerto al puerto D como salidas.
Comprender la función los comando utilizados
Obtener un aprendizaje de como un programa sencillo puede ser utilizado
para otras funciones, como por ejemplo controlar dispositivos, controlar la
secuencia de operaciones.
Lista de Material
Codigo
/*
* GccApplication5.c
*
* Created: 20/02/2024 11:12:40 p. m.
* Author : Alejandra Marisol Martinez Cruz
*/
#include <avr/io.h>
#define F_CPU 16000000
#include "util/delay.h"
#include <avr/sfr_defs.h>
int main(void)
{
DDRD = 0b11111111;
PORTD = 0b00000000;
unsigned int contador = 0x00;
while(1)
{
PORTD = contador;
_delay_ms(50);
contador = 0x00;
}
else
{
PORTD = contador;
contador += 1;
_delay_ms(10);
}
}
}
/*
* GccApplication6.c
*
* Created: 21/02/2024 12:07:32 a. m.
* Author : Alejandra Marisol Martinez Cruz
*/
#include <avr/io.h>
#define F_CPU 16000000
#include "util/delay.h"
#include <avr/sfr_defs.h>
int main(void)
{
DDRD = 0b11111111;
PORTD = 0b00000000;
DDRB = 0b00000000;
PORTB = 0b11111111;
DDRC = 0b00000000;
PORTC = 0b11111111;
while(1)
{
if(bit_is_set(PINB,PINB0))
{
if(contador >= 0xFF)
{
PORTD = contador;
_delay_ms(250);
contador = 0x00;
}
else
{
PORTD = contador;
contador += 1;
_delay_ms(250);
}
}
else
{
if (bit_is_set(PINB,PINB1))
{
PORTD |= (1<<PORTD0);
}
else
{
PORTD &=~ (1<<PORTD0);
}
_delay_ms(1);
if (bit_is_set(PINB,PINB2))
{
PORTD |= (1<<PORTD1);
}
else
{
PORTD &=~ (1<<PORTD1);
}
_delay_ms(1);
if (bit_is_set(PINB,PINB3))
{
PORTD |= (1<<PORTD2);
}
else
{
PORTD &=~ (1<<PORTD2);
}
_delay_ms(1);
if (bit_is_set(PINB,PINB4))
{
PORTD |= (1<<PORTD3);
}
else
{
PORTD &=~ (1<<PORTD3);
}
_delay_ms(1);
if (bit_is_set(PINC,PINC0))
{
PORTD |= (1<<PORTD4);
}
else
{
PORTD &=~ (1<<PORTD4);
}
_delay_ms(1);
if (bit_is_set(PINC,PINC1))
{
PORTD |= (1<<PORTD5);
}
else
{
PORTD &=~ (1<<PORTD5);
}
_delay_ms(1);
if (bit_is_set(PINC,PINC2))
{
PORTD |= (1<<PORTD6);
}
else
{
PORTD &=~ (1<<PORTD6);
}
_delay_ms(1);
if (bit_is_set(PINC,PINC3))
{
PORTD |= (1<<PORTD7);
}
else
{
PORTD &=~ (1<<PORTD7);
}
_delay_ms(1);
}
}
}
Descripción
Con el comando DDR el bit 1 es configurado como salida y el bit 0 como entrada,
con el comando PORT se configura el estrado inicial en la salida y en la entrada;
cuando el PORTD está como entrada el 1 quiere decir que es tierra y el 0 a voltaje.
Con el comando if comprobamos el estado del pin de entrada con el comando
bit_is_set_ cuando hay un valor en la entrada igual a 1 ejecutamos en el puerto de
salida, un cambio a 1 en el puerto de salida seleccionado, si el valor del pin de
entrada es igual a 0 negamos el bit del pin seleccionado. Cuando el enunciado del
if es verdadero significa que el contador a llegado al número máximo de muestreo
por lo que agrega ese valor al puerto D y después de la pausa borra su contenido.
Cuando es falso se suma uno a la variable del contador.
Conclusiones
Con el código implementado se generó un contador, en el programa se agregó el
programa de entradas y salidas y con el botón que se agregó en el protoboard al
dejarlo presionado podemos ver el contador. El contador binario que realizamos
puede ser utilizado comúnmente como secuenciadores en sistemas digitales.
Pueden generar secuencias ordenadas de números binarios que se utilizan para
controlar eventos o procesos en un orden específico.
Bibliografía
Manual del microcontrolador ATMEGA328P
https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-
Microcontrollers-ATmega328P_Datasheet.pdf