Autor Tema: Encender los leds desde el de RB0 hasta el de RB3 con una demora de 200ms  (Leído 1931 veces)

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

Desconectado danissj

  • PIC10
  • *
  • Mensajes: 5
Hola, necesito hacer siguiente programa:  Encender los leds desde el de RB0 hasta el de RB3 con una demora de 200ms entre ellos.

y lo que hice yo fue lo siguiente:

LIST p=16F877A
INCLUDE <P16F877A.INC>   ;Librería del PIC16F877A

    ORG 0x00 ; Inicio de programa

CONT1   EQU   0x20
CONT2   EQU   0x21


INICIO
    BSF       STATUS,RP0      ; Accede a banco 1
    CLRF    TRISB      ; Configura todas las patitas de PORTB como salidas
    BCF       STATUS,RP0      ; Regresa a banco 0


ENCIENDELED
   CLRF    PORTB
   MOVLW   B'00000001'   
    MOVWF   PORTB      
   CALL   Retardo
    MOVLW   B'00000011'   
    MOVWF   PORTB      
   CALL    Retardo
   MOVLW   B'00000111'      
    MOVWF   PORTB
   CALL    Retardo
   MOVLW   B'00001111'      
    MOVWF   PORTB
   
   
Retardo            ; Rutina de retardo
    MOVLW   d'256'   
    MOVWF   CONT1   
REP1   
    MOVLW   d'256'      
    MOVWF   CONT2      
REP2
    DECFSZ  CONT2,1      ; Decrementa el valor de CONT2 en 1 (3 instrucciones * 256 = 768)
    GOTO    REP2
    DECFSZ  CONT1,1      ; Decrementa el valor de CONT1 en 1 (768*256=0,2seg aprox)
    GOTO    REP1
    Return   

    END ; Fin de programa


El problema es que cuando los LEDS se llega al bits RB4, se vuelven a apagarse. (mi objetivo es mantener los LEDS prendidos permanentemente.)

Alguien me podria ayudar? Muchas gracias.
« Última modificación: 24 de Septiembre de 2018, 01:58:42 por danissj »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Encender los leds desde el de RB0 hasta el de RB3 con una demora de 200ms
« Respuesta #1 en: 24 de Septiembre de 2018, 06:44:13 »
En todo programa necesitas tener un loop infinito, es decir un loop que nunca salga.

Si mantener los leds encendidos te referis a que repita el proceso entonces si le pones un GOTO a ENCIENDELED ya tendrias lo que querias

Código: ASM
  1. LIST p=16F877A
  2. INCLUDE <P16F877A.INC>   ;Librería del PIC16F877A
  3.  
  4.     ORG 0x00 ; Inicio de programa
  5.  
  6. CONT1   EQU   0x20
  7. CONT2   EQU   0x21
  8.  
  9.  
  10. INICIO
  11.     BSF       STATUS,RP0      ; Accede a banco 1
  12.     CLRF    TRISB      ; Configura todas las patitas de PORTB como salidas
  13.     BCF       STATUS,RP0      ; Regresa a banco 0
  14.  
  15.  
  16. ENCIENDELED
  17.    CLRF    PORTB
  18.    MOVLW   B'00000001'  
  19.     MOVWF   PORTB      
  20.    CALL   Retardo
  21.     MOVLW   B'00000011'  
  22.     MOVWF   PORTB      
  23.    CALL    Retardo
  24.    MOVLW   B'00000111'      
  25.     MOVWF   PORTB
  26.    CALL    Retardo
  27.    MOVLW   B'00001111'      
  28.     MOVWF   PORTB
  29.    CALL  Retardo
  30.    GOTO ENCIENDELED
  31.  
  32.    
  33. Retardo            ; Rutina de retardo
  34.     MOVLW   d'256'  
  35.     MOVWF   CONT1  
  36. REP1  
  37.     MOVLW   d'256'      
  38.     MOVWF   CONT2      
  39. REP2
  40.     DECFSZ  CONT2,1      ; Decrementa el valor de CONT2 en 1 (3 instrucciones * 256 = 768)
  41.     GOTO    REP2
  42.     DECFSZ  CONT1,1      ; Decrementa el valor de CONT1 en 1 (768*256=0,2seg aprox)
  43.     GOTO    REP1
  44.     Return  
  45.  
  46.     END ; Fin de programa

Le agregue un retardo para que puedas verlo a todos encendidos

Ahora si te referis a que se mantengan encendidos y que no repitan el proceso al loop infinito lo pones luego, Asi:

Código: ASM
  1. LIST p=16F877A
  2. INCLUDE <P16F877A.INC>   ;Librería del PIC16F877A
  3.  
  4.     ORG 0x00 ; Inicio de programa
  5.  
  6. CONT1   EQU   0x20
  7. CONT2   EQU   0x21
  8.  
  9.  
  10. INICIO
  11.     BSF       STATUS,RP0      ; Accede a banco 1
  12.     CLRF    TRISB      ; Configura todas las patitas de PORTB como salidas
  13.     BCF       STATUS,RP0      ; Regresa a banco 0
  14.  
  15.  
  16. ENCIENDELED
  17.    CLRF    PORTB
  18.    MOVLW   B'00000001'  
  19.     MOVWF   PORTB      
  20.    CALL   Retardo
  21.     MOVLW   B'00000011'  
  22.     MOVWF   PORTB      
  23.    CALL    Retardo
  24.    MOVLW   B'00000111'      
  25.     MOVWF   PORTB
  26.    CALL    Retardo
  27.    MOVLW   B'00001111'      
  28.     MOVWF   PORTB
  29.  
  30. LOOP:
  31.    GOTO LOOP
  32.  
  33.    
  34. Retardo            ; Rutina de retardo
  35.     MOVLW   d'256'  
  36.     MOVWF   CONT1  
  37. REP1  
  38.     MOVLW   d'256'      
  39.     MOVWF   CONT2      
  40. REP2
  41.     DECFSZ  CONT2,1      ; Decrementa el valor de CONT2 en 1 (3 instrucciones * 256 = 768)
  42.     GOTO    REP2
  43.     DECFSZ  CONT1,1      ; Decrementa el valor de CONT1 en 1 (768*256=0,2seg aprox)
  44.     GOTO    REP1
  45.     Return  
  46.  
  47.     END ; Fin de programa