Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

28/09/2015 #1


Buenos días.
Soy nuevo en esto de la programación y necesito crear un programa cuyo funcionamiento sea el siguiente:
Cuando pulsas una vez se enciende el primer LED 2 segundos y se apaga.
Cuando vuelves a pulsar se enciende 2 segundos el segundo LED.
El LED se apaga volviendo otra vez a repetirse la acción.

Estoy usando un PIC16F84A.
Éste es el programa que yo he hecho, seguramente se podrá hacer más fácil y que funcione.
Código:
trisb=%11111111
 
boton var portA.1 
boton2 var portA.2
portb.0=0
portb.1=0
portb.2 =0

pulsar
if boton=1 + boton2=0   then led1

goto pulsar

 led1
if boton=1  + boton2=0 then led1
pause 500
high portb.0                  
pause 2000
low portb.0
pause 3000
high portb.2
goto led2

led2
if boton=boton=1 + boton2=1   then led2
goto pulsar
end
if boton=boton=1 + boton2=1   then led2
pause 500
high portb.1 
pause 2000
low portb.1 
pause 3000
low portb.2
goto pulsar
Gracias.

---------- Actualizado después de 3 minutos ----------

Hola.
Adjunto esquema por si ayuda.

Gracias.
28/09/2015 #2


¿No cerraste ningún if con el endif?
Sólo prueba con ponerlos así, por ejemplo:

botones:
if boton1=1 then
led1
end if

if boton2=1 then
led2
end if

goto botones

Así el ciclo es infinito. Saludos.
28/09/2015 #3

Avatar de papirrin

No se pone así:
if boton=1 + boton2=0 then led1

Se pone así:
if boton=1 and boton2=0 then led1

Y si pones la sentencia del THEN en la misma línea, no es necesario el ENDIF

El flujo está medio chistoso pero ese no lo revisé XD. (Hay un END a mitad del código que creo está mal.)
28/09/2015 #4


Hola...Debes indicar que compilador Basic usas(hay varios y la sintaxis no es igual para todos).
Aqui una de las mil maneras de hacer lo que pretendías en Proton Basic

