Curso de programación de PIC en PICBasic Pro

Hola amigos hace poco les comente que recien empezaba con el pic 12f675. Ahora por les pediria me ayuden para hacer un timer con este pic los que he visto en el foro son con el 16f84 no se si necesita otra configuracion por el tema del prescaler y las interrupciones.

Agradezco de antemano por su ayuda
 
me gustaria colocarle un teclado matricail de 3*4 y si la programacion la tengo que modificar

:unsure: no te entiendo... que necesitas concretamente? Por que ese ejemplo esta completo... no es muy dificil tranformarlo a 3x4... Intentaste tratar de entender como hace la lectura del teclado o solo te interesa copiar, pegar, grabar y energizar? :rolleyes:
 
hola a todos, de nuevo yo por aquí molestando a ver sí alguien me puede ayudar, ya hace algún tiempo estoy haciendo un temporizador con un 16f84a, bueno ya lo termine pero ahora quiero hacer una versión en el programa donde me de un mensaje al terminar el conteo pero al escribir el nuevo basic solo obtengo errores aquí subo los archivos a ver sí por favor me ayudar, sí ven en los archivos el basic tempo3 funciona normal pero el basic tempo4 funciona super mal, a ver sí me pueden ayudar y muchas gracias de antemano
 

Adjuntos

  • ejemplo temp.rar
    44.7 KB · Visitas: 89
Última edición:
Hola ferdy... lo de la visualizacion del DISPLAY ya te lo corregi... estabas reiniciando la pantalla cada vez que entraba en la subrutina de imprimir.... fijate como te lo modifique:

Código:
;CONFIGURACIÓN PIC
 @ DEVICE pic16F84A
 @ DEVICE WDT_ON              
 @ DEVICE PWRT_ON                   
 @ DEVICE PROTECT_OFF      
 @ DEVICE xt_osc  
define osc 4 
;REGISTROS LCD
Define    LCD_DREG    PORTB
Define    LCD_DBIT    0
Define    LCD_RSREG    PORTB
Define    LCD_RSBIT    4
Define    LCD_EREG    PORTB
Define    LCD_EBIT    5

Symbol Minutos = PORTA.1    ; AJUSTE MINUTOS
Symbol Segundos = PORTA.2   ; AJUSTE SEGUNDOS
symbol Out = PORTB.7        ; SALIDA CONTROL 
symbol START = PORTA.3      ; INICIO CONTEO
SYMBOL STOP_ = PORTB.6      ; DETIENE CONTEO

;VARIABLES
Pulsos VAR byte 
Mts VAR byte 
Sds VAR byte 
Delay VAR byte
CLEAR
 
TRISB = %01000000 
TRISA = %00011111 

PAUSE 500 

Mts = 03
Sds = 00
pulsos = 0

OPTION_REG = %00000101 ; prescaler = 64
On INTERRUPT GOTO ISR ; IR A RUTINA ISR 
INTCON = %10100000 


;INCIO DEL PROGRAMA
LOOP:
;BOTÓN START
IF START = 0 THEN ; si el boton start es presionado ejecuta lo siguiente
TMR0 = 0 ;Inicializa refgistro TMR0 
INTCON = $A0 ;habilita el  timer interrupt
gosub Retardo
LCDOUT $FE, 1           ; ESTA ES LA MODIFICACION... LA INSTRUCCION "$FE, 1" LO PUSE ACÁ
ENDIF 

;BOTÓN STOP
IF STOP_ = 0 THEN ; si el boton stop es presionado ejecuta lo siguiente
INTCON = 0 ;desabilita el  timer 
gosub Retardo
ENDIF 

;BOTÓN PROGRAMAR LOS MINUTOS
IF Minutos = 0 THEN
Mts = Mts - 1
gosub retardo
ENDIF

;BOTÓN PROGRAMAR LOS SEGUNDOS
if Segundos = 0 then
Sds = Sds - 1
gosub retardo
ENDIF

