Autor Tema: Ayuda ¿Como encender y apagar un led con un solo pulsador?  (Leído 8459 veces)

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

Desconectado Oscarinv

  • PIC10
  • *
  • Mensajes: 8
Ayuda ¿Como encender y apagar un led con un solo pulsador?
« en: 28 de Julio de 2009, 21:51:47 »
Código: [Seleccionar]
;*Este programa Enciende un LED conectado a RA5 cuando se presiona un botón
;*conectado a RA0 y lo apaga cuando se presiona presiona nuevamente el
;*mismo botón y a sí sucesivamente.
;**************************************************************************
include “p16f877.inc”
org 0x0000 ;Inicia en el vector de reset
;Inicialización del puerto A:
CLRF STATUS ;Selecciona Banco 0
CLRF PORTA ;Inicializa latches de datos de PORTA
BSF STATUS,RP0 ;Selecciona Banco 1
MOVLW 0x06 ;Configura todas las patitas de A
MOVWF ADCON1 ;como digitales
MOVLW 0x1F ;configura todas las patitas de A como salidas
MOVWF TRISA ;y RA5 como salida
BCF STATUS,RP0 ;regresa al banco 0
checa BTFSS PORTA,0 ;checa si RA0=1
GOTO checa ;si RA=0 checa de nuevo
CALL d20ms ;si RA0=1 espera 20 miliseg. A que pase el rebote
chec1 BTFSS PORTA,0 ;checa nuevamente si RA0=1
GOTO checa ;si RA1=0 falsa alarma, vuelve a checar
MOVLWF PORTA,0x20 ;si RA1=1 señal válida; carga máscara en W
XORWF PORTA,1 ;conmuta estado del LED
GOTO checa ;repite
end

El código es de un pdf que encontre en internet, lo que no entiendo es como funciona esta parte (¿Esta mal escrito?, por que MOVLWF no es una instrucción):
MOVLWF PORTA,0x20 ;si RA1=1 señal válida; carga máscara en W
XORWF PORTA,1 ;conmuta estado del LED

¿O alguien me puede explicar como se prendería/apagaría un led utilizando un solo botón? Espero que alguien me pueda ayudar, de antemano gracias.

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Ayuda ¿Como encender y apagar un led con un solo pulsador?
« Respuesta #1 en: 28 de Julio de 2009, 23:13:52 »


En caso de que tu boton tenga resistencia de pull-down y al presionarlo entregué un 1 lógico.

Código: [Seleccionar]
revisa BTFSS   PORTA,0 ; Boton presionado?
goto      revisa ;regresa a revisar si se presiono el boton

;CALL retardo_ms ;llama subrutina retardo
     
revisa2 BTFSS   PORTA,0 ; Aseguramos que se haya presionado
goto    revisa ; regresa a preguntar       
     
           
      MOVLW b'00100000' ;cargamos valor 0x20H para realizar mascara
        XORWF PORTA,F
       
        goto revisa


XOR
 AB Y
 00  0
 01  1
 10  1
 11  0

Al inicio RA5=0 y al hacer la XOR  0x20  es asi

XOR      00100000
PORTA   00000000
------------------
PORTA   00100000

XOR      00100000
PORTA   00100000
------------------
PORTA   00000000

Saludos!

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Ayuda ¿Como encender y apagar un led con un solo pulsador?
« Respuesta #2 en: 29 de Julio de 2009, 21:40:16 »
Saludos

Yo haria lo siguiente

Citar
empieza
clrf        contador
btfss      porta,0
goto       $-1
call        retardo                          ; rutina de milisegundos
btfsc      porta,0
goto       $-1
incf        contador,1                     ; incremento contador en 1
movf      contador,0                     ; paso a w
xorlw      d'1'
btfss       status,2                        ; hago una comparacion para saber si apago o prendo
goto       apaga
bsf         porta,5
goto       $-c

apaga
bcf        porta,5
goto      empieza
end

La verdad es más largo pero me ha funcionado siempre muy bien la verdad enmascarar siempre me saca la rabia :D :D.

Un saludo desde Pereira - Colombia
Un saludo desde Pereira - Colombia


 

anything