Curso de Basic
Temporizador


  Vamos aprender nesse capítulo algumas funções do temporizador do MSX, que causa uma interrupção no sistema a cada 1/60 segundos.


  ON INTERVAL GOSUB

  Desvia o programa para uma derminada sub-rotina, após um tempo decorrido.
  O comando INTERVAL ON habilita o desvio repetidas vezes, sempre que o tempo de intervalo acontece. O comando INTERVAL STOP suspende o desvio e o comando INTERVAL OFF cancela.
  O retorno acontece para a linha / comando seguinte ao último comando executado antes da interrupção. Caso esteja "preso" em um "GOTO mesma_linha", volta para esta linha.

  Sintaxe:
ON INTERVAL = tempo GOSUB linha

  Exemplo:
10 ON INTERVAL=60 GOSUB 40
20 INTERVAL ON
30 GOTO 30
40 X=X+1
50 PRINT X;
60 IF X>=10 THEN INTERVAL OFF
70 RETURN
  Saída:
  1 2 3 4 5 6 7 8 9 10

  Quando "X" for maior ou igual a 10, a interrupção é desligada através do comando "INTERVAL OFF".

  O programa a seguir, mostra o exemplo de um círculo sendo desenhado ponto a ponto na tela, onde o intervalo é estabelecido para trocar a cor do ponto.
10 SCREEN 2
20 ON INTERVAL=6 GOSUB 310
30 INTERVAL ON
100 ' Desenho
110 P1=90 : P2=60
120 FOR A=0 TO 6.4 STEP 0.2
130 P3=60+COS(A)*30 : P4=60-SIN(A)*30
140 LINE(P1,P2)-(P3,P4),C
150 P1=P3 : P2=P4
160 NEXT A
170 GOTO 170
300 ' Tratamento de interrupção
310 C=(C+1) MOD 16 : RETURN
  Observe que quando a interrupção é feita, o tratamento é excutado e o programa continua de onde parou. Isso pode ser observado, quando o círculo muda de cor, mas continua sendo desenhado como se nada estivesse modificado o loop da rotina.


  TIME

  O comando TIME determina ou obtém o valor da variável "TIME", que é incrementada a cada 1/60 segundos pelo temporizador do MSX. Quando o contador ultrapassa o valor 65535, volta a 0.

  Exemplos:
TIME = 0 
Ok

PRINT TIME 
376
Ok

  O programa a seguir, verifica o tempo gasto para calcular e imprimir uma determinada expressão.
10 A=TIME
20 PRINT SIN(0.35)+COS(0.35)*60
30 B=TIME
40 PRINT"O cálculo levou";(B-A)/60;"segundos para ser feito."
  Saída:
  56.705
  O cálculo levou .1833 segundos para ser feito.



MARMSX/CURSOS/Basic