Autor Tema: Prender un led en los terminales RB1 y RB2  (Leído 4771 veces)

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

Desconectado danissj

  • PIC10
  • *
  • Mensajes: 5
Prender un led en los terminales RB1 y RB2
« en: 24 de Septiembre de 2018, 17:34:33 »
Necesito hacer el siguiente programa: con un pulsador en el terminal RB0 y un led en los terminales RB1 y RB2, prender ambos leds cuando se presione el botón.

Código: [Seleccionar]
LIST p=16F877A
INCLUDE <P16F877A.INC>   ;Librería del PIC16F877A
 
ORG 0

    BSF     STATUS,RP0
  MOVLW B'00000001'
MOVWF   TRISB   
    BCF     STATUS,RP0
CLRF  PORTB     
 
INICIO
BTFSS PORTB,0
GOTO  INICIO
BSF   PORTB,1
BSF   PORTB,2
GOTO  APAGAR
APAGAR
BTFSC PORTB,0
GOTO  APAGAR
MOVLW B'00000000'
MOVWF PORTB
GOTO  INICIO

   

END

El problema es que al precionar el boton(RB0), no se prenden ningun LEDS(RB1,RB2).
Alguna solucion? muchas gracias.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Prender un led en los terminales RB1 y RB2
« Respuesta #1 en: 24 de Septiembre de 2018, 17:57:20 »
Tal ves tu problema sea que es tan rapido el microcontrolador que tu programa pasa de largo:

Suponiendo que no posea rebote:

Código: ASM
  1. INICIO
  2.         BTFSS PORTB,0
  3.         GOTO  INICIO
  4.         BSF       PORTB,1
  5.         BSF       PORTB,2
  6. LOOP1:
  7.         BTFSC PORTB,0   ;Espero que suelte
  8.         GOTO LOOP1
  9. APAGAR
  10.         BTFSC PORTB,0
  11.         GOTO  APAGAR
  12.         MOVLW B'00000000'
  13.         MOVWF PORTB
  14. LOOP2:
  15.         BTFSC PORTB,0   ;Espero que suelte
  16.         GOTO LOOP2
  17.         GOTO  INICIO
   
En caso de que no tengas un antirebote, entonces es mejor agregar una pequeña demora

Código: ASM
  1. INICIO
  2.         BTFSS PORTB,0
  3.         GOTO  INICIO
  4.         BSF       PORTB,1
  5.         BSF       PORTB,2
  6.         CALL DEMORA  ; 50ms
  7. LOOP1:
  8.         BTFSC PORTB,0   ;Espero que suelte
  9.         GOTO LOOP1
  10. APAGAR
  11.         BTFSC PORTB,0
  12.         GOTO  APAGAR
  13.         MOVLW B'00000000'
  14.         MOVWF PORTB
  15.         CALL DEMORA  ; 50ms
  16. LOOP2:
  17.         BTFSC PORTB,0   ;Espero que suelte
  18.         GOTO LOOP2
  19.         GOTO  INICIO

Y tambien podes usar la operacion XOR para hacer lo mismo, pero eso te lo dejo a tu investigacion

Desconectado danissj

  • PIC10
  • *
  • Mensajes: 5
Re:Prender un led en los terminales RB1 y RB2
« Respuesta #2 en: 25 de Septiembre de 2018, 14:46:57 »
hice lo siguiente pero aun los LEDS sigue sin prenderse.

Código: [Seleccionar]
LIST p=16F877A
INCLUDE <P16F877A.INC>   ;Librería del PIC16F877A

ORG 0x00

CONT  EQU  0x20
CONT2 EQU  0x21

    BSF     STATUS,RP0
  MOVLW B'00000001'
MOVWF   TRISB   
    BCF     STATUS,RP0   
  CLRF    PORTB
INICIO
        BTFSS PORTB,0
        GOTO  INICIO
        BSF   PORTB,1
        BSF   PORTB,2
        CALL DELAY_50MS  ; 50ms
LOOP1:
        BTFSC PORTB,0   ;Espero que suelte
        GOTO LOOP1
APAGAR
        BTFSC PORTB,0
        GOTO  APAGAR
        MOVLW B'00000000'
        MOVWF PORTB
        CALL DELAY_50MS  ; 50ms
LOOP22:
        BTFSC PORTB,0   ;Espero que suelte
        GOTO LOOP2
        GOTO  INICIO

   
DELAY_1MS
MOVLW .250
MOVWF CONT
LOOP
NOP
DECFSZ CONT,F
GOTO LOOP
RETURN

DELAY_50MS
MOVLW .50
MOVWF CONT2
LOOP2
CALL DELAY_1MS
DECFSZ CONT2
GOTO LOOP2
RETURN

   

END


Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:Prender un led en los terminales RB1 y RB2
« Respuesta #3 en: 25 de Septiembre de 2018, 14:57:30 »
Que tal, danissj. El problema es evidente, tu codigo es para un 877A y lo quieres meter a un 16F628A. Por obvias razones no te va a funcionar ese codigo.

Revisa bien los fuses del micro que quieres ocupar.

Saludos

Desconectado danissj

  • PIC10
  • *
  • Mensajes: 5
Re:Prender un led en los terminales RB1 y RB2
« Respuesta #4 en: 25 de Septiembre de 2018, 15:47:01 »
he cambiado la librera a P16F628A y aun nada...  :?

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:Prender un led en los terminales RB1 y RB2
« Respuesta #5 en: 25 de Septiembre de 2018, 16:21:10 »
En tu codigo antes de la rutina de delay has puesto "goto loop2"  pero en la etiqueta  has puesto "goto  loop22"
Te  sobra un 2
Aunque despues  has puesto  otro  goto loop2 y  deberias  de  diferenciar los bucles con nombres distintos. Debes corregirlo
« Última modificación: 25 de Septiembre de 2018, 16:28:10 por Fer_TACA »
Todos los días se aprende algo nuevo.

Desconectado nico

  • PIC16
  • ***
  • Mensajes: 180
Re:Prender un led en los terminales RB1 y RB2
« Respuesta #6 en: 25 de Septiembre de 2018, 22:23:41 »
Al portB.0 debes ponerle un pull up a 5v. 4k7 sera suficiente, sino el pin nunca se hara 1. Modifica todo lo que te ponen los demas, agrega el pull up y las resistencias limitadoras a los leds.

Salutes


 

anything