TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: coferni1999 en 22 de Julio de 2013, 15:42:56
-
Hola, estoy comenzando con los pic, y voy practicando diferentes cositas para ir aprandiendo.
En este caso estoy queriendo hacer que una tecla tengo dos funciones, explico:
1ra: cuando se presiona y se suelta en un toque, en este caso enciende y apaga el led en el port a.0.
2da: cuando se presiona por varios segundos y luego se suelta, encende y apaga un led port a.1.
Este es el programa que realice:
' 2 funciones mismo pulsador PIC16F877
define osc 4
led1 var porta.0
led2 var porta.1
pulsador var portb.0
cont var byte
cont2 var byte
tiempo var byte
trisb.0=1
trisa.0=0
trisa.1=0
led1=0
led2=0
cont=0
cont2=0
inicio:
pause 40
tiempo=0
IF pulsador=0 then
while pulsador=0
wend
endif
if pulsador =1 then
while pulsador=1
tiempo=tiempo+1
wend
endif
if tiempo > 60 then goto segfun
cont=cont+1
if cont > 1 then cont=0
'endif
select case cont
case 0
low led1
case 1
high led1
end select
goto inicio
segfun:
cont2=cont2+1
if cont2 >1 then cont2=0
select case cont2
case 0
low led2
tiempo=0
case 1
high led2
tiempo=0
end select
goto inicio
end
Tal cual esta aca funciona perfecta la funcion 1ra, pero nunca pasa a la segunda y no entiendo porque ???
Si alguien quiere y puede tirarme alguna idea
De todas formas sigo probando algunas otras alternativas
Saludos.
-
Muy complicado, te dejo otra versión:
'2 funciones mismo pulsador PIC16F877
Define CONFIG = 0x3971
Define CLOCK_FREQUENCY = 4 'define osc 4
AllDigital 'Como puertos I/O
TRISA = 0x00
TRISB = 0x00
TRISC = 0x00
TRISD = 0x00
TRISE = 0x00
TRISB.0 = 1
TRISA.0 = 0
TRISA.1 = 0
Symbol led1 = PORTA.0 'led1 var PORTA.0
Symbol led2 = PORTA.1 'led2 var PORTA.1
Symbol pulsador = PORTB.0 'pulsador var PORTB.0
Dim cont As Byte 'cont var Byte
Dim cont2 As Byte 'cont2 var Byte
Dim tiempo As Word 'tiempo var Byte
Dim flag As Byte
led1 = 0
led2 = 0
cont = 0
cont2 = 0
flag = 0
main:
tiempo = 0
flag = 0
While pulsador = 1
WaitMs 1 'pause
If tiempo < 0xffff Then tiempo = tiempo + 1
Wend
If tiempo > 0 And tiempo <= 300 Then Gosub flashled1
If tiempo > 300 Then Gosub flashled2
Goto main
End
flashled1:
led1 = 1
WaitMs 300
led1 = 0
WaitMs 300
Return
flashled2:
led2 = 1
WaitMs 300
led2 = 0
WaitMs 300
Return