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).
PARA VER MAS GRANDE
gracias
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
Última edición por un moderador: