Encender un led con pic16f886

#1
Hola! es la primera vez que utilizo éste dispositivo y no he podido hacerlo andar. Intenté encender y apagar un led, pero no lo logro hacer. les coloco el código que estoy utilizando a ver si estoy haciendo algo mal que no logro ver. Intenté utilizar un cristal de 4 Mhz externo pero tampoco hizo nada, modifiqué la palabra de configuración para este fin pero de verdad sigue como muertito

Código:
LIST    P=16F886
    #INCLUDE    <P16F886.INC>
    __CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF  & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON &  _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
    __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V



    CBLOCK    20H
    R1
    R2
    R3
    ENDC

    ORG    00H
    GOTO    INICIO
;    ORG    04H
;    GOTO    SERVICIO

INICIO
    CALL    RET1S
    CALL    CONFIG_PUERTOS
MAIN    
    MOVLW    B'11111111'
    MOVWF    PORTA
;    CALL    RET1S
;    BCF    PORTA,0
    GOTO    MAIN

CONFIG_PUERTOS

    BANKSEL    PORTA ;
    CLRF    PORTA ;Init PORTA
    BANKSEL    ANSEL ;
    CLRF    ANSEL ;      escogemos todo el pto a como digital
    BANKSEL TRISA ;
;    MOVLW    B'000'; Por ahora el ra0 de salida
    CLRF    TRISA
    BANKSEL    OSCCON
    MOVLW    B'01100101'
    MOVWF    OSCCON
    BANKSEL    PORTA
    RETURN

RET1S
            ;999990 cycles
    movlw    0x07
    movwf    R1
    movlw    0x2F
    movwf    R2
    movlw    0x03
    movwf    R3
RET1S_0
    decfsz    R1, f
    goto    $+2
    decfsz    R2, f
    goto    $+2
    decfsz    R3, f
    goto    RET1S_0

            ;6 cycles
    goto    $+1
    goto    $+1
    goto    $+1

            ;4 cycles (including call)
    RETURN

    END
 
Última edición por un moderador:
#2
Una pregunta...

Sabes o tienes idea de lo que estas haciendo o solo lo copiaste y lo tratas de programar?

La verdad...
 
#4
hola yesicaz, la secuencia esta mal si lo que quieres es prender y apgar un solo led por un segun que es lo que veo en tu rutina de retardo seria algo asi:


MOVLW B'11111111' Aca coloca en 1 el bit del Puerto con el que quieres prender el led si es el 0 entonces seria quedaria asi:

MOVLW B'00000001'

INICIO
CALL RET1S
CALL CONFIG_PUERTOS
MAIN
MOVLW B'00000001'
MOVWF PORTA
CALL RET1S ;retiras los punto y coma que tenias
BCF PORTA,0
GOTO MAIN aca en ves de goto MAIN coloca GOTO INICIO

SALUDOS
 
#5
Hola saludos
el problema radica en que esta apagando despues del ciclo y vuelve a empesar, por eso enciende el led enseguida y no hace el tiempo de espera del tiempo de apagad, para eso condiciona para que cuendo esta apagao prenda o cuando este prendido apague
algo asi


blink
btfsc porta,0 ;verifica que este apagado
goto $+3
bsf porta,0
goto $+ 2
bcf porta,0
call retardo ; rutina de retardo
goto blink


asi prende y apaga segun la rutina de retardo que hallas hecho

o de la forma sencilla


blink
bsf porta,0
call retardo ; rutina de retardo que tengas
bcf porta,0
call retardo
goto blink
 
Última edición:
Arriba