Autor Tema: LED ON/OFF con un solo pulsador  (Leído 2139 veces)

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

Desconectado Albertuky

  • PIC10
  • *
  • Mensajes: 10
LED ON/OFF con un solo pulsador
« en: 14 de Abril de 2005, 15:57:00 »
wenas amigos!
Acabo de empezar a dar mis primeros pasos con la programacion en ensamblador
y me gustaria saber como puedo acer k con una pulsacion en un pulsador
encienda un led y con otra pulsacion en el mismo pulsador lo apage...
yo lo e intentao pero no me sale...
aki expongo el codigo k ice aver si me ayudais Sonrisa


__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST      P=16F84A
INCLUDE  <P16F84A.INC>
CBLOCK  0x0C
   Contador         ; El contador a visualizar.
ENDC
#DEFINE   Pulsador   PORTA,4   ; Pulsador conectado a RA4.
#DEFINE   Salida0      PORTB,0
On   EQU   b"00000001"         ;Definimos que Led"s se encenderan
Off   EQU   b"00000000"         ;Definimos que Led"s se apagaran
; Source Code **************************************************************************

   ORG   0         ; El programa comienza en la dirección 0.
Inicio
     bsf   STATUS,RP0      ; Acceso al Banco 1.
   clrf   PORTB      ; Estas líneas configuradas como salidas.
   bsf   Pulsador           ; Línea del pulsador configurada como entrada.
   bcf   STATUS,RP0      ; Acceso al Banco 0.
Principal
   btfsc   Pulsador      ; ¿Esta el pulsador presionado?
   goto   Fin         ; ¿No?Pues vuelve a leerlo
   call   Retardo_20ms   ;Retardo para que se estabilizen los rebotes de tension
   btfsc   Pulsador      ; Comprueba si era un rebote
   goto   Fin      ; Era un rebote y sale fuera.
   goto   Estado   ;No era un rebote y pasa a la siguiente funcion
EsperaDejePulsar
   btfss   Pulsador         
   goto   EsperaDejePulsar      ; No. Espera que deje de pulsar.
Fin
   goto   Principal
Estado
   btfsc   PORTB,0
   goto   Function_On
   goto   Function_Off
Function_On   
   movlw   On
   movwf   PORTB
   goto   Fin
Function_Off
   movlw   Off
   movwf   PORTB
   goto   Fin
   INCLUDE <RETARDOS.INC>   ; Subrutinas de retardo.
   END            ; Fin del programa.




Gracias por vuestra ayuda Rebotado

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: LED ON/OFF con un solo pulsador
« Respuesta #1 en: 14 de Abril de 2005, 19:04:00 »
Buenas de nuevo albertuky.

En primer lugar decirte que no es necesario que habras un tema nuevo para consultar otra vez esto. Puedes seguir en el tema anterior, publicando una nueva respuesta para consultarnos tus dudas.

Te señalo en rojo lo que esta mal y luego te comento:

Codigo:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
Contador ; El contador a visualizar.
ENDC
#DEFINE Pulsador PORTA,4 ; Pulsador conectado a RA4.
#DEFINE Salida0 PORTB,0
On EQU b"00000001" ;Definimos que Led"s se encenderan
Off EQU b"00000000" ;Definimos que Led"s se apagaran
; Source Code **************************************************************************

ORG 0 ; El programa comienza en la dirección 0.
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
clrf PORTB ; Estas líneas configuradas como salidas.
bsf Pulsador ; Línea del pulsador configurada como entrada.
bcf STATUS,RP0 ; Acceso al Banco 0.
Principal
btfsc Pulsador ; ¿Esta el pulsador presionado?
goto Fin ; ¿No?Pues vuelve a leerlo
call Retardo_20ms ;Retardo para que se estabilizen los rebotes de tension
btfsc Pulsador ; Comprueba si era un rebote
goto Fin ; Era un rebote y sale fuera.
goto Estado ;No era un rebote y pasa a la siguiente funcion
EsperaDejePulsar
btfss Pulsador
goto EsperaDejePulsar ; No. Espera que deje de pulsar.
Fin goto Principal
Estado
btfsc PORTB,0
goto Function_On
goto Function_Off
Function_On
movlw On
movwf PORTB
goto Fin
Function_Off
movlw Off
movwf PORTB
goto Fin
INCLUDE <RETARDOS.INC> ; Subrutinas de retardo.
END ; Fin del programa.


En primer lugar, la instrucción btfsc PORTB,0, se salta la instrucción siguiente si el PORTB,0 "esta a cero". Por tanto, si el LED estaba apagado salta a Function_Off, y lo "apaga de nuevo". Por eso no te funciona. Cambia la instrucción por la "btfss PORTB,0" y listo.

El fallo del Fin es que no compruebas que el pulsador se deje de pulsar, es decir, nunca saltas a la etiqueta "EsperaDejePulsar". Una solución es poner la etiqueta Fin antes de la etiqueta "EsperaDejePulsar".

El programa sería el siguiente:

Codigo:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
Contador ; El contador a visualizar.
ENDC
#DEFINE Pulsador PORTA,4 ; Pulsador conectado a RA4.
#DEFINE Salida0 PORTB,0
On EQU b"00000001" ;Definimos que Led"s se encenderan
Off EQU b"00000000" ;Definimos que Led"s se apagaran
; Source Code **************************************************************************

ORG 0 ; El programa comienza en la dirección 0.
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
clrf PORTB ; Estas líneas configuradas como salidas.
bsf Pulsador ; Línea del pulsador configurada como entrada.
bcf STATUS,RP0 ; Acceso al Banco 0.
Principal
btfsc Pulsador ; ¿Esta el pulsador presionado?
goto Fin ; ¿No?Pues vuelve a leerlo
call Retardo_20ms ;Retardo para que se estabilizen los rebotes de tension
btfsc Pulsador ; Comprueba si era un rebote
goto Fin ; Era un rebote y sale fuera.
goto Estado ;No era un rebote y pasa a la siguiente funcion
Fin
EsperaDejePulsar
btfss Pulsador
goto EsperaDejePulsar ; No. Espera que deje de pulsar.
goto Principal
Estado
btfss PORTB,0
goto Function_On
goto Function_Off
Function_On
movlw On
movwf PORTB
goto Fin
Function_Off
movlw Off
movwf PORTB
goto Fin
INCLUDE <RETARDOS.INC> ; Subrutinas de retardo.
END ; Fin del programa.


A ver si ahora ahy suerteSonrisa Gigante


 

anything