On Recvx Gosub 라벨명
Recvx : Recv1, Recv2, Recv3 중 하나 |
라벨명 : 인터럽트 발생시 점프할 곳 |
RS232c수신 인터럽입니다. 1,2,3중 원하는 채널을 사용할 수 있으며, Opencom명령으로 해당 채널이 Open된 후에 사용가능합니다. 해당 채널에 데이터가 수신되면 곧바로 On Recv에서 지정한 <라벨명>으로 점프합니다. 그곳에 가서 수신된 데이터를 읽어서 처리하는 방법으로 프로그램을 작성하십시오.
주의사항
기존에 MCU를 써보셨던분들이 인터럽트와 관련해서 많은 시행착오를 하고 있습니다. 큐블록은 MCU만큼 빠르지 않습니다. 명령어 하나의 수행시간이 짧게는 50mS에서 길게는 수백mS에 달합니다. 특히, On Recv수신 인터럽트 루틴안에서 수신된 데이터를 분석하는 일은 피하세요. 다음과 같은 사항에 주의하셔서 프로그램하시기 바랍니다.
Dim A(5) As Byte Opencom 1,19200,0, 100, 50 On Recv1 Gosub DATARECV_RTN ' RS232 채널1에 데이터가 수신되면 DATARECV_RTN으로 Do Loop ' 무한루프 DATARECV_RTN: If Blen(1,0) > 4 Then A(0) = Get(1,1) ' 5바이트만 읽습니다. A(1) = Get(1,1) A(2) = Get(1,1) A(3) = Get(1,1) A(4) = Get(1,1) End If Return ' 인터럽트 루틴을 종료
사실 이렇게 하면, 데이터가 1바이트 수신될 때마다 매번 인터럽트 루틴을 가게 됩니다. 하지만, 원하는 데이터수 5바이트가 쌓이지 않았으므로 그냥 리턴하는일이 자주 발생하게 됩니다.
이럴때에는 Set Until을 사용해서 패킷관리를 해주는 것이 좋습니다.