sábado, 8 de octubre de 2011

Luz Secuencial

Programa para ATmega8

Desplaza una luz en el Puerto B de derecha a izquierda y de izquierda a derecha.

-Comandos de rotación LSL y LSR
-Subrutina de retardo
-Calibrado para cristal interno de 8 MHZ

Esquema de conexión:


 Programa en Assembler:

;-----------------------------------------------------------
;Autor: LONELY113
;  http://lonely113.blogspot.com
;
;Programa para desplazamiento de luz en el puerto B

;Desplazamiento cada 1 s (Para oscilador interno de 8 MHz). 
;Salidas: Puerto B (PB0-PB7)
;-----------------------------------------------------------

;Para reloj interno de 8 MHz
.nolist
.include    "m8def.inc"
.list
.device     atmega8
.org     0x0000

.def COUNT1=r20
.def COUNT2=r21
.def COUNT3=r22
.def NUMBER=r4
.def TEMP=r17
; Inicializacion de stack
 ldi r16,LOW(RAMEND)
 out SPL,r16
 ldi r16,HIGH(RAMEND)
 out SPH,r16
; Fin inicializacion de stack

; Inicio de programa
 ldi r16,0xFF   ; Puerto B como salida
 out DDRB,r16
 clr r16   
 out PORTB,r16  ; Borrar PORTB 
 ldi r16,0x07 
 mov NUMBER,r16 ; Desplazar 7 posiciones
 ldi TEMP,0x01  ; '00000001'b
 out PORTB,TEMP  
FIRST: rcall DELAY
 lsl TEMP
 out PORTB,TEMP
 dec NUMBER
 brne FIRST    ; Desplaza 7 veces a la izquierda
 ldi r16,0x07
 mov NUMBER,r16
SECOND: rcall DELAY
 lsr TEMP
 out PORTB,TEMP
 dec NUMBER
 brne SECOND    ; Desplaza 7 veces a la derecha
 ldi r16,0x07
 mov NUMBER,r16
 rjmp FIRST    ; Bucle infinito

; Subrutinas

DELAY: ldi COUNT1,0xFF ; Retardo de 1 segundo
 ldi COUNT2,0xFF
 ldi COUNT3,0x29
LOOP: dec COUNT1
 brne LOOP
 ldi COUNT1,0xFF
 dec COUNT2
 brne LOOP
 ldi COUNT1,0xFF
 ldi COUNT2,0xFF
 dec COUNT3
 brne LOOP
 ret


Archivos de programa:
Descargar

No hay comentarios:

Publicar un comentario