자료실

뒤로가기
제목

[PIC 프로그래밍] 8. PIC16F887 메모리, 인터럽트, 스택

작성자 가치창조기술(ip:)

작성일 2011-08-12 14:27:06

조회 1766

평점 0점  

추천 추천하기

내용

메모리

PIC16F887는 세가지 종류의 메모리를 가지고 있습니다. ROM, RAM, EEPROM이 그것인데 차례대로 살펴보겠습니다.

ROM MEMORY

ROM 메모리는 실행되는 프로그램을 저장하는데 사용되며 프로그램 메모리라고도 불리웁니다. PIC16F887은 8kb의 ROM( 8192 location)을 가지고 있습니다. ROM 메모리는 FLASH 기술을 이용해 만들어 졌기 때문에 ROM의 내용은 13V의 프로그래밍 전압을 인가해야만 변경이 가능합니다.

그렇기 때문에 이러한 전압을 인가하여 실행프로그램을 프로그래밍하기 위하여, 프로그래머라 불리는 하드웨어어와 소프트웨어를 사용합니다.

EEPROM MEMORY

프로그램 메모리와 비슷하게 EEPROM에 저장된 내용들은 전원이 꺼진 상태에서도 영구적으로 저장이 가능합니다. 하지만 ROM과 다른점은 EEPROM은 MCU연산 중에도 변경이 가능하다는 점에 있습니다. 그래서 EEPROM은 프로그램 연산으로 계산된 어떤 특정값이나 셋팅값을 저장하는데 많이 사용됩니다.

RAM MEMORY

마이크로프로세서의 RAM은 두개의 파트로 구성이 되어 있습니다. 하나는 general-purpose register이며 다른 하나는 special-function registers (SFR)입니다. 이 레지스터들은 4개의 메모리 뱅크에 나뉘어 있습니다.

두 종류의 레지스터는 전원이 꺼지면 데이터가 지워지고 비슷한 방법으로 제조되지만, 그 기능은 완전이 다릅니다.

GENERAL-PURPOSE REGISTERS

범용레지스터는 임시 데이터를 저장하는데 사용이 됩니다. 예를 들어 프로그램이 더하기 연산을 실행할 때 더한 결과값을 잠시 저장하는데 사용이 됩니다. 또 변수를 사용하기 위해서는 변수에 레지스터를 미리 할당해야 합니다.

SPECIAL FUNCTION REGISTERS (SFRS)

