atmega 8 memoria

Upload: jose-maximo-alvarado-oyola

Post on 06-Mar-2016

219 views

Category:

Documents


0 download

DESCRIPTION

laboratorio unac fieemicrocontroladores labo 4 final

TRANSCRIPT

Problema 1Se dispone de un circuito compuesto por 3 interruptores, 2 pulsadores y 5 diodos leds que estn conectados al microcontrolador. Mediante los 3 interruptores (3bits) se ingresa un total de 6 nmeros que son almacenados en una tabla que se inicia en la direccin 0x100 de la memoria SRAM. Para validar el ingreso del primer nmero y mostrar en la salida se utiliza el pulsador P1 (Se valida al presionar y soltar) y as sucesivamente hasta completar en la tabla los 6 nmeros. Al presionar el pulsador P2 (sin soltar) en cualquier momento se deben mostrar en los diodos leds (D1 D2 D3 D4 D5 D6)) la suma parcial de los nmeros ingresados y al soltarse el pulsador P2, la salida muestra el ltimo nmero ingresado. Se prende otro diodo led (D7) cuando se termina de ingresar los 6 nmeros, con lo cual P1 ya no graba ningn nmero y P2 siempre mostrar la suma total en los leds, con el diodo D8 encendido. Escriba un programa que cumpla con las condiciones planteadas. Para las conexiones considerar:Conexiones:Pulsadores P1 y P2 conectados a: PD6, PD7Interruptores a: PC3(MSB), PC2, PC1 (bit LSB) .Salidas: Leds al puerto BEjemplo: Al usar P1, se ingresa los nmeros 09, 08, y 05, luego si se presiona P2 (sin soltarlo), se obtendr lasuma igual a 20, y al soltarlo se muestra en la salida 05.

DIAGRAM DE FLUJO:

/* * preg1final3.asm * * Created: 24/09/2015 08:40:04 p.m. * Author: Anthony */ .dseg .org $0100 numeros: .byte 6 .cseg .def c=r17 .def num=r18 .def acum=r19 .org $0000 ;programa principal ldi r16,high(ramend) out sph,r16 ldi r16,low(ramend) out spl,r16 ldi xl,low(numeros);iniciamos los punteros para numero ldi xh,high(numeros) rcall configurar_puertos ;********************************* ;espera que preione y suelte el pulsador en PB5 ;usamos las instrucciones sbis y sbic inicio: ldi r16,$00 out portb,r16 ldi c,0 ldi acum,0 ldi num,0contador: ldi num,0 cpi c,6 brlo prespul1 sbi pinb,4 rjmp fin;************************************************;lectura del numeroprespul1:sbis pind,6 ;si,presion?rjmp prespul1 ;no,presionsoltpul1:sbic pind,6 ;si,solt?rjmp soltpul1 ;no,soltlecnum:in num,pinc ;leemos el puertoandi num,0x0F ;filtra los 3 bits mas significativoslsr num ;se desplaza 1 ves para obtener el numeroout portb,num ;muestra el valor validadost x+,num ;guarda el valor en la direccion definidaadd acum,num ;acumula la suma parcial de los valores ingresadoinc c ;incrementa el contador de numerosprespul2: sbis pind,7 ;presion el pulsador PD7rjmp prespul2 ;no,presion el pulsador en PD7out portb,acum ;muestra la suma acumuladasoltpul2: sbic pind,7 ;solt el pulsador PD7rjmp soltpul2 ;no,solt el pulsador PD7out portb,num ;muestra el ultimo numero ingresado rjmp contadorfin: rjmp fin ;fin del programa;*************************************************************8;subrutina para configurar puertos;no tiene parametros de salidaconfigurar_puertos: ldi r16,0x0Eout portc,r16;activamos las resistencia pull-up del puerto Cldi r16,0x00out ddrd,r16;puerto D como entradaldi r16,0xFFout ddrb,r16;puerto B como salidaret

