Problema con 2º pulsador

Hola, soy nuevo aquí pero hace tiempo que os sigo.
Tengo este código y me funciona, pero al intentar poner el 2º pulsador y led no hay forma.
Código:
LIST p=16f877A
    INCLUDE <P16f877A.INC>
    
    __CONFIG _CP_OFF&  _CPD_OFF& _LVP_OFF& _WDT_OFF& _XT_OSC
    
    cblock 0X20
    endc
    
    #define PULSA1    PORTA,0
    #define LED1    PORTC,0
    
    ORG    0
    
    BSF    STATUS,RP0        ;banco 1 configuracion
    BSF    PULSA1
    BCF    LED1
    
    MOVLW    0x06
    MOVWF    ADCON0             ;se coloca en digital los pines
    
    BCF    STATUS,RP0        ;banco cero acciones
    BCF    LED1
    BSF    PULSA1
    
        
    
    VERIFICA    
        BTFSC    PULSA1
        GOTO    VERIFICA                 ;salta si es uno
        CALL    Retardo_10ms    ;salta por ser cero
        BTFSS    PULSA1
        GOTO    VERIFICA
        MOVLW    B'00000001'
        XORWF    PORTC,F
        GOTO    VERIFICA
    

    INCLUDE <RETARDOS.INC>
    
    END

Este es el 2º código que no me funciona. ¿Dónde está el fallo?.
Quisiera poder poner 6 pulsa.togger como en el primer código y 6 pulsa.momentario, utilizo ensamblador.
Gracias.


Código:
list     p=16f877A
    INCLUDE <P16f877A.INC>
    
    __CONFIG _CP_OFF& _CPD_OFF& _LVP_OFF& _WDT_OFF& _XT_OSC
    
    cblock 0X20
    endc
    
    #define PULSA1    PORTA,0
    #define LED1    PORTC,0
    #define PULSA2    PORTA,1
    #define LED2    PORTC,1
    
    ORG    0
    
    BSF    STATUS,RP0        ;banco 1 configuración
    BSF    PULSA1
    BCF    LED1
    BSF    STATUS,RP0        ;banco 1 configuración
    BSF    PULSA2
    BCF    LED2
    
    MOVLW    0x06
    MOVWF    ADCON0             ;se coloca en digital los pines
    
    BCF    STATUS,RP0        ;banco cero acciones
    BCF    LED1
    BSF    PULSA1
    BCF    STATUS,RP0        ;banco cero acciones
    BCF    LED2
    BSF    PULSA2
    
        
    
    VERIFICA
          BTFSC     PULSA1
          GOTO     VERIFICA        ;salta si es uno
          CALL     Retardo_10ms        ;salta por ser cero
          BTFSS     PULSA1
          GOTO     VERIFICA
          MOVLW     B'00000001'
          XORWF     PORTC,F
          GOTO     VERIFICA
                
    VERIFICA1    
          BTFSC    PULSA2
          GOTO    VERIFICA1        ;salta si es uno
          CALL    Retardo_10ms                ;salta por ser cero
          BTFSS    PULSA2
          GOTO    VERIFICA1
          MOVLW    B'00000010'
          XORWF    PORTC,F
          GOTO    VERIFICA1                

    INCLUDE <RETARDOS.INC>
    END
 
Última edición por un moderador:
Quisiera poder poner 6 pulsa.togger como en el primer código y 6 pulsa.momentario, utilizo ensamblador.
No sé a que te refieras con pulsa.togger ¿Será Toggle acaso?

Mira si este ejemplo de código es lo que quieres hacer:
Código:
    list    p=16f877a
    include    p16f877a.inc
    __config    _XT_OSC & _PWRTE_ON & _LVP_OFF & _WDTE_OFF & _BOREN_OFF
    errorlevel    -302

    org    0x00

inicio
    bsf        STATUS,RP0        ; Banco 1
    bcf        OPTION_REG,7    ; Activar pull-ups en puerto B
    movlw    b'11000000'        ; Configurar salidas de puerto D
    movwf    TRISD
    bcf        STATUS,RP0        ; Banco 0
    clrf    PORTD            ; Bits de salida de puerto D en 0

programa
; Checar si los pulsadores en RB0 a RB5 se han presionado (0 = On).
    btfss    PORTB,0
    call    Toggle_1
    btfss    PORTB,1
    call    Toggle_2
    btfss    PORTB,2
    call    Toggle_3
    btfss    PORTB,3
    call    Toggle_4
    btfss    PORTB,4
    call    Toggle_5
    btfss    PORTB,5
    call    Toggle_6
    goto    programa