Special-function register 역시 RAM에 위치하여 있습니다만 범용 레지스터와는 다르게 SFR레지스터의 기능은 제조시에 정해져 변경될 수 없습니다. SFR레지스터의 각 비트는 칩의 여러회로( (A/D converter, serial communication module)와 연결되어 있기 때문에, SFR레지스터의 변경은 직접적으로 MCU 동작에 영향을 미치게 됩니다. 예를 들어 ADCON0 레지스터는 A/D 변환 연산을 제어하는데, 어떤 포트의 핀을 A/D 입력으로 할 것인지, 언제 변환을 시작할 것인지, 변환 속도등의 정보를 가지고 있고 비트조작을 통해 이 정보를 변경할 수 있습니다.

SFR 레지스터의 다른 특징은 이름을 가지고 있다는 점입니다. 레지스터 이름뿐 아니라 레지스터의 비트에 대한 이름도 가지고 있습니다. 이것은 프로그램 작성시 매우 편리한 사항임에 틀림없죠. 이름만으로 SFR레지스터의 정확한 주소를 접근할수 있습니다.

RAM MEMORY BANKS

RAM메모리는 4개의 뱅크로 나뉘어 있습니다. 레지스터에 접근하기 위해서는 먼저 접근하고자 하는 레지스터를 포함한 뱅크를 먼서 선택하여야 합니다. STATUS 레지스터의 두개의 비트가 뱅크 선택을 위해 사용이 됩니다. 연산을 간단히 하기 위해 흔히 사용되는 SFR은 모든 뱅크에 같은 주소를 가지고 있습니다.

어셈블리어로 프로그래밍을 한다면 뱅크를 핸들링하는것은 어려울지도 모릅니다만 C와 같은 하이레벨 언어를 사용한다면 사용하려는 레지스터의 이름만 알고 있으면 됩니다. 이 이름을 기반으로 컴파일러가 알아서 뱅크를 선택하여 명령을 수행합니다.

STACK

스택으로 사용되는 RAM의 일부는 13비트 레지스터로 구성이 되어 있습니다. MCU가 서브루틴을 실행하기전이나, 인터럽트가 발생하기 전에, 다음에 실행할 명령의 주소를 스택에 넣어놓습니다. 서브루틴이나 인터럽트 루틴이 종료될 시에 스택에 있는 주소를 보고 다시 명령을 수행할 수 있는 것이지요.

스택은 원형 스택으로 스택에 9번째 데이터를 넣으면 최초에 넣었던 첫번째 주소를 overwrite합니다. 만약 10번째 데이터를 넣으면 두번째 주소를 overwrite하겠죠. 이러한 스택 오버플로우를 알려주는 상태 비트가 없기고 데이터가 이렇게 지워지면 복구가 되지 않기때문에 프로그램 작성시 특별한 주의를 기울이셔야 합니다.

Let's do it in mikroC...

/* 어셈블리 명령으로 진입하거나 나올때, 컴파일러는 현재의 활성화된 RAM뱅크 데이터를 저장하지 않습니다.
C로 작성된 프로그램 섹션에서 다시 돌아올때, 컨트롤 비트 RP0, RP1은 반드시
어셈블리 명령을 실행하기 이전의 상태를 리턴해주어야 하는데
아래의 예제에서는 saveBank라는 변수를 이용하여 두 비트의 상태를 저장하여 해결합니다.
*/

saveBank = STATUS & 0b01100000; // Save the state of bits RP0 and RP1
// (bits 5 and 6 of the STATUS register)
asm { // Start of assembly sequence
...
... // Assembly code
...
} // End of assembly sequence
STATUS &= 0b10011111; // Bits RP0 and RP1 return their original state
STATUS |= saveBank;
...
...

INTERRUPT SYSTEM

인터럽트 요청이 도착했을때 MCU가 제일 먼저 하는 일은 실행하던 명령을 끝내자마자 현재의 프로그램 메모리를 스택에 자동적으로 집어 넣고 인터럽트 벡터라고 불리우는 주소를 프로그램 카운터에 적어 넣는 일입니다.

인터럽트 요청이 왔을때 실행되는 프로그램을 인터럽트 루틴이라고 하며, 루틴의 첫번째 명령은 인터럽트 벡터에 위치하여 있습니다. 인터럽트 루틴은 프로그래머가 작성합니다.

인터럽트루틴이 실행이 되고 마지막에 MCU가 RETFIE 인스트럭션을 만나게 되면 스택에 기존에 저장한 주소를 꺼내어 프로그램을 다시 실행합니다.

mikroC에서는 인터럽트 루틴은 void interrupt() 합수로 인식하고 그 내용은 사용자가 작성해주어야 합니다.

void interrupt() { // Interrupt routine
cnt++ ; // Interrupt causes variable cnt to be incremented by 1
}
 
가치창조기술 | www.ubiquitics.co.kr | www.vctec.co.kr 
개발용 보드

제품특징

  • PIC, dsPIC, PIC24, PIC32MX, AVR, PSoC, 8051, ARM 마이크로프로세서 지원
  • 프로그래머 및 ICD 디버거가 개발보드에 내장되어 있어 경제적
  • COG/LCD/GLCD 장착
  • MCU의 모든 핀들은 개발보드상의 인터페이스 핀에 연결되어 있음
  • 개발보드상의 DIP스위치를 이용하여 개발보드를 설정
  • MCU 핀에 LED 및 푸시버튼이 보드상에 연결되어 있음
  • 즉시 사용가능한 다양한 예제 지원
  • 마이크로일렉트로니카 컴파일러 지원
  • 다양한 개발용 악세사리를 개발보드상에 연결하여 사용이 가능

제품군:

제품군설명
Microchip PIC

Microchip PIC용 개발보드 제품군

Microchip dsPICMicrochip dsPIC용 개발보드 제품군
Microchip dsPIC24-33Microchip dsPIC24-dsPIC33용 개발보드 제품군
Microchip PIC32MXMicrochip PIC32MX용 개발보드 제품군
Atmel AVR 및 XMegaAtmel AVR 및 XMega용 개발보드 제품군
Cypress PSoCCypress PSoC용 개발보드 제품군
Atmel 8051Atmel 8051용 개발보드 제품군
NXP ARMNXP ARM용 개발보드 제품군
GPS 개발보드GPS 개발보드 제품군
MCU 컴파일러

제품특징

  • PIC, dsPIC, PIC24, PIC32, AVR, 8051 마이크로프로세서 지원
  • 편리하고 직관적인 IDE환경
  • 500개 이상의 라이브러리 함수지원으로 개발시간 절약
  • 다양한 개발용 툴 지원
  • mikroProg 하드웨어 In-Circuit Debugging 지원
  • 즉시 사용가능한 예제 지원

제품 모델:

제품설명
PIC용 컴파일러Microchip PIC용 컴파일러
AVR용 컴파일러Atmel AVR용 컴파일러
dsPIC30/33 및 PIC24용 컴파일러Microchip dsPIC30/33 및 PIC24용 컴파일러
PIC32용 컴파일러Microchip PIC32용 컴파일러
8051용 컴파일러Atmel 및 Silicon Labs 8051용 컴파일러

개발용 악세사리보드

제품특징

  • 악세사리보드로 다양한 MCU와 주변장치의 기능을 테스트
  • 통신/저장/시간측정/디스플레이/측정/오디오/전원공급/기타 등의 악세사리보드
  • Mikroelektronika 개발보드에 연결하여 사용 가능
  • 즉시 사용 가능한 예제 제공

제품군:

제품군설명
통신용 보드통신용 악세사리보드
스토리지 보드스토리지용 악세사리보드
시간측정용 보드시간측정용 악세사리보드
디스플레이 보드디스플레이용 악세사리보드
센서 및 측정보드센서 및 측정용 악세사리보드
오디오 및 보이스 보드오디오 및 보이스용 악세사7리보드
전원제어보드전원제어용 악세사리보드
기타보드릴레이, RFID, 센서 등의 다양한 악세사리보드

MCU 개발용 키트

제품특징

  • PIC, dsPIC, PIC24, PIC32, AVR, 8051 마이크로프로세서 지원 개발용 키트
  • 개발에 필요한 개발보드, 컴파일러 및 악세사리보드 포함
  • 개발용 키트 묶은 구매로 개별구매보다 저렴

제품군:

Part Number모델 설명
PIC 개발용 키트Microchip PIC 개발용 키트
dsPIC30 개발용 키트Microchip dsPIC30 개발용 키트
dsPIC33-PIC24 개발용키트 Microchip dsPIC33-PIC24 개발용 키트
AVR 및 XMega 개발용키트Atmel AVR 및 XMega 개발용 키트

8051 개발

용 키트

Atmel 및 Silicon Labs 8051 개발용 키트        


 



 

첨부파일

비밀번호
수정

비밀번호 입력후 수정 혹은 삭제해주세요.

댓글목록

등록된 댓글이 없습니다.

댓글 수정

이름

비밀번호

내용

/ byte

수정 취소

비밀번호

확인 취소

댓글 입력

이름

비밀번호

내용

/ byte

평점

관리자에게만 댓글 작성 권한이 있습니다.