ejercicos en atmega 164p uso de conversor a/d y comunicacion serial

Post on 24-Oct-2014

627 Views

Category:

Documents

14 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ESCUELA POLITECNICA NACIONALSISTEMAS MICROPROCESADOS

NOMBRES: Wilmer VillegasFECHA: 22 – 05 – 2012

1. Diseñar un programa util izando el conversor A/D que lea un sensor a la vez y que me muestre con leds el valor del ADCH util izando justificación izquierda con 8 bits de resolución, en el PORTC muestro el menor de las conversiones y en el PORTD el valor máximo de las tres.

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,0b00000000out ddra,tempo

ser tempoout ddrc,tempoout ddrd,tempo

; inicializo el SPldi tempo,high(ramend)out sph,tempoldi tempo,low(ramend)out spl , tempo

clr tempoout portc, tempoout portd,tempo

lazo: ; configuro mis bits específicos para el conversor primero codifico el voltaje de referencia, la justif icación y el canal que voy a usar

ldi tempo,0b01100000sts admux,tempo

;habil i to ADC, inicio de la conversión, modo manual, y el factor de division

ldi tempo,0b11000011sts adcsra,tempo

; salto a la subrutina para ver si la conversión a finalizado

rcall espera; encero el canal y paro el conversor

clr temposts admux,temposts adcsra,temposts adch,tempo

;inicializo los registros pero para usar el siguiente canal

ldi tempo,0b01100001sts admux,tempoldi tempo,0b11000011sts adcsra,temporcall espera1

clr temposts admux,temposts adcsra,temposts adch,tempo

ldi tempo,0b01100010sts admux,tempoldi tempo,0b11000011sts adcsra,temporcall espera2

; realizo la comparación de los tres datos para ver cuál es el mayor y menor de los 3

cp valor1,valor2brsh comp1brlo comp2rjmp fin

comp1:

cp valor1,valor3brlo comp4cp valor2,valor3

brlo comp5out portc,valor1out portd,valor3rjmp fin

comp5:out portc,valor1out portd,valor2rjmp fin

comp4:out portc,valor3out portd,valor2rjmp fin

comp2:cp valor2,valor3brlo comp6cp valor1,valor3brlo comp7out portc,valor2out portd,valor3rjmp fin

comp6:out portc,valor3out portd,valor1rjmp fin

comp7:cp valor2,valor3brsh comp8rjmp fin

comp8:out portc,valor2out 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,adcsrasbrc aux,6

rjmp espera

lds valor1,adchret

espera1:

lds aux1,adcsrasbrc aux1,6rjmp espera1

lds valor2,adchret

espera2:

lds aux1,adcsrasbrc aux1,6rjmp espera2

lds valor3,adchret

SIMULACION EN PROTEUS:

DIAGRAMA DE FLUJO:

2. Al programa anterior implementar lo siguiente:Calcular el promedio de las dos medidas, a ese le envió a la computadora y como confirmación me envía otra vez al micro.

PROGRAMA EN AVR:

. include"m164pdef.inc"

.def tempo=r17

.def aux=r18

.def aux1=r19

.def valor1=r20

.def valor2=r21

.def valor3=r22

.def guardar=r23

.def promedio=r24

.org 0x00rjmp inicio

;modo de recepción serial para ver si mi dato ya ha sido recibido.org 0x28

rjmp recepcion

inicio:

ldi tempo,0b00000000out ddra,tempo

ldi tempo,0b10000010out ddrd,tempo

ser tempoout ddrc,tempoout ddrb,tempo

ldi tempo,high(ramend)out sph,tempoldi tempo,low(ramend)out spl , tempo

;configure lo que corresponde a la comunicacion serial con un cristal

1MHz y calculamos para 9600 baudios

ldi tempo,high(6) ;cristal 1MHz, 9600baudios

sts ubrr0h,tempoldi tempo,low(6)sts ubrr0l , tempo

ldi tempo,0b00000000sts ucsr0a,tempoldi tempo,0b10011000sts ucsr0b,tempoldi tempo,0b00000110sts ucsr0c,tempo

sei

clr tempoout portc, tempoout portb,tempoclr promedio

lazo:

ldi tempo,0b01100000sts admux,tempoldi tempo,0b11000011sts adcsra,temporcall espera

clr temposts admux,temposts adcsra,temposts adch,tempo

ldi tempo,0b01100001

sts admux,tempoldi tempo,0b11000011sts adcsra,temporcall espera1

clr temposts admux,temposts adcsra,temposts adch,tempo

ldi tempo,0b01100010sts admux,tempoldi tempo,0b11000011sts adcsra,temporcall espera2

cp valor1,valor2brsh comp1brlo comp2rjmp fin

comp1:

cp valor1,valor3brlo comp4cp valor2,valor3brlo comp5out portc,valor1out portb,valor3

rjmp fincomp5:

out portc,valor1out portb,valor2

rjmp fincomp4:

out portc,valor3out portb,valor2

rjmp fin

comp2:cp valor2,valor3

brlo comp6cp valor1,valor3brlo comp7out portc,valor2out portb,valor3

rjmp fincomp6:

out portc,valor3out portb,valor1

rjmp fincomp7:

cp valor2,valor3brsh comp8rjmp fin

comp8:out portc,valor2out portb,valor1

fin:

add valor1,valor2lsr valor1add valor1,valor3lsr valor1mov promedio,valor1

verifico:

lds guardar,ucsr0asbrc guardar,5rjmp verificosts udr0,promedio

rjmp lazo

espera:

lds aux,adcsrasbrc aux,6rjmp espera

lds valor1,adchret

espera1:

lds aux1,adcsrasbrc aux1,6rjmp espera1

lds valor2,adchret

espera2:

lds aux1,adcsrasbrc aux1,6rjmp espera2

lds valor3,adchret

recepcion:

push tempoin tempo,sregpush tempo

lds promedio,udr0sbi portd,7sts udr0,promedio

control:lds guardar,ucsr0asbrc guardar,5rjmp control

pop tempoout sreg,tempopop temporeti

SIMULACION EN PROTEUS:

top related