Toggle_1
    btfsc   PORTB,0            ; Repetir hasta que RB0 sea 0
    goto    $-1                ; No es 0, regresar 1 instrucción
; Hacer toggle (Cambiar de estado un bit)
    xorlw    b'00000001'
    movwf   PORTD            ; Mover W a PORTD
 ; Esperar a que se suelte el pulsador.
    btfss   PORTB,0            ; Repetir hasta que RB0 sea 1
    goto    $-1                ; No es 1, regresar 1 instrucción
    return
; Se repite con los otros bits del puerto B y D....
Toggle_2
    btfsc   PORTB,1
    goto    $-1
    xorlw    b'00000010'
    movwf   PORTD
    btfss   PORTB,1
    goto    $-1
    return

Toggle_3
    btfsc   PORTB,2
    goto    $-1
    xorlw    b'00000100'
    movwf   PORTD
    btfss   PORTB,2
    goto    $-1
    return

Toggle_4
    btfsc   PORTB,3
    goto    $-1
    xorlw    b'00001000'
    movwf   PORTD
    btfss   PORTB,3
    goto    $-1
    return
 
Toggle_5
    btfsc   PORTB,4
    goto    $-1
    xorlw    b'00010000'
    movwf   PORTD
    btfss   PORTB,4
    goto    $-1
    return

Toggle_6
    btfsc   PORTB,5
    goto    $-1
    xorlw    b'00100000'
    movwf   PORTD
    btfss   PORTB,5
    goto    $-1
    return

    end
Saludos.
 
Última edición:
no se mucho de ASM pero aun asi puedo decir que jamas entras a la rutina VERIFICA1, pruba de la siguiente manera

Código:
  VERIFICA
          BTFSC     PULSA1
          GOTO     VERIFICA1        ;salta si es uno
          CALL     Retardo_10ms        ;salta por ser cero
          BTFSS     PULSA1
          GOTO     VERIFICA1
          MOVLW     B'00000001'
          XORWF     PORTC,F
          GOTO     VERIFICA1
                
    VERIFICA1    
          BTFSC    PULSA2
          GOTO    VERIFICA        ;salta si es uno
          CALL    Retardo_10ms                ;salta por ser cero
          BTFSS    PULSA2
          GOTO    VERIFICA
          MOVLW    B'00000010'
          XORWF    PORTC,F
          GOTO    VERIFICA
 
Última edición:
Hola, os doy las gracias a los dos ( D@rkbytes y Fernando123) por su ayuda.
El de D@rkbytes si funciona y es lo que yo quería, pero el de Fernando123 lo siento no funciona, otra vez será. Agradecido a los dos por su interés. Muchas gracias.


Cierto: quería decir toggle, mi inglés no es muy bueno.
 
Última edición por un moderador:
Hola, ya estoy aquí de nuevo sr. D@rkbytes
¿Podría decirme como puedo seguir este código para poner leds con pulsadores momentarios?
Gracias por su tiempo.
 
Última edición por un moderador:
Hola. Perdón, quise decir momentáneo. pulsar/encender, soltar/apagar, pulsar PortA/led en PortC
A continuación del código que me pasó que funciona de fabula.
Agradecido de antemano por su interés en ayudarme. Muchas gracias.
 
Última edición por un moderador:
Hola. Perdón, quise decir momentáneo. pulsar/encender, soltar/apagar, pulsar PortA/led en PortC
A continuación del código que me pasó que funciona de fabula.
Agradecido de antemano por su interés en ayudarme. Muchas gracias.
Eso es más fácil, cambia las rutinas Toggle_X del código anterior por esta otra.

btfsc PORTB,0
goto $-1
bsf PORTD,0
btfss PORTB,0
goto $-1
bcf PORTD,0
return

Nada más ve cambiando los bits del puerto B y D.

Suerte.
 
Hola, Sr. D@rkbytes. Su segunda sugerencia también funciona muy bien, pero el problema que tengo,
es que tengo que utilizar el puerto A como entradas con pulsadores, el puerto C como salidas con LED's y mantener el puerto B como entradas y el puerto D como salidas, pues necesito tener 6 pulsadores Toggle y 6 pulsadores momentáneos.
Este proyecto es para encender las luces de un camión Tamiya desde la emisora.
 
