Curso de Basic
Temporizador
Você está em: MarMSX >> Cursos >> BASIC
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 determinada sub-rotina, após um tempo decorrido. Esse tempo é baseado no número de interrupções do temporizador.
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 = numero_de_interrupcoes GOSUB linha
Como o temporizador causa uma interrupção a cada 1/60 segundos, temos que o tempo em segundos é calculado da seguinte maneira:
tempo_segundos = numero_de_interrupcoes * 1/60
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
A cada 1 segundo imprime um número na tela. Quando o valor da variável "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 é executado 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.
Podemos reescrever o programa acima da seguinte maneira:
10 TIME=0
20 PRINT SIN(0.35)+COS(0.35)*60
30 T=TIME
40 PRINT"O cálculo levou";T/60;"segundos para ser feito."