Autor Tema: Necesito aprender a utilizar interrupciones en Mikrobasic  (Leído 2563 veces)

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

Desconectado Wilan

  • PIC10
  • *
  • Mensajes: 1
Necesito aprender a utilizar interrupciones en Mikrobasic
« en: 02 de Mayo de 2013, 12:36:08 »
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.
« Última modificación: 02 de Mayo de 2013, 21:20:25 por Wilan »