Hola a todos, soy nuevo y no se si está bien que postee de está forma, no encontré otra, soy programador Visual Basic autodidacta, no vivo de esto si bien tengo hace mucho 2 clientes, hace poco comencé a leer como programar los pics por desafío personal, me gusta y habiendo probado varias alternativas, llevandome por delante varias piedras, me decidí por Mikrobasic que me es mas sencillo de entender porque mantiene mas o menos la linea con la que estoy acostumbrado a trabajar. Sucede que tengo un par de preguntas, hice y programé en un PIC16F627 un programa para hacer funcionar un lavarropas viejo que no le andaba el programador y funcionó, pero no se trabajar con interrupciones y necesito hacerlo.
Mi programa trabaja en base a llamados a procedures, quisiera que un botón que ya tengo definido y soldado, que me sirve para que se dispare el inicio del programa, cumpliera también con la función de pausa o sea que si se activara interrumpiera el programa hasta que se volviera a pulsar, estuve leyendo todo lo que encontré y no logro darme cuenta como trabaja una interrupción en segundo plano mientras se ejecuta el programa. Desde ya muchas gracias a todos. Les agrego el programa que funciona pero le faltán cosas y hay que corregir tiempos también.
program Pepe
' MCU: PIC16F627
' Dev.Board: PIPO2
' Oscillator: HS, 8' *
'=====================================
'declaración de variables
dim ciclos as integer
'=====================================
sub procedure CAgua()
'espera de la carga de agua
portb.7 = 1 'abre solenoide para cargar agua
'siguiente pregunto al revés no se porque los abiertos son 1
while portb.6 <> 0 'mientras el presostato esté abierto
delay_ms(100)
wend
portb.7 = 0 'cierra solenoide sin cambiar el estado del presostato
delay_ms(1000)
end sub
'=====================================
sub procedure Lavar()
'lavado normal
porta.0 = 0 'capacitor normal
delay_ms(500) '
porta.1 = 1 'encender motor de lavado con capacitor normal
delay_ms(10000) '10 segundos
porta.1 = 0 'apagar motor de lavado
delay_ms(4000) '4 segundos
'-----
porta.0 = 1 'capacitor invertido
delay_ms(500) '
porta.1 = 1 'encender motor de lavado con capacitor invertido
delay_ms(10000) '10 segundos
porta.1 = 0 'apagar motor de lavado
delay_ms(4000) '4 segundos
end sub
'=====================================
sub procedure SAgua()
'sacar agua
porta.3 = 1 'encender la bomba de extracción de agua
while portb.6 <> 1 'mientras el presostato esté cerrado
delay_ms(100)
wend
porta.3 = 0 'apagar la bomba de extracción de agua
delay_ms(4000) '4 segundos
end sub
'=====================================
sub procedure Centrifugar()
ciclos = 0
'centrifugado y bomba
porta.3 = 1 'encender bomba de extracción de agua
porta.2 = 1 'encender motor de centrifugado
for ciclos = 1 to 6 '60 segundos, 10 por ciclo
delay_ms(10000)
next ciclos
porta.3 = 0 'apagar bomba
porta.2 = 0 'apagar motor de centrifugado
end sub
'=====================================
main:
CMCON = %00000111 'para apagar los comparadores para poder utilizar RA0,RA1,RA2 y RA3 como I/O
'colocar los tres bits de menor peso del registro CMCON a 1
VREN_bit = 0 'deshabilitamos modulo Vref
T1CON = %00000000 'si no vas a usar el Timer1, todos los bits a 0
'con lo que RB6 y RB7 haran lo que le pones el el TRISB.
'tiene mucho que ver la PALABRA de CONFIGURACION
'si se activa MCLR o no se afecta directamente a RA5
'el oscilador elegido afecta a RA6 y RA7
'LVP que afecta RB4
'USART afecta a RB1 y RB2
' TRISA=255 'Puerto A como entrada
' TRISB=0 'Puerto B como Salida
' PORTB=0 'Limpiamos el puerto B.
trisa = %00000000 'todas salidas
trisb = %01001001 'todas salidas menos 0, 3 y 6
'=====================================
'espera del botón de inicio
while portb.0 <> 0 'mientras no se pulsó el botón de inicio
delay_ms(100)
wend
'=====================================
'espera de cierre de puerta antes de iniciar (debería durar todo el programa)
while portb.3 <> 0 'mientras no se cerró la puerta
delay_ms(100)
wend
'=====================================
'se utiliza para lavar
CAgua
'=====================================
'se utiliza para lavar
For ciclos = 1 to 12
Lavar
next ciclos
porta.0 = 0 'capacitor normal
'=====================================
'se utiliza para lavar
SAgua
'=====================================
'se utiliza para enjuagar
CAgua
'=====================================
'se utiliza para enjuagar
For ciclos = 1 to 12
Lavar
next ciclos
porta.0 = 0 'capacitor normal
'=====================================
'se utiliza para enjuagar
SAgua
'=====================================
'centrifuga sacando agua a la vez
Centrifugar
'=====================================
end.
Edité el post porque solucioné lo del goto que no funcionaba instalando otra versión que me prestaron, así que era el soft que tenía algún problema.