ejercicos en atmega 164p uso de timer 0 como contador y interrupciones

5
ESCUELA POLITECNICA NACIONAL SISTEMAS MICROPROCESADOS NOMBRES: Wilmer Villegas FECHA: 24 – 04 – 2012 Realizar un contador que se muestre en dos registros, para lo cual vamos a usar int0 para iniciar e int1 para encerar, utilizar el contador timer0 para realizar el contador interno. PROGRAMA EN AVR: .include"m164pdef.inc" .def aux=r17 .def conta=r18 .def tiempol=r19 .def tiempoh=r20 .def valor=r21 .def aux1=r22 ;coloco mis vectores de interrupciones .org 0x00 rjmp inicio .org 0x02 rjmp comenzar .org 0x04 rjmp encerar .org 0x20 rjmp incrementar inicio: ser aux out ddra,aux out ddrc,aux clr aux out ddrd,aux ldi aux,0b00001100 out portd,aux in aux,mcucr andi aux,0b11101111 out mcucr,aux ldi r16,high(ramend) out sph,r16 ldi r16,low(ramend) out spl,r16 ldi aux,0b00000011 out eimsk,aux ldi aux,0b00001010

Transcript of ejercicos en atmega 164p uso de timer 0 como contador y interrupciones

Page 1: ejercicos en atmega 164p uso de timer 0 como contador y interrupciones

ESCUELA POLITECNICA NACIONALSISTEMAS MICROPROCESADOS

NOMBRES: Wilmer VillegasFECHA: 24 – 04 – 2012

Realizar un contador que se muestre en dos registros, para lo cual vamos a usar int0 para iniciar e int1 para encerar, uti l izar el contador timer0 para realizar el contador interno.

PROGRAMA EN AVR:

. include"m164pdef.inc"

.def aux=r17

.def conta=r18

.def t iempol=r19

.def t iempoh=r20

.def valor=r21

.def aux1=r22;coloco mis vectores de interrupciones.org 0x00

rjmp inicio

.org 0x02rjmp comenzar

.org 0x04rjmp encerar

.org 0x20rjmp incrementar

inicio:

ser auxout ddra,auxout ddrc,aux

clr auxout ddrd,auxldi aux,0b00001100

out portd,aux

in aux,mcucrandi aux,0b11101111out mcucr,aux

ldi r16,high(ramend)out sph,r16ldi r16,low(ramend)out spl ,r16

ldi aux,0b00000011out eimsk,aux

ldi aux,0b00001010sts eicra,aux

ldi conta,50;cargo el valor en el cual quiero que haya la coincidencia

ldi aux1,249out ocr0a,aux1

;habil i tacion del modoldi aux1,0b00000010out tccr0a,aux1

;habil i tacion del prescalerldi aux1,0b00000010out tccr0b,aux1

ldi aux1,0b00000010sts t imsk0,aux1

Page 2: ejercicos en atmega 164p uso de timer 0 como contador y interrupciones

sei

lazo:

out porta, t iempolout portc, t iempohrjmp lazo

comenzar:

push auxin aux,sregpush aux

rjmp salir

incrementar:

push auxin aux,sregpush auxdec conta

brne salir; incremento el contador y realizo mi operación para mostrar en dos registros

inc valoradd t iempol,valorclr valoradc t iempoh,valorldi conta,50rjmp salir

encerar:

push auxin aux,sregpush auxclr t iempolclr t iempoh

salir:

pop auxout sreg,auxpop auxreti

Page 3: ejercicos en atmega 164p uso de timer 0 como contador y interrupciones

SIMULACION EN PROTEUS:

Page 4: ejercicos en atmega 164p uso de timer 0 como contador y interrupciones

DIAGRAMA DE FUJO: