Para dar agilidad a los periféricos y al programa en general hay que dejar de utilizar los Pause, en mi caso Waitms. De echo pasa lo mismo que con el Goto, no se utilizan.
'Practicas para la introducción a las bases de tiempos (sin usar las interrupciones).
'Ejemplo para simulador
Define CLOCK_FREQUENCY = 4 'Se trabaja a 4Mhz
AllDigital 'Puerto A se utilizara como digital
TRISB.0 = 1 'Input
TRISA.0 = 0 'Output
TRISA.1 = 0 'Output
Symbol led = PORTA.0 'Asigna nombre al disositivo en Basic del PSI
Symbol led2 = PORTA.1
Call _btreset()
main: 'Subrutina principal
'Control tecla y parpadeo led2
If RB0 = 0 Then Gosub run2 'Salta a la subrutina
If RB0 = 1 Then led2 = 0 'Apaga led contrario
'Control tecla y parpadeo led
If RB0 = 1 Then Gosub run1 'Salta a la subrutina
If RB0 = 0 Then led = 0 'Apaga led contrario
Call _btcall() 'Actualiza las bases de tiempos
Goto main 'Genera bucle infinito, solo para rutina principal.
End
'Subrutinas
run1: 'Nombre o etiqueta subrutina
If _btimer.1 = 1 Then
Call _btsetup(1, 1000)
Toggle led 'Invierte el estado del pin configrado como digital
Endif
Return 'Fin subrutina run1, retorna a la línea siguiente despues del salto
run2: 'Nombre o etiqueta subrutina
If _btimer.0 = 1 Then
Call _btsetup(0, 100)
Toggle led2
Endif
Return 'Fin subrutina run2, retorna a la línea siguiente despues del salto
'**********************************************************
'Funciones para el control de hasta 8 bases de tiempos: _btimer.0 a _btimer.7
'**********************************************************
'Función principal las bases de tiempos:
'_bt = indica la base de tiempos para configurar
'_waitms = tiempo que contará la base de tiempos seleccionada con _bt
'_setup = operación a realizar con la base de tiempos indicada por _bt
Function _btimer(_bt As Byte, _waitms As Word, _setup As Byte) As Byte
Dim _cont(7) As Word 'Numero de contadores, tantos como bases de tiempos
If _setup = 1 Then _btimer = 255 'Configura las bases de tiempos como terminadas o desbordadas
''Recarga las bases de tiempos con el tiempo a contar y las activa
If _setup = 2 Then
If _bt = 0 Then
_cont(0) = _waitms
_btimer.0 = 0
Endif
If _bt = 1 Then
_cont(1) = _waitms
_btimer.1 = 0
Endif
If _bt = 2 Then
_cont(2) = _waitms
_btimer.2 = 0
Endif
If _bt = 3 Then
_cont(3) = _waitms
_btimer.3 = 0
Endif
Endif
If _setup = 0 Then
'Contadores de las bases de tiempos, descontando
If _cont(0) > 0 Then _cont(0) = _cont(0) - 1
If _cont(1) > 0 Then _cont(1) = _cont(1) - 1
If _cont(2) > 0 Then _cont(2) = _cont(2) - 1
If _cont(3) > 0 Then _cont(3) = _cont(3) - 1
'Estado de las bases de tiempos, terminaron de contar
If _cont(0) = 0 Then _btimer.0 = 1
If _cont(1) = 0 Then _btimer.1 = 1
If _cont(2) = 0 Then _btimer.2 = 1
If _cont(3) = 0 Then _btimer.3 = 1
WaitMs 1 'Tiempo patron
Endif
End Function
'Funciones auxiliares para el control de las bases de tiempos:
'********************************************************
'Actualiza las bases de tiempos.
Proc _btcall()
Call _btimer(0, 0, 0)
End Proc
'Recarga las bases de tiempos.
Proc _btsetup(_bt As Byte, _waitms As Word)
Call _btimer(_bt, _waitms, 2)
End Proc
'Inicializa las bases de tiempos, todas desbordadas.
Proc _btreset()
Call _btimer(0, 0, 1)
End Proc