![]()

![]()
![]()
PUERTOS
DE ENTRADA Y SALIDA EN UN MICROCONTROLADOR
Estructura básica realizada para utilizar los puertos de un microcontrolador

Figura
1.- Diagrama a bloques utilizado para el manejo de puertos
en el microcontrolador ATMEGA32
PRACTICAS
REALIZADAS
PRACTICA #1:
Duplique la lectura.
PRACTICA
#2: Despliegue de la lectura mayor de
tres puertos.
PRÁCTICA
#3: Luces.
OBJETIVOS GENERALES:
INTRODUCCIÓN
La programación para el manejo de puertos es
hasta cierto punto sencilla ya que esta basada en el lenguaje de programación
orientada a objetos C, de ahí el nombre del
software utilizado ICC AVR el cual sirve para programar el
microcontrolador, los pasos a seguir en este tipo de programación es la
siguiente;
Ejemplo: DDRA=0 este puerto
es declarado de entrada; DDRB=0xFF este es de salida.
IMPORTANTE
Antes de
correr el programa debes de ingresar a tools y elegir la opción in system programming; ahí debes elegir el tipo de tarjeta con el que
se esta trabajando y el puerto serial (com1, com2, com3, etc.),

Debes
elegir el tipo de tarjeta con el que se esta trabajando y si estas trabajando
con la STK500 debes elegir el puerto
serial com1, com2, com3, etc., ó si estas trabajando

También
debes ingresar a project y elegir options para indicarle al software que
microcontrolador se va a utilizar.


Componentes básicos de la
tarjeta STK500 de ATMEL

PRACTICA 1
Duplique la lectura.
Objetivos:
·
Al tener un valor por el puerto A
duplicar su valor y escribirlo por el puerto B.
·
Conocer los diferentes caminos para
lograr el duplicado de valores.
Lea el puerto A duplique la lectura
y escriba el resultado en el puerto B
|
#include<iom32v.h>
//Librería exclusiva del ATMEGA32 |
#include<iom32v.h>
//Librería exclusiva del ATMEGA32 |
Para resolver la problemática
existen dos formas posibles de solución la primera que podemos observar es
multiplicar la lectura por dos, (lecta *=2) y desplegar el valor por el puerto
B el cual en este caso lo conectamos a los leds de la STK500.
La otra forma
es desplazar un lugar a la izquierda la lectura, esto se logra con la expresión
<<1, la lógica consiste que tenemos 8 bits, cuyos valores en decimal son
los siguientes, podemos observar que si te desplazas a la izquierda los valores
se van duplicando lo que resuelve la problemática.
|
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
PRACTICA 2.
Despliegue de la lectura
mayor de tres puertos.
Objetivo:
·
Al tener un valor por el puerto A, B
y C comparar los tres valores y desplegar por los leds del puerto D el valor más
alto.
El microcontrolador leerá tres de sus cuatro
puertos y desplegara por el puerto D la lectura más grande hecha en los otros
tres puertos.
Programa
realizado en ICCAVR
#include<iom32v.h> //Librería exclusiva del ATMEGA32
Char lecta,
lectb, lectc:
Void
main(){
//
configurar puertos
DDRA=0;
DDRB=0;
DDRC=0;
DDRD=0 x FF;
// lectrura
de puertos
Lecta = PINA;
Lectb = PINB;
Lectc = PINC;
//
comparaciones
If
(lecta>lectb&lecta>lectc)
than
portd=lecta
If
(lectb>lecta&lectb>lectc) than
portd=lectb
If
(lectc>lectb&lectc>lecta) than
portd=lectc
}
PRACTICA 3.
Luces.
#include<iom32v.h>
char lecta;
int i,x;
void delay (char t);
void main()
{
while (1)
{
DDRA=0;
DDRB=0xFF;
lecta=PINA;
/////////////////////////////////////////boton1
if (lecta==0xFE){
for
(lecta=2;lecta<255;lecta++)
{
lecta*=2;
PORTB=lecta;
delay(20);
}
}
/////////////////////////////////////////boton2
if(lecta==0xFD){
for(lecta=255;lecta>0;lecta--)
{
lecta*2;
PORTB=lecta;
delay(20);
lecta=lecta/2;
}
}
////////////////////////////////////////boton3
if (lecta==0XFB){
for
(lecta=2;lecta<255;lecta++)
{
lecta*=2;
PORTB=lecta;
delay(15);
}
for(lecta=255;lecta>0;lecta--)
{
lecta*2;
PORTB=lecta;
delay(15);
lecta=lecta/2;
}
}
//////////////////////////////////////boton
4
if
(lecta==0XF7){
for (lecta=2;lecta<255;lecta++)
lecta*=2;
PORTB=lecta;
delay(10);
for(lecta=1;lecta>0;lecta--)
lecta*2;
PORTB=lecta;
delay(10);
lecta=lecta/2;
}
} //while 1
} // main
void delay (char t)
{
int i;
while (t>0)
{
for (i=0;i<5000;i++);
t--;
}
}
![]()