El siguiente código muestra la implementación de un contador módulo 9 en lenguaje assembler editado en el AVR studio 6.1
* Created: 23/02/2015 16:44:03
*
Author: David Torres Herrera
*/
.include"m164pdef.inc"
.def tempo = r16 ;defino el r16 como tempo
.def contador = r17 ;defino el r17 como contador
.cseg ;comienza el segmento de codigo
.org 0x000 ;empieza el program en 0x00 si hay se aplasta el reset
//configuro el
puertoA como salida
inicio:
ldi tempo,255 ; carga el valor de 255 en el ddra
out ddra,tempo
ldi tempo,0 ; carga cero para que el display este apagado
out porta,tempo
//lazo infinito para
el contador de 0 a 9 con un retardo
lazo:
call retardo ; con esta instruccion me permite llamar a una subrutina
inc contador ; incrmementa el contador
out porta,contador ; muestra el valor de contador por el
puerto A
call retardo ; llama de nuevo a la subrutina
cpi contador,9 ;compara si la variable esta encero
breq encero ; verifica si la ultima operacion fue cero si es asi salta
a encero
rjmp lazo ; regresa al inicio
// en esta subrutina
se hace el retardo para la demora y asi
ver el cambio
retardo:
ldi r20,0x09 ;cargo r20 con valor de nueve
salto0:
ldi r21,0xbc ; carga r21,r22 con estos numeros para
retardos
salto1:
ldi r22,0xc4
salto2:
dec r22 ; decrmenta c4 veces
brne salto2
dec r21 ; decrementa bc* c4 veces
brne salto1
dec r20 ; decrementa 9 veces +(bc*c4)
brne salto0
nop ; da un ciclo de gasto
ret
// aqui se encera la
variable una ves que llega al valo de 9
encero:
ldi contador,0 ;carga contador con cero
out porta,contador ;saca el valor de cero por el puerto
A
rjmp lazo ;regresa al lazo principal
Imágenes del circuito implementado en
Proteus:
No hay comentarios.:
Publicar un comentario