'*****************************
IF Mts = 60 AND Sds = 60 THEN' 
out = 1                      '
gosub mensaje_fin             '
else                         '
out = 0                      '
gosub retro
gosub MENSAJE1                '
ENDIF                        '
'*****************************
              
GOTO LOOP

;ANTIRREBOTE
Retardo:
FOR Delay = 1 To 200
Pause 1 
NEXT Delay 
RETURN

;EJECUCION DE UN SEGUNDO
DISABLE
ISR:
IF Mts < 0 OR Sds > 0 THEN 'OJO sí se cambia esta función no funciona el conteo
pulsos = pulsos + 1
IF pulsos < 61 THEN NoUpdate
endif

;TIEMPO
Retro:
pulsos = 0

IF Sds = 0 AND Mts => 0 then
Mts = Mts - 1
Sds = 61
endif
if mts > 60 then mts = 60       
if mts = 0 then mts = 0

'ALARMA
IF Mts = 60 AND Sds = 60 THEN
pulsos = pulsos
INTCON = 0 ;desabilita el  timer 
else
TMR0 = 0 ;Inicializa registro TMR0 
INTCON = $A0 ;habilita el  timer interrupt
Sds = Sds - 1
endif                                              
return

mensaje1:
; LA INSTRUCCION LCDOUT $FE, 1  TE LA SAQUE DE ACÁ
LCDOUT $FE, 2
Lcdout "Tiempo de espera "  
LCDOUT $FE,$C4,DEC2 Mts, ":",DEC2 Sds
LcdOut $fe,$C16, 0
LCDOUT $fe,$40,$00,$0A,$0A,$00,$04,$11,$0E,$00 'aqui tenemos la carita feliz :)
return

mensaje_fin:
; LA INSTRUCCION LCDOUT $FE, 1  TE LA SAQUE DE ACÁ
LCDOUT $FE, 2
Lcdout " <<FINALIZADO>> "  
LCDOUT $FE,$C1,"  PULSE CLEAR"
return

NoUpdate:
INTCON.2 = 0 
Resume                                                                              
ENABLE 
END
END

Despues si me hago de un tiempo, le presto un poco mas de atencion y veo que hace que no pare el contador...saludos
 
Última edición:
Hola...consulta; Lubeck, Reimy, Mecadatros o algun otro groso puede ser que publicaron un ejemplo de control de tarjeta de memoria SD con un 16F877 en este mismo topico? lo busque en casi las 116 paginas y no vi nada... no se por que tengo dentro de la cabeza que algunbo de ellos subio algo... Si me pueden dar una mano y refernciarme el link que me parecio ver, se los agradezco...
 
</SPAN>
Hola ferdy... lo de la visualizacion del DISPLAY ya te lo corregi... estabas reiniciando la pantalla cada vez que entraba en la subrutina de imprimir.... fijate como te lo modifique:

Código:
;CONFIGURACIÓN PIC
 @ DEVICE pic16F84A
 @ DEVICE WDT_ON              
 @ DEVICE PWRT_ON                   
 @ DEVICE PROTECT_OFF      
 @ DEVICE xt_osc  
define osc 4 
;REGISTROS LCD
Define    LCD_DREG    PORTB
Define    LCD_DBIT    0
Define    LCD_RSREG    PORTB
Define    LCD_RSBIT    4
Define    LCD_EREG    PORTB
Define    LCD_EBIT    5
 
Symbol Minutos = PORTA.1    ; AJUSTE MINUTOS
Symbol Segundos = PORTA.2   ; AJUSTE SEGUNDOS
symbol Out = PORTB.7        ; SALIDA CONTROL 
symbol START = PORTA.3      ; INICIO CONTEO
SYMBOL STOP_ = PORTB.6      ; DETIENE CONTEO
 
;VARIABLES
Pulsos VAR byte 
Mts VAR byte 
Sds VAR byte 
Delay VAR byte
CLEAR
 
