2010.08.02 15:48
PIC에서는 메모리 뱅크가 나누어져 있고, 메모리 뱅크에 관계없이 계속해서 프로그램을 만들게 되면 프로그램을 넣을 수 있는 메모리 구역을 넘어가게 되어 이상 동작이 발생하게됩니다.
여기에서는 PIC16F690을 예로 들어 설명하겠습니다.(사용이유 20PIN, 저가, NOMAL SPEC.)

000번지에서 7FF번지까지 PAGE0
800번지에서 FFF번지까지 PAGE1
로 구성되어있습니다.
(16F887같이 PAGE가 4개인 CHIP도 있습니다.)
사용자 삽입 이미지
<PIC16F690 DATASHEET에서>


PCLATH, .3을 1로 셋하거나 0으로 해서 페이지 설정을 해야함.        
- 프로그램의 길이가 길어서 페이지를 넘어가게 될경우(프로그램 확인)        
  주소 지정을 해서 번지를 옮겨주어야 합니다. (ORG 0x800)


예)
;-----------------------------------;
;             MACRO                            ;
;-----------------------------------;
;매번 뱅크를 옮길때마다 적어주는 게 번거롭기 때문에 미리 매크로 설정을 해둡니다.

SELBANK0 MACRO
  BCF STATUS,RP1
  BCF STATUS,RP0
  ENDM

SELBANK1 MACRO
  BCF STATUS,RP1
  BSF STATUS,RP0
  ENDM

SELBANK2 MACRO
  BSF STATUS,RP1
  BCF STATUS,RP0
  ENDM

SELBANK3 MACRO
  BSF STATUS,RP1
  BSF STATUS,RP0
  ENDM

SELPAGE1 MACRO
   BSF PCLATH,.3
   ENDM

SELPAGE0 MACRO
   BCF PCLATH,.3
   ENDM

;--------------------------------------;
;      RESET VECTOR              ;
;--------------------------------------;

 ORG 0x000;프로그램 시작
 GOTO PRG_START;인터럽트가 0x004번지로 기본 설정되어있으므로 그 부분을 넘어가서 프로그램 시작부분

;--------------------------------------;
;         INTERRUPT              ;
;--------------------------------------;

 ORG 0x004;인터럽트가 걸리면 무조건 0x004번지로 이동하므로 여기에서 어떤 인터럽트가 걸렸는지 확인해서 처리해줘야합니다.

;--------------------------------------;
;        MEMORY PAGE0            ;
;        PROGRAM START           ;
;--------------------------------------;

PRG_START
     SELBANK0; 매크로 설정한 부분을 불러오기(라이팅될 때는 불러온 부분이 전부 적히기 때문에 용량이 커질 수 있습니다. 편하게 하려고 매크로 설정을 막 하다가는 용량이 문제가 될 수 있습니다. 용도에 따라 CALL문을 적절히 사용해 주세요.)


;--------------------------------------;
;        MEMORY PAGE1            ;
;--------------------------------------;

 ORG 0x800


 END        

Posted by 초보 HW 엔지니어 로망와니

댓글을 달아 주세요