ESCUELA POLITECNICA NACIONAL SISTEMAS MICROPROCESADOS NOMBRES: Wilmer Villegas FECHA: 2 2 – 0 5 – 2012 1. Diseñar un vez y que me izquierda con conversiones y
programa utilizando el conversor A/D que lea un sensor a la muestre con leds el valor del ADCH uti lizando justificación 8 bits de resolución, en el PORTC mue stro el menor de las en el PORTD el valor máximo de las t res.
PROGRAMA EN AVR: .include"m164pdef.inc" ; Declaración de mis variables .def tempo=r17 .def aux=r18 .def aux1=r19 .def valor1=r20 .def valor2=r21 .def valor3=r22 .org 0x00 ; declaro mis pórticos como entrada y salidas ldi tempo,0b00000000 out ddra,tempo ser tempo out ddrc,tempo out ddrd,tempo
; inicializo el SP ldi tempo,high(ramend) out sph,tempo ldi tempo,low(ramend) out spl,tempo clr tempo out portc,tempo out portd,tempo lazo: ; configuro mis bits específicos para el conversor primero codifico el voltaje de referencia, la justificación y el canal que voy a usar ldi tempo,0b01100000 sts admux,tempo
;habilito ADC, inicio de la conversión, modo manual, y el factor de division ldi tempo,0b11000011 sts adcsra,tempo ; salto a la subrutina para ver si la conversión a finalizado rcall espera ; encero el canal y paro el conversor clr tempo sts admux,tempo sts adcsra,tempo sts adch,tempo ;inicializo los registros pero para usar el siguiente canal ldi tempo,0b01100001 sts admux,tempo ldi tempo,0b11000011 sts adcsra,tempo rcall espera1 clr sts sts sts
tempo admux,tempo adcsra,tempo adch,tempo
ldi tempo,0b01100010 sts admux,tempo ldi tempo,0b11000011 sts adcsra,tempo rcall espera2 ; realizo la comparación de los tres datos para ver cuál es el mayor y menor de los 3 cp valor1,valor2 brsh comp1 brlo comp2 rjmp fin comp1: cp valor1,valor3 brlo comp4 cp valor2,valor3
brlo comp5 out portc,valor1 out portd,valor3 rjmp fin comp5: out portc,valor1 out portd,valor2 rjmp fin comp4: out portc,valor3 out portd,valor2 rjmp fin comp2: cp valor2,valor3 brlo comp6 cp valor1,valor3 brlo comp7 out portc,valor2 out portd,valor3 rjmp fin comp6: out portc,valor3 out portd,valor1 rjmp fin comp7: cp valor2,valor3 brsh comp8 rjmp fin comp8: out portc,valor2 out portd,valor1 ; realizo un lazo infinito para cuando ingrese un nuevo valor este sea comparado continuamente fin: rjmp lazo espera: ; chequeo si la conversión a finalizado caso contrario espero lds aux,adcsra sbrc aux,6
rjmp espera lds valor1,adch ret espera1: lds aux1,adcsra sbrc aux1,6 rjmp espera1
SIMULACION EN PROTEUS:
lds valor2,adch ret espera2: lds aux1,adcsra sbrc aux1,6 rjmp espera2 lds valor3,adch ret
DIAGRAMA DE FLUJO:
2. Al programa anterior implementar lo siguiente: Calcular el promedio de las dos medidas, a ese le e nvió a la computadora y como confirmación me envía otra vez al micr o. PROGRAMA EN AVR: .include"m164pdef.inc" .def .def .def .def .def .def .def .def
tempo=r17 aux=r18 aux1=r19 valor1=r20 valor2=r21 valor3=r22 guardar=r23 promedio=r24
1MHz y calculamos para 9600 baudios ldi tempo,high(6) ;cristal 1MHz, 9600baudios sts ubrr0h,tempo ldi tempo,low(6) sts ubrr0l,tempo ldi sts ldi sts ldi sts
.org 0x00 rjmp inicio ;modo de recepción serial para ver si mi dato ya ha sido recibido .org 0x28 rjmp recepcion
tempo,0b00000000 ucsr0a,tempo tempo,0b10011000 ucsr0b,tempo tempo,0b00000110 ucsr0c,tempo
sei clr tempo out portc,tempo out portb,tempo clr promedio
inicio: ldi tempo,0b00000000 out ddra,tempo ldi tempo,0b10000010 out ddrd,tempo ser tempo out ddrc,tempo out ddrb,tempo ldi tempo,high(ramend) out sph,tempo ldi tempo,low(ramend) out spl,tempo ;configure lo que corresponde a la comunicacion serial con un cristal
lazo: ldi tempo,0b01100000 sts admux,tempo ldi tempo,0b11000011 sts adcsra,tempo rcall espera clr sts sts sts
tempo admux,tempo adcsra,tempo adch,tempo
ldi tempo,0b01100001
sts admux,tempo ldi tempo,0b11000011 sts adcsra,tempo rcall espera1 clr sts sts sts
tempo admux,tempo adcsra,tempo adch,tempo
ldi tempo,0b01100010 sts admux,tempo ldi tempo,0b11000011 sts adcsra,tempo rcall espera2 cp valor1,valor2 brsh comp1 brlo comp2 rjmp fin comp1: cp valor1,valor3 brlo comp4 cp valor2,valor3 brlo comp5 out portc,valor1 out portb,valor3
brlo comp6 cp valor1,valor3 brlo comp7 out portc,valor2 out portb,valor3
rjmp fin comp6: out portc,valor3 out portb,valor1 rjmp fin comp7: cp valor2,valor3 brsh comp8 rjmp fin comp8: out portc,valor2 out portb,valor1 fin: add valor1,valor2 lsr valor1 add valor1,valor3 lsr valor1 mov promedio,valor1 verifico:
rjmp fin comp5: out portc,valor1 out portb,valor2 rjmp fin comp4: out portc,valor3 out portb,valor2 rjmp fin comp2: cp valor2,valor3
lds guardar,ucsr0a sbrc guardar,5 rjmp verifico sts udr0,promedio rjmp lazo espera: lds aux,adcsra sbrc aux,6 rjmp espera
lds valor1,adch ret espera1: lds aux1,adcsra sbrc aux1,6 rjmp espera1 lds valor2,adch ret espera2: lds aux1,adcsra sbrc aux1,6 rjmp espera2 lds valor3,adch ret
SIMULACION EN PROTEUS:
recepcion: push tempo in tempo,sreg push tempo
lds promedio,udr0 sbi portd,7 sts udr0,promedio control: lds guardar,ucsr0a sbrc guardar,5 rjmp control pop tempo out sreg,tempo pop tempo reti