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

9
ESCUELA POLITECNICA NACIONAL SISTEMAS MICROPROCESADOS NOMBRES: Wilmer Villegas FECHA: 22 – 05 – 2012 1. Diseñar un programa utilizando el conversor A/D que lea un sensor a la vez y que me muestre con leds el valor del ADCH utilizando 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,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)

Upload: wilmer-villegas-codena

Post on 24-Oct-2014

627 views

Category:

Documents


14 download

TRANSCRIPT

Page 1: ejercicos en atmega 164p uso de conversor A/D y comunicacion serial

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

Page 2: ejercicos en atmega 164p uso de conversor A/D y comunicacion serial

;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

Page 3: ejercicos en atmega 164p uso de conversor A/D y comunicacion serial

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:

Page 4: ejercicos en atmega 164p uso de conversor A/D y comunicacion serial

DIAGRAMA DE FLUJO:

Page 5: ejercicos en atmega 164p uso de conversor A/D y comunicacion serial

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

Page 6: ejercicos en atmega 164p uso de conversor A/D y comunicacion serial

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

Page 7: ejercicos en atmega 164p uso de conversor A/D y comunicacion serial

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: