Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

24/05/2011 #1

Avatar de ema95

ayuda con programa pic 16f628a
hola amigos. bueno la cuestion es asi: armé un circuito y programa con pic 16f628a, cuya funcion es mas o menos como la de la luz trasera de una bici. El circuito funciona de maravilla. Lo que sucede es que ahora quiero que apretando un boton en una entrada PORTA tambien me cambie la velocidad con la que funciona, es decir, si yo apreto una vez tiene una velocidad, si yo apreto otra vez, tiene otra, y si vuelvo a apretar tien la primer velocidad. se entiende?

Les paso el circuito y el codigo en basic (con el pic simulator IDE).

Código:
AllDigital
TRISB = 0  'DEFINO ENTRADAS Y SALIDAS
TRISA = 1
Dim x As Byte

x = 0

apaga:  'RUTINA PARA LOS LEDS APAGADOS
While Not PORTA.0
PORTB = 0
WaitMs 50
If PORTA.0 Then Gosub secuencia  'LEE SI PORTA.0 = 1, DE SER ASI VA A SUB SECUENCIA Y LEE EL CASO, DE OTRO MODO SIGUE EJECUTANDO APAGA
Goto apaga


estatico:  'RUTINA PARA LOS LEDS TODOS PRENDIDOS QUIETOS
While Not PORTA.0
PORTB = 255
WaitMs 50
If PORTA.0 Then Gosub secuencia  'LEE SI PORTA.0 = 1, DE SER ASI VA A SUB SECUENCIA Y LEE EL CASO, DE OTRO MODO SIGUE EJECUTANDO ESTATICO
Wend
Goto estatico


parpadeo:  'RUTINA PARA LOS LEDS TODOS PRENDIDOS PERO PARPADEANDO
While Not PORTA.0
PORTB = 255
WaitMs 50
PORTB = 0
WaitMs 50
If PORTA.0 Then Gosub secuencia  'LEE SI PORTA.0 = 1, DE SER ASI VA A SUB SECUENCIA Y LEE EL CASO, DE OTRO MODO SIGUE EJECUTANDO PARPADEO
Wend
Goto parpadeo


derecha:  'RUTINA PARA QUE SE DESPLAZE DE UN LED HACIA A LA DERECHA
While Not PORTA.0
PORTB = ShiftRight(PORTB, 1)
WaitMs 50
If PORTB.0 Then
PORTB = 128
WaitMs 50
Endif
If PORTA.0 Then Gosub secuencia  'LEE SI PORTA.0 = 1, DE SER ASI VA A SUB SECUENCIA Y LEE EL CASO, DE OTRO MODO SIGUE EJECUTANDO DERECHA
Wend
Goto derecha


izquierda:  'RUTINA PARA QUE SE DESPLAZE DE UN LED HACIA LA IZQUIERDA
While Not PORTA.0
PORTB = ShiftLeft(PORTB, 1)
WaitMs 50
If PORTB.7 Then
PORTB = 1
WaitMs 50
Endif
If PORTA.0 Then Gosub secuencia  'LEE SI PORTA.0 = 1, DE SER ASI VA A SUB SECUENCIA Y LEE EL CASO, DE OTRO MODO SIGUE EJECUTANDO IZQUIERDA
Wend
Goto izquierda

End                                               

secuencia:  'SUBRUTINA DONDE PONGO LOS CASOS DE LOS BOTONES
If x < 4 Then
x = x + 1
Select Case x

Case 1  'DONDE X = 1 VA A ESTATICO
WaitMs 50
Goto estatico

Case 2  'DONDE X = 2 VA A PARPADEO
WaitMs 50
Goto parpadeo

Case 3  'DONDE X = 3 VA A DERECHA
PORTB = 128
WaitMs 50
Goto derecha

Case 4  'DONDE X = 4 VA A IZQUIERDA
PORTB = 1
WaitMs 50
Goto izquierda

EndSelect

Else  'X = 0 VA A APAGA
x = 0
Goto apaga

Endif

Return


PARA VER MAS GRANDE



gracias
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

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