사용자 도구

사이트 도구

English

cubloc:on_timer:index

On Timer

On Timer(시간간격) Gosub 라벨명

시간간격 : 1=10mS, 10=100mS, 65535 = 65530mS
라벨명 : 인터럽트 발생시 점프할 곳

설명

일정한 시간 간격으로 처리해야 될 일이 있을 경우 사용하는 인터럽트 입니다. 괄호 안에 있는 수치가 시간 간격을 의미합니다. 1일 경우 10밀리 초 간격으로 인터럽트 루틴을 호출합니다. 100일 경우 1초 간격으로 인터럽트 루틴을 호출합니다. 최대 65535까지 사용할 수 있으며 이 경우 655.35초 간격이 됩니다. 간격에 0을 입력했을 경우에는 문법에러가 됩니다.

이 인터럽트는 사용시 특히 주의해야 할 사항이 있습니다. 인터럽트 루틴에서 지정한시간간격보다 빠른 시간 안에 인터럽트 루틴 수행이 끝마치도록 해야 합니다.

예를 들어 10mS 간격으로 인터럽트 루틴을 수행하도록 해놓았는데,인터럽트 루틴에서 20mS정도의 실행시간이 걸린다고 가정해보겠습니다. 이렇게하면, 계속해서 인터럽트 루틴만 실행하게 되므로, 본 프로그램은 영원히 실행되지 않게 됩니다.

주의사항

기존에 MCU를 써보셨던분들이 타이머 인터럽트와 관련해서 많은 시행착오를 하고 있습니다. 큐블록은 MCU만큼 빠르지 않습니다. 명령어 하나의 수행시간이 짧게는 50mS에서 길게는 수백mS에 달합니다. 타이머 인터럽트 간격이 매우 짧은 경우, 그만큼 그안에서 실행할 수 있는 명령의 수도 몇게 안된다는 뜻이 됩니다.
다음과 같은 사항에 주의하셔서 프로그램하시기 바랍니다.

1. 타이머 간격을 최대한 크게 설정하세요.
2. 타이머 인터럽 루틴안에서는 빠르게 수행을 마치세요.
3. 단 한개의 타이머 인터럽트만 쓸 수 있습니다. 한 프로그램에서 여러개의 타이머 인터럽트는 사용할 수 없습니다. 여러개의 On Timer 명령이 있을 경우, 특별히 에러멧세지는 발생하지 않습니다. 하지만 가장 최근에 실행된 On Timer 명령이 적용되고, 그 이전에 실행되었던 On Timer 는 지정해제됩니다.

사용예

Const Device = CB280
Dim I As Integer
Wait 1000
On Timer(100) Gosub TIMERTN
I = 0
Do
  Debug Dec I,Cr  '무한루프안에서 변수I값을 Debug창에 표시합니다.
  Wait 1000       '1초대기, 이 루프 안에서는 변수I를 증가시키지 않습니다.
Loop 
 
TIMERTN:
  I = I + 1       ' 변수 I는 1초마다 1씩 증가하는 카운터가 됩니다.
  Return

명령어 목록으로 가기

cubloc/on_timer/index.txt · 마지막으로 수정됨: 2020/08/19 00:34 저자 Comfile Technology