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

dibujoqnq.jpg


PARA VER MAS GRANDE



gracias
 
Última edición por un moderador:
Atrás
Arriba