martes, 1 de marzo de 2011

Luz Secuencial

Programa para PIC16F84A

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

-Comandos de rotación RRF y RLF
-Subrutina de retardo

Esquema de conexión:


Prueba:

 

Programa en Assembler:

;---------------------------------------------------------
;Autor: LONELY113
; http://lonely113.blogspot.com
;
;Programa para iluminar leds secuencuencialmente
;La luz se desplaza de RB0 a RB7 y viceversa 
;Salidas: PUERTOB
;---------------------------------------------------------
include "p16f84a.inc"
list P=16f84a

__CONFIG _WDT_OFF & _XT_OSC

COUNT1 equ 0x0C
COUNT2 equ 0x0D
COUNT3 equ 0x0E
TIMES equ 0x0F

 org 0x00  ; Inicio de programa
 bsf STATUS,5 ; Inicio de configuracion E/S
 clrf PORTA
 clrf PORTB  ; Puerto B como salida
 bcf STATUS,5 ; Fin configuracion E/S
 clrf PORTB
 bcf STATUS,0
 bsf PORTB,0  ; PORTB=00000001
 call DELAY  ; Llamada a subrutina DELAY
BEGIN: movlw 0x07
 movwf TIMES
LEFT: rlf PORTB,1  ; Rota 7 veces a la izquierda
 call DELAY
 decfsz TIMES
 goto LEFT
 movlw 0x07
 movwf TIMES
RIGHT: rrf PORTB,1  ; Rota 7 veces a la derecha
 call DELAY
 decfsz TIMES
 goto RIGHT
 goto BEGIN  ; Bucle infinito

;Subrutinas

DELAY movlw 0xFF  ; Subrutina de retardo
 movwf COUNT1  ; 256x256=65536 cuentas
 movwf COUNT2
 movlw 0x20
 movwf COUNT3
LOOP: decfsz COUNT1,1 ; Decrementa COUNT1
 goto LOOP  ; Salta si COUNT1=0
 movlw 0xFF  
 movwf COUNT1  ; COUNT1=FF
 decfsz COUNT2,1 ; Decrementa COUNT2
 goto LOOP  ; Salta se COUNT2=0
 movlw 0xFF
 movwf COUNT1
 movwf COUNT2
 decfsz COUNT3,1
 goto  LOOP
 return   ; Retorno de subrutina

 end   ; Fin de programa

****Programa en Pic Basic (Microcode)****


'****************************************************************
'*  Name    : Secuencial.BAS                                    *
'*  Author  : LONELY113                                         *
'*  Notice  : Copyright (c) 2011 LONELY113]                     *
'*          : All Rights Reserved                               *
'*  Date    : 12/05/2011                                        *
'*  Version : 1.0                                               *
'*  Notes   : PIC16F84a                                         *
'*          : Leds en Puerto B                                  *
'****************************************************************

@  __config _HS_OSC & _WDT_OFF

DEFINE OSC 10 '10 MHz

i VAR BYTE
trisb=$00     'Puerto B como salida

loop1:
  portb=$01   'PORTB=00000001
  PAUSE 1000  'Retardo de 1 segundo
 FOR i = 1 TO 7
  portb=portb<<1 'Desplazar a la izquierda 7 veces
  PAUSE 1000     'Retardo de 1 segundo
 NEXT i
 FOR i = 1 TO 7  'Desplazar a la derecha 7 veces
  portb=portb>>1
  PAUSE 1000     'Retardo de 1 segundo
 NEXT i
GOTO loop1
END



Archivos .ASM y .HEX:

1 comentario: