TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: morfeus en 20 de Agosto de 2005, 08:52: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:
Tu problema está básicamente aquí:
LOOP1:
high led1
PAUSE 200
LOW led1 "PARPADEA LED1
pause 200
GOTO LOOP0
Al final del parpadeo del LED1 lo mandas de nuevo a LOOP0, antes deberías ver si hay algún otro led que necesites apagar. (Lo mismo te pasará si no arreglas el loop2).
Suerte...
-
Hola,
Gracias por tu observacion lo intentare de nuevo.
Morfeus
-
Hola SavageChicken,
Pues te comento que hice lo que dijiste pero nada, se que me hace falta algo pero no se que es. Quiero que cuando prenda el circuito me muestre en los led cuantos suiches estan en 1 de manera secuencial.
En este momento si por ejemplo sw1 esta en 1 lo muestra correctamente, pero si sw1 y sw2 estan en 1 no me muestra nada ni mucho menos si los tres sw estan en 1.Dame una ayudita por favor.
Morfeus
http://www.electronicabin.com