TRISB = %01000000 
TRISA = %00011111 
 
PAUSE 500 
 
Mts = 03
Sds = 00
pulsos = 0
 
OPTION_REG = %00000101 ; prescaler = 64
On INTERRUPT GOTO ISR ; IR A RUTINA ISR 
INTCON = %10100000 
 
 
;INCIO DEL PROGRAMA
LOOP:
;BOTÓN START
IF START = 0 THEN ; si el boton start es presionado ejecuta lo siguiente
TMR0 = 0 ;Inicializa refgistro TMR0 
INTCON = $A0 ;habilita el  timer interrupt
gosub Retardo
LCDOUT $FE, 1           ; ESTA ES LA MODIFICACION... LA INSTRUCCION "$FE, 1" LO PUSE ACÁ
ENDIF 
 
;BOTÓN STOP
IF STOP_ = 0 THEN ; si el boton stop es presionado ejecuta lo siguiente
INTCON = 0 ;desabilita el  timer 
gosub Retardo
ENDIF 
 
;BOTÓN PROGRAMAR LOS MINUTOS
IF Minutos = 0 THEN
Mts = Mts - 1
gosub retardo
ENDIF
 
;BOTÓN PROGRAMAR LOS SEGUNDOS
if Segundos = 0 then
Sds = Sds - 1
gosub retardo
ENDIF
 
'*****************************
IF Mts = 60 AND Sds = 60 THEN' 
out = 1                      '
gosub mensaje_fin             '
else                         '
out = 0                      '
gosub retro
gosub MENSAJE1                '
ENDIF                        '
'*****************************
 
GOTO LOOP
 
;ANTIRREBOTE
Retardo:
FOR Delay = 1 To 200
Pause 1 
NEXT Delay 
RETURN
 
;EJECUCION DE UN SEGUNDO
DISABLE
ISR:
IF Mts < 0 OR Sds > 0 THEN 'OJO sí se cambia esta función no funciona el conteo
pulsos = pulsos + 1
IF pulsos < 61 THEN NoUpdate
endif
 
;TIEMPO
Retro:
pulsos = 0
 
IF Sds = 0 AND Mts => 0 then
Mts = Mts - 1
Sds = 61
endif
if mts > 60 then mts = 60       
if mts = 0 then mts = 0
 
'ALARMA
IF Mts = 60 AND Sds = 60 THEN
pulsos = pulsos
INTCON = 0 ;desabilita el  timer 
else
TMR0 = 0 ;Inicializa registro TMR0 
INTCON = $A0 ;habilita el  timer interrupt
Sds = Sds - 1
endif                                              
return
 
mensaje1:
; LA INSTRUCCION LCDOUT $FE, 1  TE LA SAQUE DE ACÁ
LCDOUT $FE, 2
Lcdout "Tiempo de espera "  
LCDOUT $FE,$C4,DEC2 Mts, ":",DEC2 Sds
LcdOut $fe,$C16, 0
LCDOUT $fe,$40,$00,$0A,$0A,$00,$04,$11,$0E,$00 'aqui tenemos la carita feliz :)
return
 
mensaje_fin:
; LA INSTRUCCION LCDOUT $FE, 1  TE LA SAQUE DE ACÁ
LCDOUT $FE, 2
Lcdout " <<FINALIZADO>> "  
LCDOUT $FE,$C1,"  PULSE CLEAR"
return
 
NoUpdate:
INTCON.2 = 0 
Resume                                                                              
ENABLE 
END
END
Despues si me hago de un tiempo, le presto un poco mas de atencion y veo que hace que no pare el contador...saludos

hola gracias por tu ayuda, tenias razón con el reseteo del LCD ya funcionan bien los mensajes pero no se por que ahora el tiempo se ha vuelto loco los 3 minutos de programacion los pasa como en 10 segundos y no logro encontrar el error en el tiempo te agradezco sí me puedes ayudar gracias
 
