Professional Documents
Culture Documents
Práctica #: _6_
Tema: PROGRAMACIÓN DE LOS MICROCONTROLADORES ATMEL.
Realizado por:
(Espacio Reservado)
Fecha de entrega: 2016 / 06 / 14 f. _________________________
Año mes día Recibido por:
Sanción: ____________________________________________________
PERÍODO
2016 – A
1) Consultar:
VCC
Alimentación de Voltaje dc
GND
Tierra
Puerto A (PA7:PA0)
El puerto A sirve como entradas analógicas para el conversor Análogo Digital. El puerto A también
sirve como un puerto bidireccional de 8 bits con resistencias internas de pull up (seleccionables
para cada bit). Los buffers de salida del puerto A tienen características simétricas controladas con
fuentes de alta capacidad. Los pines del puerto A están en tri- estado cuando las condiciones de
reset están activadas o cuando el reloj no este corriendo. El puerto A también sirve para varias
funciones especiales del Atmega164P como la Conversión Análoga Digital.
Port B (PB7:PB0)
El puerto B es un puerto bidireccional de 8 bits de E/S con resistencias internas de pull up. Las
salidas de los buffers del puerto B tienen características simétricas controladas con fuentes de alta
capacidad. Los pines del puesto B están en tri-estado cuando las condiciones de reset están
activadas o cuando el reloj no esté corriendo. El puerto B también sirve para varias funciones
especiales del Atmega164P.
Port C (PC7:PC0)
El puerto C es un puerto bidireccional de 8 bits de E/S con resistencias internas de pull up
(seleccionadas por cada bit). Las salidas de los buffers del puerto C tienen características simétricas
controladas con fuentes de alta capacidad. Los pines del puesto C están en tri-estado cuando las
condiciones de reset están activadas siempre y cuando el reloj no este corriendo. El puerto C
también sirve para las funciones de Interfaz del JTAG, con funciones especiales del ATmega164P
como se menciona en las páginas iniciales.
Port D (PD7:PD0)
El Puerto D es un puerto bidireccional de entradas y salidas con resistencias internas de pull up
(seleccionadas por cada bit). Las salidas de los buffers del puerto D tienen características simétricas
controladas con sumideros de fuentes de alta capacidad. Los pines del Puerto D están en tri-estado
cuando llega una condición de reset activa, siempre y cuando el reloj no esté corriendo
.
El puerto D también sirve para varias funciones especiales del Atmega164P.
RESET
Entrada del Reset. Un pulso de nivel bajo en este pin por períodos de pulso mínimo genera un reset,
siempre y cuando el reloj no esté corriendo. La longitud del pulso mínimo está especificada en las
Características y Sistemas de Reset (Páginas 331 del Data Sheet). Pulsos cortos no son garantizados
para generar un reset.
XTAL1
Entrada para el amplificador del oscilador invertido y entrada para el circuito de operación del reloj
interno.
.
XTAL2
Salida del Oscilador amplificador de salida.
AVCC
AVCC es la alimentación de voltaje para el pin del Puerto F y el Conversor Análogo a Digital. Este
debe ser conectado externamente a VCC, siempre y cuando el ADC no sea usado. Si el ADC es
usado, este deberá ser conectado a VCC a través de un filtro paso bajo.
AREF
Está es la referencia para el pin de la conversión Análoga a Digital.
El valor de RESET de los registros TRIS suele ser un ‘1’, de forma que por defecto los pines estén
configurados como entradas evitando posibles cortocircuitos en la alimentación que podrían dañar
el micro o el resto del sistema.
El registro PORT funciona como un latch para los datos de salida. Cuando el registro PORT se lee
(Ej, MOVF PORTB,W), el micro lee los niveles presentes en los pines de I/O (no en los latches).
Cuando una función está multiplexada en un pin de I/O de proposito general, la funcionalidad de
un pin puede cambiar para acomodarse a los requisitos del módulo periférico. Por ejemplo, si un
micro tiene un conversor A/D, los pines asociados a este módulo están configurados en un RESET
como entradas analógicas para evitar un consumo de corriente excesivo en el buffer de dicho pin si
este estuviera configurado como entrada digital y el valor de tensión en el pin estuviera a un nivel
intermedio
LPM carga un dato de la memoria flash a un registro, es decir, carga un byte apuntado por el registro
Z en el registro R0. La memoria de programa está organizada en words de 16 bit y el bit menos
significativo del puntero Z selecciona el byte bajo (0) o el byte alto (1). Esta instrucción puede
dirigirse a los primeros 64K bytes (32K words) de memoria de programa. El registro puntero Z
queda inalterado por el funcionamiento.
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.
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)
.include"m164pdef.inc"
.def var1=r16
.def var2=r17
.def res1=r18
.def res2=r19
.def aux=r20
ldi var1,0b00000000
out ddrb,var1
out ddrd,var1
ldi var1,0b11111111
out ddra,var1
out ddrc,var1
ldi var1,0b11111111
out portb,var1
out portd,var1
in var1,MCUCR
andi var1,0b11101111
out MCUCR,var1
cbi ddra,7
Lazo:
in var1,pinb
in var2,pind
mul var1,var2
mov res1,R0
mov res2,R1
sbis pina,7 ; si es 1L salta una instruccion
rjmp Bajo
mov aux,res2
andi aux,0b00001111
call subrutina
out porta,aux
mov aux,res2
andi aux,0b11110000
swap aux
call subrutina
out portc,aux
rjmp fin
Bajo:
mov aux,res1
andi aux,0b00001111
call subrutina
out porta,aux
mov aux,res1
andi aux,0b11110000
swap aux
call subrutina
out portc,aux
fin:
rjmp Lazo
subrutina:
ldi zh,high(TABLA<<1)
ldi zl,low(TABLA<<1)
add zl,aux
clr aux
adc zh,aux
lpm aux,z
ret
TABLA:
.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)
5) Bibliografía
http://www.atmel.com/products/microcontrollers/avr/default.aspx?tab=documents
Set de instrucciones Avr
Manual Atmega164p
http://www.unioviedo.es/ate/alberto/TEMA4-puertos.pdf
http://www.sc.ehu.es/sbweb/webcentro/automatica/web_avr/archivos/SET%20AT90S8
515/Transferencia%20datos/LPM.htm