TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: jaja_orgus en 26 de Agosto de 2009, 18:56:47
-
buenas soy totalmente nuevo en este foro y en el tema de los microcontroladores soy programador pero siempre quise incurcionar en este tema, despues de haber leido material y visto algunos videotutoriales me puse a programar un pequeñisimo proyecto para practicar, la cuestion es que quiero ensender un led por el rb1 a trabez de un pulsador desde el rb0 osea presiono una vez el pulsador y el led tendria que ensenderse, lo suelto y lo vulvo a presionar y tendria que apagarse. pero la cuestion es que lo simulo con el proteus cuando presiono el pulsador el led se enciendo pero cuando lo vuelvo a presionar no se apaga, a continuación le paso el codigo, estoy seguro de que debe haber una forma mas facil de hacer esto pero me gustaria saber en que estoy fallando en este codigo. agradeceria cualquier ayuda.
LIST p=16F84A
#include<p16f84a.inc>
RADIX HEX
ORG 0
GOTO INICIO
ORG 5
INICIO BSF STATUS, RP0
MOVLW B'00000001'
MOVWF TRISB
BCF STATUS, RP0
CLRF PORTB
ANTPULSADOR BTFSS PORTB, 0 ; COMPRUEBA SI EL BOTON SE PRESIONO
GOTO LED_ON_OFF ; SI SE PRESIONO SE VA A LED_ON_OFF
GOTO ANTPULSADOR ; SI NO VUELVE A ANTPULSADOR
LED_ON_OFF BTFSS PORTB, 1 ; COMPRUEVA SI EL LED YA ESTA PRENDIDO
GOTO LED_ON ; SI ESTA APAGADO SE VA A LED_ON
GOTO LED_OFF ; SI ESTA PRENDIDO SE VA A LED_OFF
LED_OFF BCF PORTB, 1 ; APAGA EL LED
GOTO CONTINUAR ; VA A CONTINUAR
LED_ON BSF PORTB, 1 ; ENCIENDE EL LED
GOTO CONTINUAR ; VA A CONTINUAR
CONTINUAR BTFSS PORTB, 0 ; COMPRUEVA SI EL BOTON SIGUE APRETADO
GOTO CONTINUAR ; VUELVEA A CONTINUAR HASTA QUE EL BOTON SE SUELTE
GOTO ANTPULSADOR ; SI EL BOTON SE SOLTO EMPIEZA TODO DE VUELTA.
END
-
Hola JJ orgus: Por las dudas, tienes el WDT desactivado?
-
Mejor después de la comprobación ponle un retardo y vuelve a testear el pulsador a ver si así te funciona, o bloquea el PIC despues de hacer alguna acción hasta que el pulsador marque un 0. Esto es debido a que el PIC ejecuta millones de instrucciones por segundo, si tu tienes pulsado el pulsador todo el rato, el led se ira encendiendo y apagando, aunque no sea perceptible en tu vista.
Salu2.
-
Hola orgus, mas alla de las recomendaciones que te dieron, el codigo funciona(si bien cuando hagas programas mas elaborados tendras que colocar un retardo si o si, sino nunca podras detectar la pulsacion). Copie el codigo y, cuando pulsas el boton se enciende, luego debes soltarlo, para que detecte el estado bajo, y volver a pulsarlo y el led se apaga tal como tu deseas.
Saludos.
Nico.
-
muchas gracias a todos en voy a probar poniendole un retardo de 1 milisegundo a ver que pasa y luego les cuento.
-
ya solucioné el problema aparentemente era el simulador proteus, lo simule con el workbench multisim y andubo de 10 con el retardo y sin el retardo tambien, gracias.