Está en la página 1de 2

Contador ascendente descendente en binario

; *******CONTADOR ASCENDENTE DESSCENDENTE


.include "m164pdef.inc"
;DECLARACION DE VARIABLES
.def tempo=r16
.def contador=r17
;Inicio del programa
.cseg

.org 0x00
rjmp inicio
.org 0x2
rjmp descendente
.org 0x4
rjmp ascendente

;salta a inicio
;interrupcion 0
;contador de forma descendente
;interrupcion 1
;contador de forma ascendente

inicio:

;declaro los puertos o como entradas o como salidas


ldi tempo,0b11111111
out ddra,tempo
ldi tempo,0b00000000
out porta,tempo

;declaro el puerto A como salidas porq ahi van a estar los leds
;pongo en el P A 0

ldi tempo,0b00000000
out ddrb,tempo
out ddrc,tempo
out ddrd,tempo

;entradas

ldi tempo,0b11111111
out portb,tempo
out portc,tempo
out portd,tempo

;pongo 1 en los puerts B,C,D

ldi tempo,high(ramend)
out sph,tempo
ldi tempo,low(ramend)
out spl,tempo
ldi tempo,0b00001010
sts eicra,tempo
ldi tempo,0b00000011
out eimsk,tempo

;inicializo el puntero del stack

;configurar las interrupciones externas


;flanco de bajada
;activo las interrupciones 1 y 0

;borro el contador
clr contador
SEI

;habilita las interrupciones externas

lazo:

out porta,contador
rjmp lazo
descendente:
push r16
in r16,sreg
push r16

;saco por el puerto A lo que hay en el contador

;contador en forma descendente


;en las interrupciones siempre se debe salvar el estado de SREG

dec contador
pop r16
out sreg,r16
pop r16

;decremento el contador en 1
;**acer arreglo si esque llega a 0

reti
ascendente:

;para que se regrese en las interr se regres solo con reti


;contador en forma ascendente
;en las interrupciones siempre se debe salvar el estado de SREG

push r16
in r16,sreg
push r16
inc contador
pop r16
out sreg,r16
pop r16

;incremento el contador en 1
;**acer arreglo si esque llega al maximo

reti

.db
.db
.db
.db
.db

;para que se regrese en las interr se regres solo con reti

0b11000000,0b11111001
0b10100100,0b10110000
0b10010101,0b10010010
0b10000011,0b10111000
0b10000000,0b10011000