8051

       AVR

       EZLab

       PIC

       80C196KC

       DSP

       ARM

       VHDL

       마이크로 마우스

       로봇 축구

       Battle 로봇

       각종 로봇대회

       휴먼로봇

       Embeded Linux

       HW/SW 강좌

       RTOS

 

 

1. RoboBlock Basic2K4 프로그램 설명.

RoboBlock Basic2K4에서 사용되는 명령어들에 대해서 알아보도록 하자. 기존 BASIC에서 사용되는 명령어들에 기본을 두고 있다. 각각의 명령의 기능과 사용방법을 알아야 쉽게 원하는 제어를 할 수 있을 것이다. 물론, 단순한 명령어들이기 때문에 몇 일이면 쉽게 습득할 수 있을 것이다. 변수나 상수를 설정하기 위한 명령들로서 2차원까지 배열선언을 가능하게 제공하고 있다. 각각의 종류들에 대해서는 다음 표와 같다.

1.1 변수/상수에 관련된 명령어
 

명령어

설명

비고

DIM

변수(또는 배열)를 선언하는데 사용


AS

변수 선언시 변수형 지정


CONST

상수 선언


BYTE

변수를 바이트형으로 지정


INTEGER

변수를 정수형으로 지정


1.2 프로그램 흐름제어에 관련된 명령어
 

명령어

설명

비고

IF ~ THEN

조건이 참이면 THEN 이후에 설정된 명령을 수행한다.


ENDIF

IF 문이 끝을 알리는 명령어


FOR

지정된 수 만큼 명령문을 반복 수행하는 명령어


TO

조건식의 초기 범위를 나타내고 있다.


NEXT

다음 문으로 건너가는 명령어


ON

상태에 따른 분기를 시키는 명령어


GOTO

원하는 행번호로 건너가기(분기) 위한 명령어


GOSUB

서부루틴을 참고하기 위한 명령어


RETURN

서부루틴에서 메인 프로그램으로 돌아가기 위한 명령어


END

프로그램 종료 명령어



1.3 입출력 포트에 관련된 명령어
 

명령어

설명

비고

IN

포트의 상태를 읽어오는 명령어


OUT

포트의 상태를 HIGH/LOW신호를 출력하는 명령어


BYTEOUT

바이트 출력 명령어


TOGGLE

포트에 출력중인 현재 신호를 반전시키는 명령어


PULSE

짧은 시간 동안 출력 상태를 반전시키기 위한 명령어



1.4 논리 제어 명령어.
 

명령어

설명

비고

AND

논리 곱


OR

논리 합


XOR

배타적 논리합


MOD

나눗셈을 한 후에 나머지



1.5 서보모터 제어 명령어.
 

명령어

설명

비고

ISERVOINIT

모듈 서보모터를 초기화하기 위한 명령어


ISERVO

모듈 서보모터 제어를 위한 명령어





2. 각각의 명령어 사용 예

 

    DIM ... AS   :  변수를 선언하는 명령


: 변수를 선언하는 명령이다.
: DIM [변수명] AS [변수형]
            DIM [변수명] AS [변수형], [변수명] AS [변수형], ..
:

RoboBlock Basic2K4에서 사용되는 변수는 먼저 DIM명령어에 의해서 선언되어야 한다. DIM명령어에 의한 변수의 선언은 항상 AS를 이용하여 변수형을 선언한다. 선언하고자 하는 변수명에는 영어의 경우 대소문자의 구분이 없으며, 중복하여 같은 변수명으로 선언할 수 없다.

프로그램 :

DIM I AS INTEGER ‘정수형으로 I변수를 선언
DIM J AS BYTE ‘바이트형으로 J변수를 선언

   CONST    :   특정하게 사용되는 숫자를 정의

: 특정하게 사용되는 숫자를 대신해서 사용할 이름을 선언한다.

: CONST [상수명] = 숫자

:

상수는 특정하게 사용되는 숫자에 대해서 간단히 이름으로 구분하면 프로그램의 작성이 편리할 경우에 사용된다. 상수를 사용하면 상수 값을 표시하는 변수를 사용하는 것에 비해서 다음과 같은 잇점이 있다.

