Autor Tema: Problema para encender y apagar leds  (Leído 1519 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado distelg

  • PIC10
  • *
  • Mensajes: 14
Problema para encender y apagar leds
« en: 27 de Agosto de 2005, 22:56:00 »
Hola. Estoy haciendo un programa muy sencuillo para encender y apagar 5 leds conectados al port B. La primera vez los leds se encienden y luego se apagan como debe ser, pero despues pareciera ser que la pausa fuese mas corta  cuando los leds se apagan, porque apenas se apagan se vuelven a encender.
A continuacion adjunto el codigo para que me ayuden y me digan que esta mal. Estoy usando un 16F84A con un cristal de 4 MHZ.
Gracias por la ayuda.


;********************************************
;* Este programa prende y apaga 5 leds
;* el PORTA se configura como entrada y
;* el PORTB como salida
;********************************************

;BANCO 0 y BANCO 1
STATUS   EQU   03H

;BANCO 0
PORTB   EQU   06H
EEDATA    EQU 08H

EECON1    EQU 08H

;BANCO 1
TRISA   EQU   05H
TRISB   EQU   06H

;Registros
COUNT    EQU 0CH
ADDRESS   EQU 0DH
CUENTA1   EQU 0EH
CUENTA2   EQU 0FH
CUENTA3   EQU 010H
W_AUX   EQU 011H   ;para salvar el valor del registro W

F   EQU   1
W   EQU   0

#DEFINE   BANCO0   BCF   STATUS,5
#DEFINE   BANCO1   BSF   STATUS,5

   ORG   00H
   BANCO1         ;Paso al banco 1
   MOVLW   0FFH   ;Todos los bits del acumulador a "1"
   MOVWF   TRISB   ;configuro el puerto A como entrada (son 5)
   MOVLW   00H       ;Todos los bits del acumulador a "0"
   MOVWF   TRISB   ;configuro el puerto B como salida (son 8)
   BANCO0         ;Vuelvo al banco 0
   CLRF   PORTB   ;pongo todas las salidas a 0

   BANCO0
   CLRW         ;W=0
   MOVWF   COUNT

LOOP1
   INCF    COUNT,F
   MOVF    COUNT, W
   MOVLW   07H
    MOVWF   PORTB
   CALL    PAUSA

   MOVLW   00H
    MOVWF   PORTB
   CALL    PAUSA

   GOTO   LOOP1

;============================================
;= Hago una pausa para que se vean los leds =
;============================================

PAUSA
   MOVWF W_AUX   ;salvo el valor del registro W
   MOVLW 078H ;120D
   MOVWF CUENTA1

BUCLE1
   MOVLW 019H ;25D
   MOVWF CUENTA2

BUCLE2   
   MOVLW 040H
   MOVWF CUENTA3
   
BUCLE3
   DECFSZ CUENTA3,F
   GOTO BUCLE3
      
   DECFSZ CUENTA2,F
   GOTO BUCLE2
   
   DECFSZ CUENTA1,F

   GOTO BUCLE1
   MOVF W_AUX,W   ;recupero el valor de W
   RETURN
   
    END


Desconectado Artifox

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 455
    • Quadbot
RE: Problema para encender y apagar leds
« Respuesta #1 en: 28 de Agosto de 2005, 00:01:00 »
A ver dijo un ciego... primero te ire resaltando un error q hay por alli..

BANCO1 ;Paso al banco 1
MOVLW 0FFH ;Todos los bits del acumulador a "1"
MOVWF TRISB ;configuro el puerto A como entrada (son 5) ; debe ser TRISA
MOVLW 00H ;Todos los bits del acumulador a "0"
MOVWF TRISB ;configuro el puerto B como salida (son 8)

luego, no entiendo muy bien para que esta el registro COUNT, pues no le veo un uso especial, a mi parecer tu codigo prodria kedar asi....

LOOP1
MOVLW 07H
MOVWF PORTB
CALL PAUSA

MOVLW 00H
MOVWF PORTB
CALL PAUSA

GOTO LOOP1

PAUSA

MOVLW 078H ;120D
MOVWF CUENTA1

BUCLE1
MOVLW 019H ;25D
MOVWF CUENTA2

BUCLE2
MOVLW 040H
MOVWF CUENTA3

BUCLE3
DECFSZ CUENTA3,F
GOTO BUCLE3

DECFSZ CUENTA2,F
GOTO BUCLE2

DECFSZ CUENTA1,F
GOTO BUCLE1
RETURN
END

 No necesitas guardar el registro w xq tu programa no lo necesita. Por lo demas deberian funcionar bien las pausas... Hay un programa para generar demoras en ASM si no te sale puedes probar con ese...

Nos vemos y un abrazo...Rebotado
Video Quadbot
Saludos desde mi querido Perú.
Si realmente queremos que el mundo cambie debemos empezar por nosotros mismos... ;)


 

anything