PIC의 명령 구조

[명령의 구조]

PIC의 명령은 다음 4종류로 대별된다. 다음에 각 명령어의 구조를 설명한다.
바이트 처리 명령
비트 처리 명령
리터럴(literal) 처리 명령
점프 명령
 

 (1) 바이트 처리 명령



'명령 코드': 모든 명령을 구별하기 위한 것으로 명령마다 하나의 코드가 대응하고 있다.
f: file register의 약자로 명령의 대상이 되는 변수 레지스터의 어드레스를 지정한다.
이 f는 7비트이기 때문에 어드레스로서는 00부터 7F로, 128개까지 지정할 수 있다.
이 레지스터의 지정 방법에는 프로그램 가운데서 설정한 변수의 레이블을 사용할 수 있다.

(예)
INCF             COUNTER,F                (COUNTER가 변수명)
MOVF           FLAG,W                      (FLAG가 변수명)

d: desitination select의 약자이며, 명령의 실행 결과를 어디에 저장할 것인가를 지정한다.
d=0일 때는 working register(Wreg)에 저장
d=1일 때는 f에서 지정되어 있는 file register에 저장
이 d의 서식은 W 또는 F로 쓴다.

(예)
DECF            INTERVAL,F                 (f를 F로 쓰면 d=1)
RLF              POSITION,W                 (f를 W로 쓰면 d=0)
 

  (2) 비트 처리 명령  



f: file register의 약자로 상기와 완전히 같은 것이다.
b: bit address를 나타내는 것으로, 3비트이므로 0부터 7까지 8비트를 지정할 수 있다.
여기의 서식에도 프로그램으로 지정한 레이블을 사용할 수 있다.

(예)
BTFSS          STATUS,Z                    (Z=2로 지정되어 있다)
BSF              PORTA,RA3                  (RA3=3으로 지정되어 있다)
 

  (3) 리터럴 관련 명령



k: Literal의 의미로, 정수를 직접 사용할 때에 지정한다.
8비트(1바이트)의 정수를 지정할 수 있다.
따라서 통상적인 1바이트 문자 코드를 직접 취급할 수 있다.

(예)
MOVLW        'A'                               (문자 코드(3A)를 Wreg에)
ADDLW         0FH                              (16진수 0F를 Wreg에 가산)


  (4) 점프 명령



k: Address literal이 들어간다. 11비트까지의 어드레스를 직접 지정할 수 있게 된다.
따라서 최대 2k바이트까지 사용할 수 있는 것이다.
일반적으로 이 k에는 점프처의 레이블을 쓴다.

(예)
GOTO          LOOP                         (LOOP가 레이블)
CALL           INPUT                         (INPUT이 레이블)

 


[STATUS REGISTER]

Status Register란, 각 명령의 실행 결과가 반영되는 플래그류가 모여 있는 레지스터이다.
내용은 아랫 그림과 같이 되어 있으며, 각각의 의미는 다음과 같다.


IRP

RP1

RP0

TO

PD

Z

DC

C


IRP: 간접 어드레스시 레지스터의 Bank 선택 제어용
       0: Bank0           (00-FF)
       1: Bnak1           (100-1FF)
                              (주: PIC16F84에서는 사용하지 않음)

RP0, RP1: 직접 어드레스시 레지스터의 Bnak 선택 제어용
       00: Bank0         (00-7F)
       01: Bank1         (80-FF)      각 Bank은 128바이트씩
       10: Bank2         (100-17F)
       11: Bnak3         (180-1FF)
                              (주: PIC16F84에서는 RP0만 사용한다)

TO: 시스템 내부의 기동 타이머의 상태를 표시한다
        1: 전원 투입후, CLRWDT 명령, SLEEP 명령 실행후
        0: watchdog timer가 time up했을 때

PD: 전원 절단 플래그
        1: 전원 투입후 또는 CLRWDT 명령 실행후
        0: SLEEP 명령 실행후

Z: zero flag
        1: 산술, 논리연산 명령 실행후가 0일 때
        0: 산술, 논리연산 명령 실행후가 0이 아닐 때

DC: 자리의 carry flag
        (ADDWF, ADDLW, SUBWF, SUBLW 명령으로 사용)
        1: 명령 실행후 하위 4비트가 overflow 했을 때
        0: 명령 실행후 하위 4비트가 overflow 하지 않았을 때

C: carry flag
        1:산술, 논리연산 명령 실행후 8비트가 overflow 했을 때
        0:산술, 논리연산 명령 실행후 overflow 하지 않았을 때


다음 페이지로         목차 페이지로