상수는 한번만 정의해주면 모듈 전체에서 사용 가능.
상수는 부주의로 변경되는 경우가 없다.
상수를 사용하는 프로그램은 변수를 사용하는 것보다 효율적으로 코드를 생성한다.
상수를 사용하면 수정이 쉬워진다.

자주 사용되는 상수의 선언을 예로 들면 다음과 같다.

프로그램 :

CONST
ON = 1
CONST OFF = 0
CONST TRUE = 1
CONST FALSE = 0


    IF ... THEN 절    : 조건의 결과에 따라 제어


: 조건의 결과에 따라 제어 순서를 바꾼다.

: IF [조건1] THEN
                               [ ]
                    {
ELSEIF [조건2] THEN
                                       [ ] }
                          {
ELSE
                                        [ ] }
                    ENDIF

:

IF…THEN절이 실행되면 초기 IF문에서의 조건식이 참(TRUE)인지 조사한다. 만약 거짓(FALSE)이면 각각의 ELSEIF문의 조건을 검사하거나 ELSE문을 실행한다. 여기서, ELSEIF문은 필요한 만큼 사용할 수 있으며, 사용하지 않은 경우도 많다. AVRBasic2000의 IF문의 조건이 참인 경우 연결된 THEN의 다음 명령문장에서부터 다음의 ELSEIF 이나 ELSE 이전의 명령문장까지 실행한 다음, 더 이상의 조건 검사 없이 ENDIF의 다음 명령으로 실행을 옮긴다.

IF 문의 조건식과 실행문이 간단할 경우에는 모두 한 줄에 사용이 가능하다.

IF A > 0 THEN B = 5
IF A < 5 THEN B = 0 ELSE B = 1

IF 문의 조건식은 관계연산자에 의해서 두 가지 조건을 한꺼번에 사용할 수 있다.

                             IF A > 0 AND A < 5 THEN B = 3
                                        
IF A = 7 OR A = 9 THEN B = 1

 

   FOR ... NEXT 절 : 반복변수를 증하며 반복작업수행

: 프로그램의 실행에 따라 반복변수를 1 자동으로 증가시키면서 반복작업을 수행한다.

: FOR [반복변수] = [시작] TO []
                         { }
             NEXT {[반복변수]}

:

[반복변수]는 반복하는 횟수를 계산하는 변수이며, [시작]은 지정된 초기 수치이고 [끝]은 반복 수행을 마치는 지점의 최종 수치이다.

RoboBlock Basic2K4은 [반복변수]의 [끝]이 항상 [시작]보다 커야 하며, [반복변수]를 1만큼씩 증가시킨다. RoboBlock Basic2K4에서 FOR…NEXT문을 사용할 때 지켜야 할 규칙이 있다.

FOR…NEXT 문 안에 또 다른 FOR…NEXT 문을 사용할 수 있다.

            FOR I = 1 TO 10
                  FOR J = 1 TO 5
                        ..........
                NEXT J
            NEXT I

여러 FOR…NEXT 절을 사용할 경우에는 NEXT [반복변수]의 순서를 서로 바꾸어 사용해서는 안 된다.

             FOR I = 1 TO 10
                    FOR J = 1 TO 5
                          .......
                    NEXT I
             NEXT J

FOR…NEXT 문의 내부에서 바깥으로 나갈 수는 있지만 바깥에서 FOR…NEXT 문의 내부로 들어올 수는 없다.

             FOR I = 1 TO 10
                  GOTO
40
                     IF I = 5 THEN …….
                     GOTO 20
             FOR
I = 1 TO 10
             ENDIF ……
             NEXT I 40 ….
                     ……. …..
    20 …. NEXT I

[반복변수], [시작], [끝]의 값을 FOR…NEXT 문에서 임의로 변경해서는 안 된다.


     GOTO    :    지정한 행으로 모조건 분기

: 지정한 행으로 무조건 분기한다.

: GOTO [행레이블]

:

GOTO 명령문은 무조건 행레이블이 지정된 행으로 분기하며, 행레이블은 프로그램 안에 반드시 선언되어 있어야 한다.
GOTO 명령문을 너무 많이 사용하면 프로그램을 이해하기 어려우므로, 가능한 복잡하지 않은 범위 내에서 사용하도록 하며, 되도록 구조화된 제어명령문(FOR…NEXT, IF...THEN ...ELSE)을 사용하도록 한다.

