TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: morfeus en 19 de Agosto de 2005, 20:58:00
-
Hola amigos,
Es la primera vez que participo en este foro y necesito de sus experiencias
en PICBASIC PRO ya que hasta ahora comienzo y me ha parecido fabuloso este
programa. Bueno estoy intentando hacer una pequeña alarma con un pic16f84
y les describo lo que hasta el momento hace.
Tengo tres leds PORTB.0, PORTB.1, PORTB.2 y cada uno tiene asignado un tiempo
de temporización para PORTB.0 (3 SEGUNDOS), PORTB.1 (6 SEGUNDOS), PORTB.2 (6 SEGUNDOS).
La temporizacion de cada uno depende de si los SW estan en 1, cuando el circuito se
energiza pasa directamente a LOOP, pero si detecta que alguno de los puertos anteriores
se encuentra en 1 lo indica y el led parpadea cada 200 ms, aca esta el primer problema ya que
si SW1 esta en 1 comienza a parpadear LED1 pero si SW1 y SW2 estan en 1 el segundo ni
el tercer LED se encienden y la idea es que cada uno funcione por separado.
Bueno esto es lo que he hecho hasta el momento, pero quiero lo siguiente:
Un led en PORTB.7 que se encienda cuando termine la temporizacion de cualquier led, si al
encender el circuito estan todos los SW a l a medida que se pongan en cero cada uno se vaya
apagando.
Lo que pretendo es que los leds muestren el estado abierto o cerrado de forma independiente
al energizar el circuito.
Si alguien puede darme una guia de como hacerlo se lo agradecería.
Saludos
Morfeus
Este es el código
"****************************************************************
"* Name : ALARMA.BAS *
"* Author : [select VIEW...EDITOR OPTIONS] *
"* Notice : Copyright (c) 2005 [select VIEW...EDITOR OPTIONS] *
"* : All Rights Reserved *
"* Date : 16/08/05 *
"* Version : 1.0 *
"* Notes : UTILIZA EL PIC16F84 *
"* : *
"****************************************************************
LED1 var PortB.0 "PIN 6
LED2 var PortB.1 "PIN 7
LED3 var PortB.2 "PIN 8
SW1 var PortA.0 "PIN 17
SW2 var PortA.1 "PIN 18
SW3 var PortA.2 "PIN 1
low LED1
LOW LED2
LOW LED3
LOW SW1
LOW SW2
LOW SW3
TRISA = %11111111 "PUERTO A COMO ENTRADAS
TRISB = %00000000 "PUERTO B COMO SALIDAS
PORTB = 0
LOOP0:
IF SW1 = 0 AND SW2 = 0 AND SW3 = 0 THEN LOOP
IF SW1 = 1 AND SW2 = 0 AND SW3 = 0 THEN LOOP1
IF SW1 = 1 AND SW2 = 1 AND SW3 = 0 THEN LOOP2
IF SW1 = 1 AND SW2 = 1 AND SW3 = 1 THEN LOOP3
LOOP:
IF SW1 = 1 THEN
PAUSE 3000
high led1 "PERIMETRO 1
ENDif
IF SW2 = 1 THEN
PAUSE 6000
high led2 "PERIMETRO 2
ENDIF
IF SW3 = 1 THEN
PAUSE 8000
high led3 "PERIMETRO 3
ENDIF
GOTO LOOP
LOOP1:
high led1
PAUSE 200
LOW led1 "PARPADEA LED1
pause 200
GOTO LOOP0
LOOP2:
high led2
pause 200
low led2
pause 200 "PARPADEA LED2
goto LOOP0
LOOP3:
high led3
pause 200
low led3
pause 200 "PARPADEA LED3
GOTO LOOP0
-
Hola:
Espero haberte entendido bien... trata haciendo esto:
LOOP0:
IF SW1 = 0 AND SW2 = 0 AND SW3 = 0 THEN LOOP
IF SW1 = 1 AND SW2 = 0 AND SW3 = 0 THEN LOOP1
IF SW1 = 1 AND SW2 = 1 AND SW3 = 0 THEN LOOP2
IF SW1 = 1 AND SW2 = 1 AND SW3 = 1 THEN LOOP3
goto loop0
tu no tienes esto goto loop0 esto es para que te este preguntando siempre por las condiciones que tu describes o sino continua a la siguiente linea que es esta:
LOOP:
IF SW1 = 1 THEN
PAUSE 3000
high led1 "PERIMETRO 1
ENDif
y basta que sw1 este en uno para que ejecute esa accion.... a lo que me refiero o mejor dicho a lo que entendi lo que deverias hacer es que vaya al loop determinado solamente cuando se te den las condiciones que estarian dentro del LOOP0....
Espero hacerme entender...
-
Hola,
Gracias por tu ayuda, voy a hacer el cambio para ver como funciona.
Saludos
Morfeus