Código PHP:
'****************************************************************
'
*  Name    Boton.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'
*  Notice  Copyright (c2015 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'
*  Date    28/09/2015                                        *
'*  Version : 1.0                                               *
'
*  Notes   :                                                   *
'*          :                                                   *
'
****************************************************************
Device 16F84A ' Tipo de Microcontrolador
Config  OSC_XT, WDT_OFF, CP_OFF, PWRTE_ON ' 
Fusibles usados
Declare Xtal 4  ' Frecuencia del Oscilador
'
********** Declaracion de simbolos a usar************* 
Symbol Pulsador PORTA.1 ' Pulsador
Symbol Indicador1 = PORTB.0  ' 
Led 1
Symbol Indicador2 
PORTB.1 ' Led 2
Dim Contador As Bit ' 
Variable del estado de encendido de los indicadores
Contador 
0  ' Limpio la variable
'
**********Definicion de las entradas/salidas**********
TRISB 0  'Puerto B como salida
TRISA = 255 ' 
Puerto A como entrada

PORTB 
'Limpio el puerto B

Ciclo: '
Programa principal
        
       
If Pulsador 0 Then  ' Si el pulsador es pulsado
            If Contador = 0 Then  ' 
Si el contador esta en 0
                Contador 
1    ' Cambio el estado de contador para saber que indicador prender
                High Indicador1  ' 
Enciendo el Indicador1
                DelayMS 2000   
' Espero 2 segundos
                Low Indicador1  ' 
Apago el Indicado1
            
Else    ' Si el contador ya fue incrementado
                Contador = 0 ' 
Cambio el estado del contador para saber que indicador prender
                High Indicador2  
' Enciendo el segundo Indicador2
                DelayMS 2000     ' 
Espero 2 segundos
                Low Indicador2   
' Apago el Indicadr2
           EndIf ' 
Fin de la comparacion
       
EndIf   ' Fin de logica encendido
       DelayMS 100  ' 
espero 100 mili segundos
       
GoTo Ciclo  ' Comienzo todo nuevamente
       
 End  ' 
Fin!!!!! 
Adjunto la simulación y el archivo de Proteus(cosa que también deberías incluir al hacer una consulta).
Saludos.

Ric.
Archivos Adjuntos
Tipo de Archivo: zip Boton.zip (7,6 KB (Kilobytes), 3 visitas)
28/09/2015 #5


Buenas tardes.

Primero, gracias a todos los que habéis contribuido.
Como he comentado, no tengo experiencia en este campo, por lo que hay detalles que se me escapan.
Siempre vienen bien las puntualizaciones.

Uso MicroCode Studio Plus.

Un Saludo.
Archivos Adjuntos
Tipo de Archivo: rar p2.rar (17,6 KB (Kilobytes), 6 visitas)
28/09/2015 #6
Moderador

Avatar de D@rkbytes

Si es cómo yo lo entendí, lo haría de ésta manera:
Código PHP:
;*******************************************************************************
Device PIC16F84A    Microcontrolador utilizado
Palabra de configuración:
Device XT_OSC,WDT_OFF,PWRT_ON
;*******************************************************************************
Define OSC 4                Definir que se trabajará con 4MHz.

Declaración de variables:
Pulsado Var Bit             Bandera de estado

Inicio
:
    
TRISB = %11111100       RB1 y RB0 como salidas.
    
PORTB TRISB           RB1 y RB0 en 0 al iniciar.

    
Pulsado 0

Programa
:
    If 
PORTA.1 And Pulsado 0 Then
        Pulsado 
1
        PORTB.1 
1
        Pause 2000
        PORTB.1 
0
        
While PORTA.1 1Wend Esperar hasta que se suelte el pulsador.
    ElseIf 
PORTA.1 And Pulsado 1 Then
        Pulsado 
0
        PORTB.0 
1
        Pause 2000
        PORTB.0 
0
        
While PORTA.1 1Wend Esperar hasta que se suelte el pulsador.
    EndIf
 
    GoTo 
Programa

    End 
29/09/2015 #7


gracias lo he intentado compilar y me da error linea ElseIf PORTA.1 = 1 And Pulsado = 1 Then
el que mando ricbevi funciona aunque agradezco los aportes dan a mi entender distintas versiones de como hacer un mismo programa y siempre ayuda pues pruebas si funcionan y tantosi lo hacen como si no
intentas comprenderlos
¿en linea a la que me refiero antes el fallo puede estar en PORTA.1?
Gracias a todos
29/09/2015 #8
Moderador

Avatar de D@rkbytes

Entonces debe ser por la versión de PICBasic del compilador que usas.
Yo lo escribí con MicroCode Studio Plus versión: 3.0.0.5 y PICBasic Pro versión 2.60C

Puedes corregir ese error eliminando el ElseIf, de esta forma:
Código PHP:
Programa:
    If 
PORTA.1 And Pulsado 0 Then
        Pulsado 
1
        PORTB.1 
1
        Pause 2000
        PORTB.1 
0
        
While PORTA.1 1Wend Esperar hasta que se suelte el pulsador.
    Else
        If 
PORTA.1 And Pulsado 1 Then
            Pulsado 
0
            PORTB.0 
1
            Pause 2000
            PORTB.0 
0
            
While PORTA.1 1Wend Esperar hasta que se suelte el pulsador.
        EndIf
    EndIf
 
    GoTo 
Programa 
29/09/2015 #9


hola
asi si lo compila adjunto simulacion por si quiere verla alguien e imagen del microcode
Un saludo
Imágenes Adjuntas
Tipo de Archivo: jpg microCode.jpg (60,9 KB (Kilobytes), 9 visitas)
Archivos Adjuntos
Tipo de Archivo: rar Prueba.rar (17,6 KB (Kilobytes), 4 visitas)
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.