프로그램 :

                  DIM I AS INTEGER
                  
DIM J AS BYTE
                       I = 7
                    IF I = 6 THEN GOTO LABEL1
                             ………
        LABEL1
                         J = 1
                     OUT I, J

 

    ON ... GOTO   :   변수 값에 따라서 분기하는 명령

: 변수 값에 따라서 개의 지정된 임의의 행으로 분기 한다.

: ON [변수] GOTO [행레이블목록]

:

[변수]는 행레이블 목록 안의 특정한 행을 지정하기 위해 사용되며, 그 값은 프로그램의 제어를 어느 행으로 분기할 것인지를 결정한다. 예를 들면, 변수의 값이 3일 경우 목록 안에서 3번째로 지정된 행으로 분기한다.

[행레이블목록]은 콤마로 구분한 행레이블의 나열이다.

프로그램 :

                   DIM A AS INTEGER
                           A = 2
                     ON A GOTO 10, 20, 30, 40

                        ….

               10 …… ‘A의 값이 1이면 처리
               20 …… ‘A의 값이 2이면 처리
               30 …… ‘A의 값이 3이면 처리
               40 …… ‘A의 값이 4이면 처리

  GOSUB ... RETURN : 서부루틴으로의 분기/복귀 수행

: 서브루틴으로의 분기와 서브루틴으로부터의 복귀를 수행한다.

: GOSUB [행레이블]
               ……….
     [
행레이블]

           ……….
      RETURN

:

서브루틴은 자주 사용되는 프로그램의 부분(루틴)에 대해서 한번 기술하고 사용될 때마다 호출하여 분기와 복귀를 수행한다. 이러한 서브루틴은 프로그램의 크기를 줄이고, 효율적인 프로그램의 작성을 가능하게 한다. 서브루틴의 내부에서 다른 서브루틴의 호출이 가능하며, 중복 호출이 가능한 횟수는 모듈에 따라 다르다. 모듈의 한계를 벗어난 중복 호출은 모듈내부의 에러를 초래하므로 복잡한 중복 호출은 피하도록 한다.

프로그램 :

         DIM A1 AS INTEGER
         DIM A2 AS INTEGER
         
DIM d_time AS INTEGER
                  
A1 = 100
         
GOSUB Motor_Dalay
                  
...............
                  
A2 = 100
         
GOSUB Motor_Dalay
                   
.............
                   
.............

Motor_Dalay

          FOR d_time = 1 TO 100
           NEXT d_time
          RETURN

     OUT  : 입출력 포트로 1비트의 데이터를 출력

: 입출력 포트로 1비트의 데이터를 출력한다.

: OUT [포트번호], [데이터]

:

모듈의 입출력 포트를 통해 데이터를 출력하며, 데이터는 0 또는 1의 비트에 대해서만 유효하다. 그러므로, 바이트형, 정수형의 경우 마지막 0번째 비트의 값에 좌우된다.

프로그램 :

IN 1, A ‘1번 포트에서 데이터를 읽음

IF A = 0 THEN OUT 2, 1 ELSE OUT 3, 1

‘1번 포트의 값이 0이면 2번포트에 HIGH출력,

‘1번 포트의 값이 1이면 3번포트에 HIGH출력,


     TOGGLE   :   특정 포트의 출력상태를 반전

: 특정 포트의 출력상태를 반전시킨다.

: TOGGLE [포트번호]

:

출력상태의 포트상태를 반전시킨다. 즉, 출력상태가 LOW이면 HIGH로, HIGH이면 LOW로 만든다.

프로그램 :

           TOGGLE  1     ' 포트1번이 "HIGH" 신호이면 "LOW" 신호로 변환

                                   ' 포트1번이 "LOW" 신호이면 "HIGH"신호로 변환하는

     BYTEOUT  : 바이트 단위로 출력하는 명령

: 바이트 단위로 출력하는 명령어

: BYTEOUT 포트 블록 번호, 변수/상수

:

BYTEOUT 명령어는 8개의 포트에서 한번에 신호를 출력하는 명령어이다. 이 명령어를 사용할 경우에는 지정된 포트블록은 모두 출력상태가 되어서 출력 외에는 다른 용도로 사용할 수 없게 된다.