Hola amigos hace poco les comente que recien empezaba con el pic 12f675. Ahora por les pediria me ayuden para hacer un timer con este pic los que he visto en el foro son con el 16f84 no se si necesita otra configuracion por el tema del prescaler y las interrupciones.

Agradezco de antemano por su ayuda

yo no creo....el microcontrolador difiere porque solo cuenta con seis pines i/o y su configuracion es GPIO en vez de port....de resto es lo mismo...si necesitas algun registro interno del micro miras el datasheet pero para lo que pedis lo unico que tenes que tener en cuenta es eso...
 
Última edición por un moderador:
yo no creo....el microcontrolador difiere porque solo cuenta con seis pines i/o y su configuracion es GPIO en vez de port....de resto es lo mismo...si necesitas algun registro interno del micro miras el datasheet pero para lo que pedis lo unico que tenes que tener en cuenta es eso...

hola amigo gracias por tu ayuda tienes razon no hay ningun problema; entonces adjunto el programa ya probado en este caso mantengo apagado un led por 30min y luego enciende 1 min. Ya luego esta salida se puede usar como mejor nos parezca. espero les sea de ayuda.

Código:
;*******************************************************************************
; Notas:
; Enceder y apagar un LED por GP0 
;*******************************************************************************
@ DEVICE PIC12F675
; Palabra de configuración
@ DEVICE INTRC_OSC_NOCLKOUT,PROTECT_OFF,CPD_OFF,WDT_OFF,MCLR_ON,PWRT_ON,BOD_OFF
;*******************************************************************************

DEFINE OSCCAL_1K 1      ; Calibración del oscilador interno
DEFINE OSC 4            ; Definir el oscilador a 4MHz (Para cálculos del compilador)    

ANSEL = 0               ; Modo digital I/O (Cuando todos los bits son 0
                        ; No tiene caso poner %00000000) =)
CMCON = 7               ; Comparadores análogicos desactivados
TRISIO = %111110        ; GPIO = 'e,e,e,e,e,s' (62) Solo GP0 como salida
                        ; GP3/MCLR/Vpp Solo puede ser usado como entrada
                        ; Si se declara el fuse MCLR_XX en OFF



Ticks       VAR byte                           
Minute      VAR byte                         
Second      VAR byte 
a           var byte
ap          var byte
en          var byte
Minute = 0 'inicializa los valores del timer 
Second = 0 
Ticks = 0 
a = 0  
GPIO.0 = 0



inicio:

OPTION_REG = $05               ;  prescaler = 64
ON INTERRUPT GoTo ISR          ; ir a rutina ISR 

 IF a = 0 Then
 
   TMR0 = 0 ;inicializa registro TRMO
   INTCON = $A0 ; habilita tiempo de interuupcion
   a = 1
    
 ENDIF   
     

goto inicio

DISABLE
 ISR:
 Ticks = Ticks + 1
 IF Ticks < 61 Then NoUpdate
 Ticks = 0
 Second = Second + 1
 IF Second = 60 Then
 Second = 0
 Minute = Minute + 1

 ENDIF
 
 
 IF Minute = 30 Then   ' control de la recirculacion
 
 GPIO.0 = 1
 
 endif
 
 IF minute = 31 Then
 
 GPIO.0 = 0
 minute = 0
 
 endif
 
 NoUpdate:
 INTCON.2 = 0 ;rehabilitainterrupciones del TRMO
 Resume
 ENABLE ; 
 End
 End ; Fin del programa
 
Última edición por un moderador:
como antecedente, estoy realizando una conexion USB con un micro 18f4550 y picbasic+VB6.0, simulado en proteus. (anexo codigos y diagrama)

el problema que tengo que ya me esta dando dolor de cabeza es que pongo el el siguiente codigo como bucle principal y no me funciona