Problema 2Por medio de cuatro interruptores se deben ingresar 5 nmeros de 4 bits. Cada nmero ingresado (luego de presionar y soltar el pulsador P1) debe ser validado y almacenado en un arreglo a partir de la direccin 0x80 en la memoria SRAM , mostrndose a la vez en 4 leds. Luego de ingresar el ltimo nmero (5to), se prender adicionalmente otro LED indicador. A continuacin cada vez que se presione y suelte el pulsador se mostrarn en los leds solo los nmeros mayores a 9 que fueron ingresados, con el LED indicador apagado. Cuando se llegue al ltimo nmero mayor a 9 debe prenderse el LED indicador y mostrar en los otros leds el promedio redondeado al entero ms prximo de toso los nmeros mayor a 9. A continuacin, y luego de presionar y soltar el pulsador, una vez ms, se debe repetir el proceso descritoConsiderar:Si al momento de mostrar no hubiese un nmero mayor a 9 deben de encenderse todos los leds.Conexiones:Pulsadores conectados a: PC3Interruptores a: PD5(MSB), PD4, PD3, PD2 (bit LSB) .Salidas: Leds al puerto B

/* * lab3preg2.asm * * Created: 02/10/2015 10:03:30 a.m. * Author:jalvarado */

.dseg.org $0080numeros: .byte 5.cseg.org $0000.def num=r17.def num1=r19.def c=r18.def acumm=r20.def cm9=r21.def q=r22ldi r16,high(ramend)out sph,r16ldi r16,low(ramend)out spl,r16ldi xh,high(numeros)ldi xl,low(numeros)

rcall configurar_puertosinicio:ldi num,0ldi num1,0ldi r16,$00out portb,r16ldi acumm,0ldi cm9,0ldi q,0ldi c,0limitar:cpi c,5;contador de numeros c=5? breq enlace1;si,salta a enlace1presionar:sbis pinc,3;lee el pin 3 del puerto Crjmp presionarsoltar:sbic pinc,3rjmp soltarin num,pind;lee los interruptoreslsr numlsr num;dos desplazamientos a la derecha para obtener el numeroandi num,$0F;filtramos los 4 bits menos significativos out portb,num;mostramos el numero st x+,num;guardamos en la direccion de memoria especificadainc c;incrementamos el contador de numerosrjmp limitar;regresa a la etiqueta limitar para hacer una cpenlace1:rcall indicadorpren;led indicador encendido indica que se llenaron los 5 valores

limitar2:cpi c,0;c=0?breq enlace2;si, salta a enlace2 rcall indicadorapag;no,apaga el led indicador y realiza las instrucciones sgtespresionar1:sbis pinc,3;presionar y soltar el pin 3 del puerto Crjmp presionar1soltar1:sbic pinc,3rjmp soltar1ld num1,-xdec ccpi num1,9brsh mayormuestraldi r16,$0Fout portb,r16rjmp limitar2mayormuestra:inc cm9;incrementa el contador de numeros mayores a 9add acumm,num1;acumulamos el valor de los numeros ; mayores a 9 en la variable acummout portb,num1rjmp limitar2enlace2:rcall indicadorpren ;se prende el led indicador cpi cm9,0breq presionar2en:cpc acumm,cm9brsh qdiv rjmp findivqdiv:sub acumm,cm9inc qrjmp enfindiv:out portb,qrcall indicadorprenpresionar2:sbis pinc,3rjmp presionar2soltar2:sbic pinc,3rjmp soltar2rjmp inicio;subprogramas para el indicador de led:indicadorpren: sbi pinb,4 retindicadorapag: cbi pinb,4 retconfigurar_puertos: ldi r16,$00out ddrc,r16;configuramos el puerto C como entradaldi r16,$3Cout portd,r16;activamos las res pull-up PD5:PD2ldi r16,$FFout ddrb,r16;configuramos el puerto B como salidaret

conclusiones :Podemos sobrescribir en los 4 leds originales donde se muestran los nmeros mayores a 9 sin usar 4 leds adicionales ms para el promedio.Las instrucciones rcall ordenan el cuerpo del programa.Las instrucciones sbis sbic son las ms sencillas para trabajar con un pulsador.