Última edición por un moderador:
Hola, Sr. D@rkbytes. Su segunda sugerencia también funciona muy bien, pero el problema que tengo,
es que tengo que utilizar el puerto A como entradas con pulsadores, el puerto C como salidas con LED's y mantener el puerto B como entradas y el puerto D como salidas, pues necesito tener 6 pulsadores Toggle y 6 pulsadores momentáneos.
Este proyecto es para encender las luces de un camión Tamiya desde la emisora.
Pues no es ningún problema lo que requieres, ya te había dado las rutinas para realizar lo que deseas.
Lo único que debiste hacer, es juntar en el programa esas rutinas y así tener los bloques para los efectos que requieres.

Como este proyecto le puede servir a otras personas para aprender rutinas con pulsadores y LED's, aquí adjunto el proyecto completo con las rutinas que requieres.
Verás que tan solo tenías que agregarlas al programa para que funcionara como lo necesitas.

Suerte.
 

Adjuntos

  • 16F877A Pulsadores y LED's.rar
    22.7 KB · Visitas: 10
  • 16F877A  Pulsadores y LED's SCH.jpg
    16F877A Pulsadores y LED's SCH.jpg
    143.2 KB · Visitas: 21
Última edición:
Hola, sr. D@rkbytes ,Le agradezco su interes por la ayuda prestada,funciona de maravillas,ahora a ponerlo en practica real y una vez lo tenga funcionando ire por el segundo proyecto que sera transmitirlo
por infrarrojo para el remorque.. MUCHAS GRACIAS POR SU AYUDA
PD:Cuando lo tenga listo e instalado en el camion lo subire
 
Hola, sr. D@rkbytes, aqui le pongo un circuito combinado de un proyecto para que usted si puede me pueda ayudar, se trata de el circuito de luces y infrarojo emisor, quisiera saber si es posible de esta manera, mas tarde ya lo pondria al completo con encendido de las luces,emisor y receptor con los servos, bueno al completo del proyecto..
GRACIAS Y SALUDOS

P.D. SI ALGUNO ME PUEDE AYUDAR ACEPTO SU COLABORACION
 

Adjuntos

  • 8 led y 4 infrared.rar
    20.5 KB · Visitas: 7
Última edición:
Te faltó colocar una resistencia en la salida del PIC16F684 hacia el gate de Q1.
No te puedo sugerir más que eso porque no está el código de ese PIC y no se sabe a ciencia cierta que tenga que hacer.

Saludos.
 
Hola, sr. D@rkbytes, aqui le pongo el codigo del pic 16f684 y las resistencias R11,es correcta 10K o abria que cambiarlas.
Gracias por su atencion
 

Adjuntos

  • con resistencias.rar
    41.2 KB · Visitas: 5
  • error correguido.rar
    41.6 KB · Visitas: 7
Última edición:
aquí le pongo el código del pic16f684 y ¿la resistencia R11, es correcta 10K o habría que cambiarla?
Por ser un mosfet que se dispara con una muy baja corriente y a 2.1V, esa resistencia la veo bien.
Para saber que hacía ese código que enviaste, tuve que buscar la información y los archivos faltantes en la web del proyecto.
Todo parece que debe funcionar bien así con la combinación de 4 bits.

Tuve que modificar el archivo de diseño porque tenía errores y también el código porque tenía instrucciones obsoletas.

Te recomiendo que cuando realices tus consultas, trates de explicar con detalles que es lo que deseas hacer y que es lo que hace cada código, porque sin información es difícil entender lo que estás haciendo.

Espero que pronto puedas terminar tu proyecto y lo subas al Foro.

Suerte.
 

Adjuntos

  • error corregido II.rar
    40.6 KB · Visitas: 7
Hola, sr. D@rkbytes, perdon por no poner todo los archivos que usted a tenido que buscar por la Web, no volvera ocurrirme, he localizado los cambios realizado por usted y lo del ( errorlevel -302) no lo entiendo muy bien,.
las otras lineas son
bsf STATUS,RP0
movwf TRISC
bcf STATUS,RP0
por estas lineas, hace tiempo que intente hacer el circuito y no me funcionaba bien y lo deje, bueno no le robo mas tiempo, Saludos y mi agradacimiento,. a continuar con el proyecto que tengo ganas de probarlo en mi camion
 
El número de la directiva ERRORLEVEL -302 le dice al compilador que omita los mensajes de advertencia sobre la selección de bancos.
Es bueno no usarla para poder verificar si tenemos algún error al seleccionar los bancos para los registros.
Pero si estamos seguros que estamos utilizando el banco correcto, no tiene caso ver esos mensajes al compilar.