Código:
ProgramStart: 
 gosub DoUSBIn
 Select case usbbuffer[0]
  Case "A"
   toggle PortB.0
  Case "B" 
   toggle PortB.1
   usbbuffer[0]="C"
   gosub DoUSBOut
 End Select

 button  PortC.0,0,0,0,BVarD,0,ExitB
  toggle PortB.1
  usbbuffer[0]="C"
  gosub DoUSBOut   
 ExitB:
goto  ProgramStart

pero si yo comento la parte correspondiente a la entrada de datos, la rutina button funciona bien, mas o menos asi:
Código:
ProgramStart: 
 'gosub DoUSBIn
' Select case usbbuffer[0]
'  Case "A"
'   toggle PortB.0
'  Case "B" 
'   toggle PortB.1
'   usbbuffer[0]="C"
'   gosub DoUSBOut
' End Select

 button  PortC.0,0,0,0,BVarD,0,ExitB
  toggle PortB.1
  usbbuffer[0]="C"
  gosub DoUSBOut   
 ExitB:
goto  ProgramStart

y si yo comento la parte de la rutina button, la parte de entrada de datos funciona bien, mas o menos asi:
Código:
ProgramStart: 
 gosub DoUSBIn
 Select case usbbuffer[0]
  Case "A"
   toggle PortB.0
  Case "B" 
   toggle PortB.1
   usbbuffer[0]="C"
   gosub DoUSBOut
 End Select

 ' button  PortC.0,0,0,0,BVarD,0,ExitB
 '  toggle PortB.1
 '  usbbuffer[0]="C"
 '  gosub DoUSBOut   
 ' ExitB:
goto  ProgramStart

alguien ha tenido algun problema similar con estas instrucciones?

sera un Bug del PBP?
 

Adjuntos

  • CyberCtrl.rar
    126.3 KB · Visitas: 78
Última edición:
Por si alguien esta interesado hice esta variante al algoritmo del button y tampoco funciona! :eek:
Código:
BVarD            var bit

ProgramStart: 

 gosub DoUSBIn
 Select case usbbuffer[0]
  Case "A"
   toggle PortB.0
  Case "B" 
   Gosub Pulse
 End Select

 if PortC.0 = 0 then
  bvarD=1
 else
  if BVard=1 then BVarD=0: Gosub Pulse
 endif

goto ProgramStart  

Pulse:
 toggle PortB.1
 usbbuffer[0]="C"
 gosub DoUSBOut
Return

por lo que me hace suponer que el usbin esta bloqueando de alguna manera al puerto.C
cualquier sugerencia es bien recibida y considerada.

*Nota en el codigo que anexe me falto actualizar y no puse el TrisC.1 como entrada, pero aun asi no funciona.
 
Última edición:
Hola amigo "@laelectronicameodia", recuerda que select case en todos los tipos de micros de 16 bits para abajo, se queda esperando el valor de la variable para funcionar y saltar donde corresponde... Si no hay dato, espera por el... Similar al comando infrain de los picaxe...Quizas este pasando eso, no estoy el 100% seguro... Yo, te recomendaria sumar un CASE mas que este preparado para cuando el valor sea "0" (o "1" osea la inversa de loq ue estas haciewndo ahora)y directamente salte a lo que tenes abajo u haga otra funcion... De ultima, si ves que el empleo de los pulsadores son importantes, implementa interrupciones por hardware y este donde este, sin importar lo que este haciendo, saltara al programa de interrupcion donde tenes las ordenes para el boton...
saludos(y)
 
Última edición:
Hola Torres, me sirvio mucho tu consejo para cambiar la forma de como estaba viendo el flujo del USBIN, y efectivamente se queda "esperando" el valor.

pongo el diagrama de flujo por si a alguien le sirve.

Dibujo.JPG

lo que hice fue poner un timer en VB6 que este enviando el Valor cada 1ms y asi "destrabar" la espera y como mencionas otra posibilidad es el uso de interrupciones en lugar del button, pero se me hizo mas facil de esa manera :D