프로그램 :

           I = 125

          BYTEOUT 0, I ' I의 내용을 0번 블록에 출력하라.


       IN  :   설정된 포트에서 신호를 입력하는 명령

: 설정된 포트에서 신호를 입력하는 명령어

: IN 포트 번호,바이트 변수

:

모듈상의 입출력 포트는 별도로 지정하지 않으며, 포트에 대해 입력명령을 사용하면 자동으로 입력포트가 되고, 출력명령을 사용하면 출력 포트가 된다. 모듈에 따라 입출력 포트의 종류와 사용할 수 있는 포트의 제한이 있을 수 있다. 입력포트가 0(low)이면 변수에 0이 저장되고 1(high)이면 1이 저장된다.

프로그램 :

               DIM I AS BYTE ' 변수 I를 바이트형으로 설정

                IN 1, I ' 1번 포트에서 신호를 읽어서 변수 I에 저장


     AND   :   수식의 AND 연산하는 산술연산자

: 수식의 AND 연산 결과를 구하는 산술연산자이다.

: [수식1] AND [수식2]

:

[수식1]과 [수식2]에는 변수나 상수, 수 등을 사용할 수 있으며, AND 연산자는 수식1과 수식2의 AND 연산 결과를 구한다.

프로그램 :

        DIM I AS INTEGER

             I = 50

             I = I AND 4 ' I와 4을 AND 연산처리 후에 I에 대입한다.

        OUT 2, I ' 변수 I의 값을 포트2에 출력한다.

      OR    : 수식의 OR 연산하는 산술연산자

: 수식의 OR 연산 결과를 구하는 산술연산자이다.

: [수식1] OR [수식2]

:

[수식1]과 [수식2]에는 변수나 상수, 수 등을 사용할 수 있으며, OR 연산자는 수식1과 수식2의 OR 연산 결과를 구한다.

프로그램 :

            DIM I AS INTEGER

                  I = 12

                  I = I OR 4 ' I와 4을 OR 연산처리 후에 I에 대입한다.

                  OUT 2, I ' 변수 I의 값을 포트2에 출력한다.

     XOR    :    수식의 XOR 연산하는 산술연산자

: 수식의 XOR 연산 결과를 구하는 산술연산자이다.

: [수식1] XOR [수식2]

:

[수식1]과 [수식2]에는 변수나 상수, 수 등을 사용할 수 있으며, XOR 연산자는 수식1과 수식2의 XOR 연산 결과를 구한다.

프로그램 :

            DIM I AS INTEGER

                   I = 12

                   I = I XOR 4 ' I와 4을 XOR 연산처리 후에 I에 대입한다.

                   OUT 2, I ' 변수 I의 값을 포트2에 출력한다.


     ISERVOINIT    :    서보모터 초기화 명령

: 모듈의 포트로 서보모터를 직접 구동할 경우에 서보모터 초기화

: ISERVOINT [1 서보 초기값], [2 서보 초기값], ............

:

모듈 내부에 포함된 서보기능을 시작하고 서보의 초기값을 준다. 단, 각모듈이 제어할수 있는 서보 수 이상으로 주면 안된다.

프로그램 :

ISERVOINT 20, 30, 40, 20, 20, 20 '모듈의 포트1번 서보는 20, 2번 서보는 30, 3번 서보는 40으로 초기화


     ISERVO   :   모듈의 포트로 서보모터 직접 구동명령

: 모듈의 포트로 서보모터를 직접 구동할 경우에 서보모터 변경

: ISERVO [서보번호],[서보값]

:

서보 번호에 해당하는 서보값을 변경한다. 0도부터 180도 사이를 0부터 254의 값으로 제어한다.

프로그램 :

      ISERVO 2, 40 '모듈의 포트2번 서보의 값을 40으로 설정

 

 

상호: (주) 로보블럭 / 사업자등록번호:214-86-56219 / 대표: 신대섭 / 전화번호:(02)2679-8556, Fax :(02)2679-8557
Copyright(C) 2000, (주) 로보블럭 시스템즈 All Rights Reserved / E-Mail : WebMaster