programación de microcontroladores atmega

LABORATORIO DE SISTEMAS MICROPROCESADOS
ESCUELA POLITÉCNICA NACIONAL
Campus Politécnico "J. Rubén Orellana R."
FACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA
Carrera de Ingeniería Electrónica y Control
Carrera de Ingeniería Electrónica y Telecomunicaciones
Carrera de Ingeniería Electrónica y Redes de Información
Carrera de Ingeniería Eléctrica
LABORATORIO DE SISTEMAS MICROPROCESADOS
PRÁCTICA Nº5
1. TEMA :
PROGRAMACIÓN DE LOS MICROCONTROLADORES ATMEL
2. OBJETIVO:
Familiarizar al estudiante con el uso de programadores para los microcontroladores Atmel.
Implementar un circuito que permita comparar o sumar hasta cuatro números de 4 bits,
con el microcontrolador ATmega164p.
3. INFORMACIÓN
El microcontrolador ATMega164p dispone de 4 puertos de entrada/salida de uso
general, de 8 bits cada uno llamados PORTA, PORTB, PORTC, y PORTD. Esto da un total de
32 líneas generales de E/S. Cada una de las líneas de los puertos puede ser
configurada individualmente como entrada o salida. Cabe indicar también que estos pines
pueden tener funciones alternativas y pueden ser asignados a otros periféricos, en cuyo
caso ya no pueden ser usados como línea de E/S.
Para el manejo cada uno de los puertos se usan tres registros:
DDRx, de ocho bits, cada uno de los cuales está asignado a uno de los pines del
puerto. Cada bit permite configurar en forma individual si el pin va a ser entrada o
salida de la siguiente manera: Si el bit se pone a 0, ese pin será una ent rada, y si se pone
1, ese pin será salida.
Dirección: Ladrón de Guevara E11-253
Teléfono: (02) 2976300 Ext.2209
Quito - Ecuador
Correo: [email protected]
LABORATORIO DE SISTEMAS MICROPROCESADOS
PORTx de ocho bits. Cada bit está signado también a un pin. Para poner un valor lógico en
un pin, se debe colocar ese valor en el bit correspondiente en este registro, y si ese pin
está configurado como salida ese valor aparece físicamente en esa patita. Si la
patita está definida como entrada y se escribe un valor en ella, simplemente este valor no
es mostrado en ese pin.
PINx de ocho bits. Si se desea leer un pin que ha sido definido como entrada se debe leer
este registro. Si se lee el registro PORTx, no se lee lo que físicamente está en los pines, si
no lo que haya escrito con anterioridad en el registro PORTx.
4. TRABAJO PREPARATORIO
4.1 Consultar:
4.1.1 Las características generales del microcontrolador ATMEGA 164p,
especialmente en la parte referente a la disposición de terminales
(pines) generales de entrada/salida, los de alimentación, el RESET y los
usados para la programación del mismo
4.1.2 La manera de configurar y usar los puertos de entrada/salida.
4.1.3 El manejo de tablas en el AVR Atmega164p (uso de la instrucción LPM).
Esta instrucción se usará para realizar la conversión de binario a hexadecimal.
(Revisar el Anexo1)
4.2 Diseñar y armar en protoboard un circuito que permita ingresar 2 números de 8
bits mediante 2 dip switch que serán conectados a los puertos PORTB y PORTD
respectivamente. Se manejará un par de displays de 7 segmentos(ánodo o cátodo
común) que serán conectados a los otros dos puertos disponibles. No olvidar que los
display de 7 segmentos deben conectarse usando resistencias limitadoras de
corriente, revisar las características eléctricas en cuanto a la capacidad de manejo de
corriente del microcontrolador para el diseño de las mismas (sección Características
Eléctricas del manual). En uno de los dos pines sobrantes en los puertos de los display
conectar un interruptor el cual funcionara como selector.
4.3 Escribir un programa en Assembler que permita multiplicar los dos números que se
ingresan en los dip switch y mostrar el resultado en los dos display de 7 segmentos en
hexadecimal. Si el switch de selección se encuentra en ON se debe mostrar la parte
baja (menos significativa) del resultado de la multiplicación, mientras que si está en
OFF se debe mostrar la parte alta (más significativa) del resultado de la multiplicación.
La decodificación de binario a hexadecimal se realizará por software dentro del
microcontrolador. (NO USAR DECODIFICADORES BCD a / segmentos EXTERNOS).
4.4 Realizar y presentar la simulación del programa en PROTEUS
Dirección: Ladrón de Guevara E11-253
Teléfono: (02) 2976300 Ext.2209
Quito - Ecuador
Correo: [email protected]
LABORATORIO DE SISTEMAS MICROPROCESADOS
5. EQUIPO Y MATERIALES
Material de escritorio.
6. PROCEDIMIENTO
6.1 El instructor explicará cómo instalar el software y driver necesarios para el
funcionamiento del programador y la configuración de los fusibles del
microcontrolador Atmega164P, previa a la programación del microcontrolador.
6.2 Probar el correcto funcionamiento del circuito diseñado y realizar los cambios en
programación pedidos por cada instructor.
7. INFORME:
7.2 Realizar lo que el instructor solicite el instructor.
Responsables.
Ing. Jhon Pilataxi
Revisado por:
MSc. Patricio Chico
Jefa de Laboratorio de Sistemas Microprocesados
ANEXO 1
Dirección: Ladrón de Guevara E11-253
Teléfono: (02) 2976300 Ext.2209
Quito - Ecuador
Correo: [email protected]
LABORATORIO DE SISTEMAS MICROPROCESADOS
PROGRAMA DE EJEMPLO DE MANEJO DE TABLAS
;*******************************************************
; Programa para convertir de BCD a 7 segmentos
; Por PORTA.3 al PORTA.0 entra el número hexadecimal en 4 bits
; Por PORTB.6 al PORTB.0 salen los 7 segmentos (cátodo común) no olvidar incluir las
; resistencias de 330 Ohm
;*******************************************************
.include "m164pdef.inc"
.def tempo=r17
.org 0x00
ldi tempo,0b00000000
; 1 son salidas,0 entradas.
out ddra,tempo
; PORTA es la entrada en hexadecimal. Los pines no usados
dejarlos
; como entradas
ldi tempo,0b01111111
out ddrb,tempo
; PORTB es salida al display (bits 0 al 6, el 7 no se lo usa)
salto:
; este programa se lo repite indefinidamente
ldi zh,high(tabla<<1)
; Al usar la instrucción LPM, se usa el puntero Z. Los bits 15 al 1
; indican la dirección
ldi zl,low(tabla<<1)
; por eso se desplaza una posición a la izquierda( que es igual a
; multiplicar por 2)
; HIGH toma los 8 bits mas significativos de la dirección, mientras
; LOW toma los 8 menos significativos luego de estas instrucciones
; el puntero Z apunta a la base de la tabla
in tempo,pina
; leo el dato en hexadecimal que entra por el puertoA
cbr tempo,0b11110000
; me aseguro que los 4 bits mas significativos sean cero
add zl,tempo
; sumo al puntero Z el desplazamiento para que apunte al
datorequerido
clr tempo
; pero como el puntero Z es de 16 bits, se debe hacer una
operación
; en 16 bits, primero se hace un ADD entre ZL y el desplazamiento
;en la tabla y luego un ADC entre ZH y 0
adc zh,tempo
; por si se genera CARRY
lpm tempo,z
; Se trae el dato apuntado por el puntero Z (ya actualizado con las
; instrucciones anteriores)
out portb,tempo
; El dato recuperado de la tabla con la instrucción anterior se
; saca por el puerto b
rjmp salto
; regresar para repetir el proceso
; La tabla a continuación contiene la información para convertir un
;hexadecimal de 4 bits a su equivalente en 7 segmentos
; Como esta tabla se almacena en la memoria de programa (FLASH)
,y
;esta memoria tiene unancho de 16 bits, se pueden
; guardar dos datos de 8 bits en cada línea. Esta es la razón que se
;ingresen dos datos en cada una de las líneas de la
Dirección: Ladrón de Guevara E11-253
Teléfono: (02) 2976300 Ext.2209
Quito - Ecuador
Correo: [email protected]
LABORATORIO DE SISTEMAS MICROPROCESADOS
; tabla que se muestra a continuación. Esta tabla es para un display
;en cátodo común.
tabla: ;gfedcba
.db 0b00111111,0b00000110 ;0,1
.db 0b01011011,0b01001111 ;2,3
.db 0b01100110,0b01101101 ;4,5
.db 0b01111101,0b00000111 ;6,7
.db 0b01111111,0b01101111 ;8,9
.db 0b01110111,0b01111100 ;10 (A),11 (b)
.db 0b00111001,0b01011110 ;12 (C),13 (d)
.db 0b01111001,0b01110001 ;14 (E),15 (F)
Dirección: Ladrón de Guevara E11-253
Teléfono: (02) 2976300 Ext.2209
Quito - Ecuador
Correo: [email protected]