Muchas gracias por tu ayuda!.

ademas anexo el ejemplo de comunicacion bidireccional con usb para quien le pueda servir.
esta probado en PBP 2.5, MCS 3.0, MPASM 5.2 y Proteus 7.8

SAludos y de nuevo gracias.
 

Adjuntos

  • CyberCtrl.rar
    139.3 KB · Visitas: 95
una consulta soy nuevo en el tema de pic basic pro, esta revisando un libro y halle un ejemplo donde se utiliza una bandera, queria saber para que sirve eso

Una bandera es simplemente un bit que se usa para indicar que una accion ya se ha ejecutado... por ejemplo que el micro termino una rutina matematica y tiene datos listos para enviar, o el ADC ya termino una conversion

Posteriormente otra rutina revisara si esa bandera se encuentra activada y en base a esto ejecutara otra accion
 
Muchas gracias amigos, aqui lo prometido la puesta en marcha del brazo, cabe destacar que aun le falta bastante para hacer lo cometido grabar una secuencia, hice unas pruebas pero al parecer el pic se resetea y no hace la secuencia de manera apropiada el brazo se vuelve loco y empieza a dar golpes por todos lados pareciera que tuviera vida propia :LOL:jejeje:LOL: ...Pero espero poder lograrlo, creo que es cuestión de velocidad esta muy rápido y lo otro lo de la fuente.
Bueno espero sus criticas y sugerencias...saludosss:apreton:

http://www.youtube.com/watch?v=6Ui3kS5R2AY

Muy buen proyecto, encuentro que comentas que se resetea el pic, te comento que eso mismo me paso, y depues de investigar tanto y realizar los circuitos encontre que primero se debe colocar varios condensadores de 0,1 mf a las salidas y entradas de los puertos del pic,
segundo que algunas ocaciones colocas mas palabras inadecuadas en la escritura de tu programa, tercero debes aislar muy bien los circuitos. he leido casi todos los comentarios de este tema del foro y casi nadie veo que habla de que han realizado las pruevas en circuitos fisicos, si no en simuladores y la verdad no es lo mismo.
he realizado varias automatizaciones, como procesos de entrada de un producto en un circuito de produccion hasta la salida del producto, automatizacion de una maquina sopladora, automatizacion de una inyectora de plastico vertical, etc y en todos he realizado los circuitos con su proceso de generacion del programa, verificacion y ejecucion del mismo. Al principio cuando realice el primer proyecto, siempre se me reseteava el pic o generava ordenes que no habia introducido o se activava solo, me toco aprender como estabilizar el pic y quitar lo que llaman interferencias electromagneticas y que camello hasta que lo logre y me di cuenta de los herrores cometidos, esto no se lo enseñan a uno en ningun libro, ni en ninguna parte.

asi pues que si quieren publico todo lo que he realizado con circitos y programacion

gracias te felicito por tu proyecto
 
amigos, solicito su ayuda en el siguiente tema con pulsadores, soy neófito en el tema y estoy estudiándolo, soy de la escuela que piensa que en el tema de la electrónica es mejor ir leyendo y practicando, así que paso a lo que quiero hacer y para lo cual solicito su ayuda:

estoy haciendo una ruleta de leds con el pic 16f628a, y lo que quiero es cada vez que presiono el botón en el porta.0 se ejecute un efecto diferente (si presiona la primera vez, se ejecuta el efecto 1, si presiono nuevamente se ejecuta el efecto 2 y así sucesivamente), los diferentes efectos ya los tengo hechos, pero estoy confundido en cómo hacer la rutina de programación del pulsador

gracias por su ayuda
 
amigo como esta.....

