Autor Tema: Tecla con doble funcion en 16f877a  (Leído 2472 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado coferni1999

  • PIC10
  • *
  • Mensajes: 19
Tecla con doble funcion en 16f877a
« 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.


Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: Tecla con doble funcion en 16f877a
« Respuesta #1 en: 23 de Julio de 2013, 20:36:09 »
Muy complicado, te dejo otra versión:

Código: [Seleccionar]
'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                          
« Última modificación: 24 de Julio de 2013, 06:05:36 por dogflu66 »
Saludos desde Granada, España.