Estableciendo el bit RP0 del registro STATUS en 1 cambiamos al banco 1 y en 0 cambiamos al banco 0
Pero no es la única combinación de bits porque existen más bancos dependiendo del PIC.

Por ejemplo:

Código:
; Selección del Banco 0
    BCF STATUS,RP0
    BCF STATUS,RP1
; Registro/s a usar

; Selección del Banco 1
    BSF STATUS,RP0
    BCF STATUS,RP1
; Registro/s a usar

; Selección del Banco 2
    BSF STATUS,RP1
    BCF STATUS,RP0
; Registro/s a usar

; Selección del Banco 3
    BSF STATUS,RP1
    BSF STATUS,RP0
; Registro/s a usar
Se suele regresar al banco 0 para poder utilizar los puertos previamente configurados como E/S.

Esos agregados al código fueron porque se usó TRIS y el uso de esa instrucción ya es obsoleta.
No significa que no funcione, se trata de estar al tanto sobre los cambios que MPLAB va teniendo.

Para que entiendas más sobre el lenguaje ensamblador, es necesario que tomes un curso básico. ASM desde 0
También es recomendable leer la hoja de datos del PIC que usarás y los temas de ayuda del MPASM Assembler.

Suerte.
 
Última edición:
Hola, sr. D@rkbytes, ya estoy aqui de nuevo y creo que sera la ultima vez que le molesto pues ya termine mi proyecto y con su ayuda que ha sido muy importante para mi, he tenido que cambiar el 16f57 X 16f883 pero si hay otro de 28 pins que pueda usar para hacer lo mismo y triga menos problemas adelante yo lo cambio y lo compro, aunque tengo varios 883.
Cuando funcione me gustaria subirlo completo para que otros pudieran utilizarlo, Tendria que abrir un muevo tema ?? (proyecto ampliacion emisora 16 canales + 16 infrarrojo) correcto?
GRACIAS DE NUEVO POR SU AYUDA

P.D. Lastima que estemos tan lejos, pero si viene alguna vez a Barcelona hagamelo saber soy Taxista de BCN.





me falta este archivo 16f883 PDF que no puedo subirlo
 

Adjuntos

  • decoder.zip
    16.8 KB · Visitas: 6
  • encoder.zip
    15.9 KB · Visitas: 6
  • nuevo.zip
    121.9 KB · Visitas: 6
  • ORIGINAL TRANSMISOR Y RECEPTOR.zip
    119.6 KB · Visitas: 3
  • varios.zip
    834.1 KB · Visitas: 4
Última edición:
Hola, sr. D@rkbytes, ya estoy aquí de nuevo y creo que sera la ultima vez que le molesto pues ya termine mi proyecto y con su ayuda que ha sido muy importante para mi, he tenido que cambiar el 16f57 X 16f883 pero si hay otro de 28 pins que pueda usar para hacer lo mismo y triga menos problemas adelante yo lo cambio y lo compro, aunque tengo varios 883.
Tal vez te cueste algo de trabajo migrar el código al PIC16F883.
Tiene varias cosas en las que son muy diferentes a los PIC que has estado usando, pero con las hojas de datos y mirando el código lo podrás lograr.
Te recomiendo que sigas usando el PIC para el cual fueron escritas las librerías, pues durante la migración del código podrías tener problemas.
Cuando funcione me gustaría subirlo completo para que otros pudieran utilizarlo.
¿Tendría que abrir un muevo tema? (proyecto ampliación emisora 16 canales + 16 infrarrojo) correcto?
Cuando termines tu proyecto, si gustas puedes crear un tema nuevo explicando con detalles para que funciona y que es lo que hace.
Sé prolijo con los esquemas y con toda la documentación que quieras aportar.
P.D. Lastima que estemos tan lejos, pero si viene alguna vez a Barcelona, hágamelo saber, soy taxista de BCN.
Gracias de nuevo por su ayuda.
Pues si, pero tal vez algún día tenga el gusto de ir a conocer por allá. :)
Estamos para servirte y espero pronto termines tu proyecto.

Saludos y suerte.
 
Hola, el problema de usar el 16f57 es que en Proteus no esta y por eso decidi canviarlo por 883, hay alguna otra forma de poder instalarlo? alguna libreria u otro programa que pueda utilizarlo
 
Atrás
Arriba