quiciera que me colaboraras en algo
quiero hacer una pausa con un numero que ingreso por comunicacion serial pero no he podido lograrlo....tambien...como hago para enviar numeros mayores de 9....sucede que cuando quiero ingresar un numero por ejemplo el 60, en donde hay un condicional donde ese numero es clave para que la funcion se cumpla, al ingresarlo no lo reconoce...al parecer solo ingresa el 6....que sucede....y lo anterior es que quiero almacenar ese valor para dar un pause con cualquier valor ingresado por serial....

ejemplo

serin portb.0, T2400, variable

si esa variable es igual a cualquier numero supengamos que quiero prender un led i apagarlo despues de una pausa igual al valor ingresado en variable....amigo le pido porfavor una manito es un trabajo de maestria urgente muchas gracias....



Hola que bueno que hayas aprendido eso es lo importante ya que para eso es el foro, no solo aprendes tu yo también, con respecto a lo que mencionas de los led's con pulsadores, yo diría que casi todo es posible con los pic y de seguro que si se puede, la cuestión es sacarle el mayor provecho al pic, claro esta sin suturarlo. Ahora lo que se me ocurre es que si le damos prioridad al tiempo al presionar el pulsador este va seguir Incrementando solo que va a cambiar el estado del led hasta que termine su tiempo y vuelva a cambiar de estado por desbordamiento del registro asignado para ese led...Si te fijaste en el código anterior las salidas del puerto A al presionar el botón cambian y eso sin afectar los tiempo de los leds.

Un dato importante que no se si notaste es que a pesar de manejar tiempos bien precisos a través del reloj de tiempo real interno del pic, es que si dentro de nuestro loop de interrupción hacemos muchas otras sentencias el tiempo se ve afectado para largos periodos, un ejemplo seria una hora, si dentro del loop interrupción tenemos muchas sentencias eso genera un retardo y mas en pbp, eso sucede porque consumimos el tiempo y eso pasa porque al entrar al loop se deshabilita la interrupción y el reloj deja de funcionar hasta que se vuelva habilitar la interrupción, si en ese proceso utilizamos muchas sentencias las cuales generan el uso de muchos ciclos de maquina, con lo cual empezamos a degradar la precisión de los tiempos de los leds. Es por eso que solo se uso una sola sentencia en la interrupción para que sea lo mas preciso posible.

Cualquier cosa me avisas saludosss :apreton:



haaa se me olvidaba....estoy simulando en el terminal de proteus...
saludos
 
Última edición:
amigos, solicito su ayuda en el siguiente tema con pulsadores, soy neófito en el tema y estoy estudiándolo, soy de la escuela que piensa que en el tema de la electrónica es mejor ir leyendo y practicando, así que paso a lo que quiero hacer y para lo cual solicito su ayuda:

estoy haciendo una ruleta de leds con el pic 16f628a, y lo que quiero es cada vez que presiono el botón en el porta.0 se ejecute un efecto diferente (si presiona la primera vez, se ejecuta el efecto 1, si presiono nuevamente se ejecuta el efecto 2 y así sucesivamente), los diferentes efectos ya los tengo hechos, pero estoy confundido en cómo hacer la rutina de programación del pulsador

gracias por su ayuda

SALUDOS:Lo mejor que puedes hacer es realizar un diagrama de flujo para poder comprender los pasos a seguir en cada proceso, en realidad siempre que vas ha desarrollar unproyecto siempre debes empezar por realizar un diagrama de flujo.
si quieres te puedo ayudar con el diagrama de flujo
 
SALUDOS:Lo mejor que puedes hacer es realizar un diagrama de flujo para poder comprender los pasos a seguir en cada proceso, en realidad siempre que vas ha desarrollar unproyecto siempre debes empezar por realizar un diagrama de flujo.
si quieres te puedo ayudar con el diagrama de flujo

Volthor, muchísimas gracias, apreciaría mucho tu ayuda en este tema, ya que quiero dejar completamente terminado el tema de interruptores para seguir estudiando lo demás, gracias :apreton:
 
Atrás
Arriba