pic 마이컴의 프로그래밍 - 칩 마이컴... · pdf file전자 55 월간...

12
전자 54 54 원칩 마이컴 실천 입문 落合 幸喜 자작 ROM라이터와 프리 제어 소프트웨어로 가볍게 시작하자. 本 記事는 日本 CQ出版社가 發行하는 「トランジスタ技術」誌와의 著作權 協定에 依據하여 提供받은 資料입니다. 제3장 PIC 마이컴의 프로그래밍 PIC 마이컴의 프로그래밍 개발에 무엇이 필요한가? ● 퍼스널컴퓨터 개발을 진행하는 경우, PC 필수 불가결한 존재이 . 개발용 PC 에는 PC/AT 호환기나 일본전기의 PC9821 시리즈가 좋을 것이다. OS MS DOS Windows95 이상이 필요하다. WindowsNT 에서는 자작 라이터를 움직이는 소프트웨어가 한정되어 있으 므로 주의해야 한다. 가능하면 MS DOS 보다도, 디터나 컴파일러를 동시에 열고 작업할 있는 Win- dows좋다. 본고에서는 Windows95 베이스에서의 개발을 설명하지만, 기본적으로 필요한 것은 MS DOS 에서도 마찬가지이다. ● 텍스트 에디터 프로그램을 기록하기 위해서는, 텍스트 에디터가 요하다. Windows 기본적으로 깔려있는 “메모장”으 충분하지만, 사용하던 것이 있다면 그쪽을 사용하 . , 파일을 텍스트 형식으로 보존할 있어야 . 워드 패드나 워드프로세서 소프트웨어에서도 있지만, 별로 적합하지 않다. ● 어셈블러, 컴파일러 애써 만든 프로그램도 상태로는 PIC 마이컴( 이하 PIC) 기록하고 동작시킬 없다. PIC 이해할 있도록 데이터를 변환해야 한다. 이것을 실행하는 것이 어셈블러나 컴파일러라고 소프트웨어이다. PIC 시리즈의 개발처인 마이크로칩테크놀로지사에서 어셈블러 소프트웨어를 무상 포하고 있다. 우선 어셈블러가 있다면 개발할 있다. 다수의 서드 파티도 C컴파일러를 발매하고 있다. ● 라이터와 라이터 소프트웨어 PIC 프로그램을 기록하기 위해서는 ROM 라이터 ( 이하 라이터) 그것을 제어하는 소프트웨어가 필요 하다. PIC 라이터는 하드웨어가 단순하므로 간단하 자작할 있다. 안정도면에서는 기존제품에 맞지 지만, 취미나 실험용도라면 충분하다. 또한, 제어용의 소프트웨어도 다수 만들어지고 있어서, 인터넷 등을 입수할 있다. 우선은 ROM라이터를 만든다. PIC 개발하는 경우, 먼저 라이터가 필요하다. PIC 나오기 시작한 무렵과 비교하면 시판품의 라이터도 매우 입수하기 쉬워 졌다. 그것을 구입해도 좋고, 자작 가능하다. 자작하면 개발환경에 드는 비용을 대폭 축할 있다. ● 인 서킷 시리얼 프로그래밍 PIC 시리즈의 특징 하나에, 서킷 시리얼 프로

Upload: lamnhan

Post on 07-Mar-2018

294 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: PIC 마이컴의 프로그래밍 - 칩 마이컴... · PDF file전자 55 월간 전자기술/ ’99년 11월호 55 pic 마이컴의 프로그래밍 그래밍(icsp)이 있다. 이전에는

전자 54

54

원칩 마이컴 실천 입문

落合 幸喜

자작 ROM라이터와 프리 제어소프트웨어로 가볍게 시작하자.

本 記事는 日本 CQ出版社가 發行하는 「トランジスタ技術」誌와의 著作權 協定에 依據하여 提供받은 資料입니다.

제3장

PIC 마이컴의 프로그래밍PIC 마이컴의 프로그래밍

개발에 무엇이 필요한가?

퍼스널컴퓨터개발을 진행하는 경우, PC는 필수 불가결한 존재이

다. 개발용 PC에는 PC/AT호환기나 일본전기의PC9821시리즈가 좋을 것이다. OS는 MS-DOS나Windows95 이상이 필요하다. WindowsNT에서는자작 라이터를 움직이는 소프트웨어가 한정되어 있으므로 주의해야 한다. 가능하면 MS-DOS보다도, 에디터나 컴파일러를 동시에 열고 작업할 수 있는 Win-dows가 좋다. 본고에서는 Windows95 베이스에서의개발을 설명하지만, 기본적으로 필요한 것은 MS-DOS에서도 마찬가지이다.

텍스트 에디터프로그램을 기록하기 위해서는, 텍스트 에디터가 필

요하다. Windows에 기본적으로 깔려있는 “메모장”으로 충분하지만, 사용하던 것이 있다면 그쪽을 사용하자. 단, 파일을 텍스트 형식으로 보존할 수 있어야 한다. 워드 패드나 워드프로세서 소프트웨어에서도 쓸 수는 있지만, 별로 적합하지 않다.

어셈블러, 컴파일러애써 만든 프로그램도 그 상태로는 PIC 마이컴(이하

PIC)에 기록하고 동작시킬 수 없다. PIC가 이해할 수있도록 데이터를 변환해야 한다.

이것을 실행하는 것이 어셈블러나 컴파일러라고 하는 소프트웨어이다.

PIC시리즈의 개발처인 마이크로칩테크놀로지사에서는 어셈블러 소프트웨어를 무상배포하고 있다. 우선 이어셈블러가 있다면 개발할 수 있다. 다수의 서드 파티도C컴파일러를 발매하고 있다.

라이터와 라이터 소프트웨어PIC에 프로그램을 기록하기 위해서는 ROM라이터

(이하 라이터)와 그것을 제어하는 소프트웨어가 필요하다. PIC의 라이터는 하드웨어가 단순하므로 간단하게 자작할 수 있다. 안정도면에서는 기존제품에 맞지 않지만, 취미나 실험용도라면 충분하다. 또한, 제어용의소프트웨어도 다수 만들어지고 있어서, 인터넷 등을 통해 입수할 수 있다.

우선은 ROM라이터를 만든다.

PIC를 개발하는 경우, 먼저 라이터가 필요하다. PIC가 나오기 시작한 무렵과 비교하면 시판품의 라이터도매우 입수하기 쉬워 졌다. 그것을 구입해도 좋고, 자작도 가능하다. 자작하면 개발환경에 드는 비용을 대폭 감축할 수 있다.

인 서킷 시리얼 프로그래밍PIC시리즈의 특징 중 하나에, 인 서킷 시리얼 프로

Page 2: PIC 마이컴의 프로그래밍 - 칩 마이컴... · PDF file전자 55 월간 전자기술/ ’99년 11월호 55 pic 마이컴의 프로그래밍 그래밍(icsp)이 있다. 이전에는

전자 55

55월간 전자기술/ ’99년 11월호

PIC 마이컴의 프로그래밍

그래밍(ICSP)이 있다. 이전에는 인 시스템 프로그래밍(ISP)라고 하던 기능이었다. PIC16C5x시리즈를 제외한 대부분의 디바이스가 내장된 기능으로서 칩을 타겟 보드상에 탑재한 상태에서 프로그램의 기록/고쳐 쓰기가 가능하다.

ICSP의 최대 이점은 기록에 필요한 회로, 즉 라이터를 간단하게 제작할 수 있는 것이다. ICSP를 실현하기위해서, 칩 내부에 라이터로서 기능하는 회로를 만들었으므로 외부는 단순한 회로가 좋다. 자작 라이터도 이기능을 이용하고 있다.

자작 라이터의 개요그림 1은 PIC라이터의 회로도이다. 큰 부품은 트랜

지스터 3개와 IC 1개, 3단자 레귤러 2개 정도의 단순한구조이다. 이 회로는 마이크로칩테크놀로지사의 애플리케이션 노트 AN589를 개량한 것이다.자작한 것으로서 각종 다기능 라이터는 있지만, 이번에는 간단히 만들 수 있는 것에 중점을 두겠다.다음의 주의점만 지키면, 동작할 수 있다.·케이블은 짧게 한다.·기판의 패턴도 짧게 하여, 가능한 한 스페이스를압축하여 실장한다.·트랜지스터는 주파수 특성이 좋은 것으로 한다.이렇게 해도 동작하지 않는 경우는, 노이즈 대책을세워야 한다.참고로 그림 2에 안정성을 중시한 라이터의 회로도

프린터인터페이스

그림 1. 심플한 구조의 PIC라이터주 74LS244의 말미용 핀은 개방한 체로 한다.

74LS244의 VCC

PIC16F84로

36핀 프린터 커넥터의 핀 번호

사진 1. 제작한 PIC라이터

Page 3: PIC 마이컴의 프로그래밍 - 칩 마이컴... · PDF file전자 55 월간 전자기술/ ’99년 11월호 55 pic 마이컴의 프로그래밍 그래밍(icsp)이 있다. 이전에는

전자 56

56

원칩 마이컴 실천 입문

언급해 두겠다.

라이터의 제작회로는 단순하기 때문에 프린트 기판 등을 일으키지

않고 유니버설 기판에 만드는 쪽이 빨리 제작할 수 있다. 실제로 제작한 라이터를 사진 1에 나타낸다. IC를간단하게 떼어 낼 수 있으므로 제로 프레셔 소켓을 사용했지만, 일반적인 IC소켓이라도 상관없다.필자는 전원에 건전지를 사용했지만, 006P의 전지

를 2개 직렬로 연결하면 18V를 낼 수 있으며, 그다지전류가 필요한 디바이스도 없으므로 이것으로 충분했다. 5V나 12V의 전원은 있어도, 15V이상의 전원이없는 경우는 건전지로 해 본다. 단, 알칼리 전지를 사용해야 한다.

제작한 라이터의 체크철저하게 회로를 체크하지 않으면 최악의 경우, PC

가 파손된다. 많은 시간을 들여 체크해야 한다.우선 회로도와 대조하여 배선을 체크한다. 기판의 패

턴도를 만드는 경우에도 반드시 회로도에서 체크한다.

배선 체크가 끝나면 금방 PC에 연결하지 말고, 전원만을 연결하여 프린터 커넥터의 각 단자의 전압을 측정한다.단자-GND간에 10kΩ 정도의 저항을 연결하여 단자간 전압이 300mV 정도라면 우선 문제는 없을 것이다. 프로그래밍 전압 VPP(13.5V)를 출력하는 경우는접속 미스이므로 다시 한번 배선을 체크하자.

타겟 보드의 제작

자신이 기록한 소프트웨어를 동작시키기 위한 기판(타겟 보드)을 만든다. 이번에는 플래시 메모리를 내장한 PIC16F84를 사용한다. PIC16F84는, EPROM내장 타입과 같이 자외선 소거를 하지 않아도 반복해서바꿔 쓰기가 가능하다. 실제 기기 상에서 프로그램을 바꿔 쓰면서 디버그하는 경우 등에 편리하다. 사진 2는 제작한 타겟 보드이다.

타겟 보드의 구성그림 3에 회로도를 나타낸다. 보드 A에 스위치 입력

74LS125의핀 7로

그림 2. 안정동작을 중시한 PIC라이터

36핀 커넥터

74LS125의핀 14로

Page 4: PIC 마이컴의 프로그래밍 - 칩 마이컴... · PDF file전자 55 월간 전자기술/ ’99년 11월호 55 pic 마이컴의 프로그래밍 그래밍(icsp)이 있다. 이전에는

전자 57

57월간 전자기술/ ’99년 11월호

PIC 마이컴의 프로그래밍

을 5개, 보드 B에 LED를 8개 접속하고 있다. 이 만큼의 입출력이 있으면 어느 정도 프로그램을 쓰고 동작시킬 수 있다. 앞으로 PIC연구를 시작하는 분이라도 간단하게 제작할 수 있다. 간단하게라도 회로를 구성할 줄알아야 한다. 막상 프로그램을 만들었을 때, 그것이 소프트웨어상의 버그인지, 하드웨어상의 버그인지를 구분할 수 있기 때문이다.전원은 전지를 접속할 수 있도록 한다. 006P전지 1

개부터, 3단자 레귤레이터의 7805를 사용하여 5V를

생성하고 있다.

라이터 제어용 소프트웨어의 입수

라이터와 타겟 보드도 완성했을 즈음, 이번에는 라이터를 제어하기 위한 소프트웨어를 입수한다. ICSP타입의 라이터를 제어하는 소프트웨어는 여러 가지 있다.NIFTY-Serve나 CQ출판 홈페이지, 개인 홈페이지등 네트워크를 통하여 간단하게 입수할 수 있다. 주요한

사진 2. 제작한 타겟 보드

X1

10.0MHz세라믹 발진자

그림 3. 타겟 보드의 회로

Page 5: PIC 마이컴의 프로그래밍 - 칩 마이컴... · PDF file전자 55 월간 전자기술/ ’99년 11월호 55 pic 마이컴의 프로그래밍 그래밍(icsp)이 있다. 이전에는

전자 58

58

원칩 마이컴 실천 입문

소프트웨어를 간단하게 소개하겠다.

PICEE野澤康夫씨가 제작한 MS-DOS상에서 동작하는 라

이터 제어 소프트웨어이다. PIC16C(F)84이외에도 8핀 디바이스의 PIC12C50X 등, 여러 가지 칩에 기록할 수 있다. NIFTY-Serve의 FDEVICE 등에서 입수할 수 있다.

PICWW石島誠一郞씨가 제작한 Windows95(98)상에서 동

작하는 라이터 제어 소프트웨어이다. 보기에도 알기 쉬운 마이컴 표시나 메모리 업 표시도 갖추고 있다. 또한

고속으로 기록할 수 있도록 튜닝되어 있다. 石島씨의 홈페이지(http://www.ops.dti.ne.jp/~ishijima/sei/)에서 다운로드할 수 있다.

PICer小野寺康幸씨가 제작한 Windows95(98), 그리고

WindowsNT에서 동작하는 라이터 제어 소프트웨어이다. 대부분의 소프트웨어는 WindowsNT에서 사용할 수 없지만, 이 소프트웨어는 Windows의 API만을사용하여 기록되었기 때문에 NT에서도 동작한다. 어셈블러나 역어셈블러도 탑재되어 매우 고기능이다.Scenix사의 SX칩에도 대응하고 있는 것도 특징 중 하나이다.

2,000엔의 셰어 웨어이다.http://www.geocities.co.jp/Colosseum/

1185/picer.html

Easy-PIC for Windows95필자가 제작한 Windows95(98)대응의 라이터 제어소프트웨어이다. 모두 일본어표기의 알기 쉬운 화면으로서, 컨피규레이션을 간단하게 바꿀 수 있도록 화면상에 버튼을 배치하여, 직감적인 조작이 가능하도록 만들었다. 이번은 이 소프트웨어를 사용하여 기록절차를 소개하겠다. 아래의 홈 페이지에서 다운로드할 수 있다.

http;//www.dl.dion.ne.jp/~k-ochiai

그림 4. 프린터 포트의 프로퍼티

CANCEL

EPSON 프린터 포트(LPT1)의 프로퍼티

전반 드라이버 리소스

EPSON 프린터 보드(LPT1)

자동설정 사용(U)

기본으로 하는 설정(B) 기본설정 0000

리소스의 종류 설정인터럽트요구 07

I/O의 범위 0378-037F

설정의 변경(C)

경합하는 디바이스

경합은 없다.

OK

그림 5. 포트 설정의 옵션 메뉴

OK

옵션의 설정

포트 타입

AT호환기 LPT1〔0×378-0×379〕

AT호환기 LPT2〔0×3BC-0×3BD〕

AT호환기 LPT3〔0×278-0×279〕

PC-9801(21)프린터 포트〔0×40-0×42〕

PC-9821확장 프린터 포트 〔0×140-0×141〕

ROM라이터 타입

AN589타입(ACK 피드 백)

트랜지스터 기술 타입(Busy 피드 백)

CANCEL

그림 6. Easy-PIC의 메인 윈도우

Easy-PIC for window95파일(F) 컨트롤(C) 도움말(H)

대상 파일

INHX8M

INHX16

파일 타입

PIC타입

PIC16F84

오실레이터

XT HS

LP RC

코드 프로텍션

0% 50%

75% 100%

워치도그 타이머

파워 업 타이머

브라운 아웃 리셋

기록개시

블랭크 체크

EEPROM 소거

ID 필드

ID

캘리브레이션

OSCCAR 판독

스테이터스Configuration Word=0×3FF2

Page 6: PIC 마이컴의 프로그래밍 - 칩 마이컴... · PDF file전자 55 월간 전자기술/ ’99년 11월호 55 pic 마이컴의 프로그래밍 그래밍(icsp)이 있다. 이전에는

전자 59

59월간 전자기술/ ’99년 11월호

PIC 마이컴의 프로그래밍

프로그램을 기록한다.

Easy-PIC for Windows95의 인스톨Easy-PIC를 다운로드한 후에 우선 압축한 파일을

열면, setup.exe라는 실행파일과 그 이외의 데이터 파일이 나온다. setup.exe를 실행하면 인스톨을 개시한다.인스톨이 종료되면 시작 메뉴에 프로그램이 등록되

므로 아이콘을 클릭하여 기동한다.

보드 설정처음으로 기동할 때는 보드 설정을 재촉하는 메시지

를 표시한다. 여기에서 보드를 설정하기로 하자. 우선,“My Document”의 아이콘을 클릭하고 도구를 부른다. 프로퍼티 내부의 “디바이스 매니저”→포트에서 프린터 보드의 어드레스를 알 수 있다. 그림 4에 프린터포트의 프로퍼티 화면을 나타낸다.이 어드레스의 선두와 같은 번호를 Easy-PIC상에

서도 설정한다. Easy-PIC측은 “메뉴”→“컨트롤”→“옵션”의 순으로 선택하여, 옵션 설정의 윈도우를 연다(그림 5). 그림 4에서는 어드레스 378h부터 시작되고 있으므로 LPT1에 설정했다. 또한, 여기에서 제작한 라이터의 타입도 지정해 둔다. 이번에 소개한 라이터는 피드백에 busy신호를 이용하므로 “트랜지스터 기술 타입”이 된다. 설정이 끝나면, 반드시 “OK”를 누르고 설정을보존한다. “취소”를 누르면 설정이 반영되지 않는다.

기록전의 설정Easy-PIC를 기동하면 그림 6과 같은 윈도우가 표

시된다. Easy-PIC는 샘플 소스를 첨부하고 있으므로 이것을 시험삼아 기록해본다. 프로그램을 인스톨한

홀더(디폴트에서는 C:¥Program Files¥K'sworks¥Easy-PIC)에 있는 Eeptest.asm과Eeptest.hex가 샘플이다. 이것은 LED가 하나씩 좌우로 점등/점멸을 반복하는 프로그램이다. 설정절차는아래와 같다. 파일명을 지정한다.우선, “대상 파일”이라 쓰여진 곳에 파일명을 지정한다. 키 입력이 귀찮으면, 그 옆 버튼을 클릭하면, 파일 선택의 다이얼로그가 나온다(그림 7).또한, 파일을 drag & drop할 수도 있다. 여기에서 Eeptest.hex를 선택하자.

파일 타입을 지정한다.샘플 소스는 마이크로칩테크놀로지사의 어셈블러인 MPALC의 입력 파일 형식“INHX8M”에서어셈블하므로, 합쳐서 형식을 지정한다.

칩 타입을 지정한다.칩 타입이라고 쓰여진 곳에서 목적한 칩을 선택한다. 이번에는 PIC16F84를 사용한다.

컨피규레이션을 지정한다.타겟이나 사용조건에 맞추어 컨피규레이션을 지정한다. 타겟 보드는 10MHz에서 동작하므로,오실레이터 타입은 HS를 지정한다.

보통 코드 프로텍션은 0%로 설정한다. 특히 PIC16F(C)84이외의 디바이스에서는 소거불능 되는 경우가있으므로 필요시 이외는 0%로 한다.워치도그 타이머는 사용하지 않으므로 체크를 떼어둔다. 마지막으로 파워 업 타이머를 체크하면 된다. 기본적으로는 이상의 절차만으로 충분하다. 설정한 컨피규레이션은 다음의 기동시에도 반영되므로, 하나하나설정하는 불편을 덜어준다.

그림 7. 파일 선택의 다이얼로그 박스

그림 8. 기록개시의 확인

OPEN(O)

OPEN

파일의 장소(I) Easy-PIC

manual

Eeptethex

파일명(N)

파일의 종류(T) INTEL HEX파일

기록의 개시

예(Y) 아니오(N)

PIC16F84의 프로그램 영역데이터 영역컨피규레이션 영역에 기록을 개시합니다.괜찮습니까?

CANCEL

Page 7: PIC 마이컴의 프로그래밍 - 칩 마이컴... · PDF file전자 55 월간 전자기술/ ’99년 11월호 55 pic 마이컴의 프로그래밍 그래밍(icsp)이 있다. 이전에는

전자 60

60

원칩 마이컴 실천 입문

기록실행준비가 다 되었으면, 이제 칩에 기록한다. 제작한 라

이터에 칩을 세트하여 전원을 넣는다. PIC16F84의 경우는, 기록하기 전에 칩 이레이즈(erase)가 필요하지만, 소프트웨어상에서 기록하기 전에 이레이즈하고 있으므로 특별히 실행할 필요는 없다.다시 한번 컨피규레이션의 설정을 확인 후, 만족하면

“기록개시”의 버튼을 누른다. 대상 파일에 이상이 없으면 그림 8과 같이 최종확인의 메시지를 표시하는 “예”를누른다. “기록이 완료되었다”는 메시지가 뜨면, 무사히기록은 종료된 것이다. 라이터의 전원을 끄고, 칩을 꺼내자.

최악의 경우 에러가 나왔을 때Easy-PIC에서는 확실하게 기록하기 위하여 다양

한 체크를 한다. 그리고 각 단계에서 체크에 걸렸을 때,에러 메시지를 표시한다. 만약 아래의 에러가 발생한 경우는, 적절한 대처를 해야 한다. 파일이 없는 경우그림 9와 같은 메시지가 나온 경우는, 대상 파일

의 이름이 잘못된 것이므로 정확하게 고친다. 다이얼로그 박스에서 지정하든지, drag & drop파일로 지정하면 파일명이 틀리는 일이 없다.

파일 에러가 나온 경우그림 10의 메시지가 나온 경우는 대상 파일이 인텔 헥서 방식의 INHX8M나 INHX16가 아닐 수도 있다. 지정한 파일이 올바른 대상 파일인지 확인한다.

체크 섬 에러가 나온 경우파일 타입이 틀려서 그림 11의 에러가 나올 수도있다. INHX8M또는 INHX16을 교체하여 다시“기록개시”를 클릭해 본다. 그래도 안 된다면 대상파일이 깨졌을 수도 있다.

어드레스 0x0000에서 Result값이 0x0000나0x3FFF로 에러가 난 경우그림 12의 에러는 기록한 데이터를 PIC에서 정상적으로 읽지 않았을 때에 발생한다. 어드레스0000h에서 실패한 경우는 라이터의 접속 미스나보드의 설정 미스, 라이터의 전원이 들어오지 않는 것 등을 생각할 수 있다.

OK

레코드 마크를 검출할 수 없습니다.파일 형식이 틀립니다.

대상 파일에서 컨피규레이션 워드의 데이터를 검출했습니다.

대상 파일의 데이터에서 기록을 합니까?

“예”를 누르면, Easy-PIC상에서 설정한 데이터는 무시됩니다.

그림 9. 파일을 못 찾았을 때의 에러 메시지

파일 에러

대상 파일을 찾을 수 없습니다.

그림 11. 체크 섬 에러

체크 섬 에러

체크 섬 에러를 검출했습니다.파일 타입 설정이 틀리거나 대상 파일이 바르게 생성되지않았습니다

OK

그림 10. 파일 에러

파일 에러

OK

그림 12. 어드레스 0×0000에서의 라이트 에러

라이트 에러가 발생했습니다.Address=0×0000Correct=0×2805Result=0×0000기록을 중지합니다.

OK

라이트 에러

그림 13. 어드레스 0x0000 이외에서의 라이트 에러

라이트 에러가 발생했습니다.Address=0x0026Correct=0x0211Result=0x0000기록을 중지합니다.

라이트 에러

OK

그림 14. 컨피규레이션 워드의 선택

ID 컨피규레이션을 검출

예(Y) 아니오(N)

Page 8: PIC 마이컴의 프로그래밍 - 칩 마이컴... · PDF file전자 55 월간 전자기술/ ’99년 11월호 55 pic 마이컴의 프로그래밍 그래밍(icsp)이 있다. 이전에는

전자 61

61월간 전자기술/ ’99년 11월호

PIC 마이컴의 프로그래밍

어드레스 0x0000이외의 장소에서 에러가 나온경우그림 13의 메시지가 나온 경우, 프린터 보드에서라이터로 연결되는 신호선에 노이즈가 생기고 칩에 리셋이 걸린 것이다 케이블이나 라이터에 노이즈 대책을 세운다.

그 이외의 테크닉 EEPROM에 데이터를 기록한다.

PIC16F(C)84에는 데이터용의 EEPROM이 있다. 프로그램을 기록할 때에 동시에 이 영역에도기록할 수 있다. 물론, 프로그램을 기록한 후에도별도로 기록할 수 있다.Easy-PIC에서는 데이터 영역의 선두 어드레스를 2100h번지로 하고, 하나의 대상 파일에서 프로그램과 데이터를 판독하는 “일괄처리 방식”을채용하고 있다. 어셈블러에서 데이터를 기술할 때는 org명령 등으로 2100h번지를 설정하여, de명령으로 데이터를 쓴다.

소스 파일상에 컨피규레이션 워드를 기록해 둔다.마이크로칩테크놀로지사의 MPASM 등, PIC용의 어셈블러나 컴파일러에서는 소스 파일 내부에컨피규레이션 워드 등을 기술할 수 있다. 기술방법은 각 어셈블러나 컴파일러의 설명서를 참고로한다. Easy-PIC가 대상 파일 내부에서 그 데이터들을 검출한 경우는 그림 14의 윈도우가 나와,Easy-PIC 상에서 설정한 데이터를 사용할 것인지, 대상 파일 내부의 데이터를 사용할 것인지를 묻는다. 화면 지시에 따라서, “예” 또는 “아니오”를 선택한다. “아니오”를 선택하면 소스 파일상의 데이터를 무시하고, Easy-PIC에서 설정한데이터로 기록한다.

개발언어의 종류

PIC의 프로그램을 쓰기 위해서는 어셈블러, BASIC,그리고 C언어 등의 개발언어를 사용해야 한다. 대표적인 것을 아래에 나타낸다.

어셈블러 MPASM

마이크로칩테크놀로지사 순정의 어셈블러로서, 이회사의 홈페이지에서 다운로드할 수 있다. 가장일반적인 PIC용 어셈블러 소프트웨어이며, Win-dows용과 DOS용이 있다.

PA秋月電子通商이 제작한 어셈블러이다. PIC 명령세트 이외에, 그것들을 내장한 편리한 확장명령을추가하고 있다. 그러나, 그 확장명령들을 사용하여 PA용으로 기록한 소스에서는 다른 어셈블러에서 그대로 어셈블할 수는 없다.

BASIC PIC BASIC-STAMP미국 Parallax사가 발매하는 BASIC이다. 다른언어와 달리, 인터프리터라 불리 우는 소프트 웨어를 기록한 PIC와 세트로 사용한다.

C컴파일러 PicC미국 Grich RC사 제품의 C컴파일러로서, 다른C컴파일러와 비교하여 압도적으로 염가인 것이특징이다. 정규제품이라면 6,000엔, 프로그램용량을 1K워드로 한정한 것이라면 2,000엔 정도에서 구입할 수 있다. 이 컴파일러는 Windows용이므로, DOS에서는 동작하지 않는다. 秋月電子通商에서 구입할 수 있다.

CCS-C미국 CCS사 제품의 C컴파일러로서 일본에서는(주)아이 피 아이가 취급하고 있다. 타입별로 세개의 제품이 있고, 12비트 시리즈용의 PCB, 14비트 시리즈용의 PCM, 그리고 Windows용 통합환경을 세트한 PCW가 발매되고 있다.

C언어에 의한 개발법

PIC시리즈는 단지, 35개 명령의 내장으로 프로그래밍할 수 있다. 명령자체를 기억하는 것은 별로 어렵지않지만, 그것들을 조합하는 것이 의외로 귀찮다. 특히,점프나 분기 등의 판정은 익숙해지기까지 어렵다. 따라서 어셈블러가 아니라 C언어를 사용하여 가장 간단하게 프로그래밍하는 절차를 설명하겠다.

Page 9: PIC 마이컴의 프로그래밍 - 칩 마이컴... · PDF file전자 55 월간 전자기술/ ’99년 11월호 55 pic 마이컴의 프로그래밍 그래밍(icsp)이 있다. 이전에는

전자 62

62

원칩 마이컴 실천 입문

C언어의 장점과 단점PIC의 프로그램과 C언어로 기록함으로써, 다음과

같은 장점을 얻을 수 있다.·PIC의 명령 세트를 기억하지 않아도 된다.·수치를 계산하는 경우에 위력을 발휘한다.·if(), for(), while() 등 다양한 분기나 루프를 사용할 수 있다.·레지스터의 확보가 수월하다.·소스의 유용이 수월하다.·C언어의 참고서가 많이 있다.그러나, 장점만 있는 것이 아니라, 단점도 있다.·어셈블러와 비교하여, 프로그램 메모리를 많이 소비한다.·동작속도를 예측하기가 곤란하다.정확한 타이밍을 요구하는 애플리케이션에는 어렵겠

지만, C의 소스 내부에 어셈블러의 소스를 보충하는,인라인 어셈블러를 사용하면 어느 정도 대응할 수 있다.

C로 기록하는 어셈블리의 구조C언어로 프로그램을 기록할 때, 크게 3개 부분으로

나눌 수 있다. 프리 프로세서 명령

C 소스를 컴파일하기 전에 소스 자체를 가공하는 것이다. 프리 프로세서를 제어하는 명령은#include, #define 등, 앞에 “#”가 붙는다. 주로사용하는 것은 #include와 #define이며, 대부분프로그램 선두에 기술한다. #include는, 영어의 include(“∼를 포함한다.”의 의미) 문자 그대로 작용한다. #include에서나타나는 파일을 소스 파일에 인출하여, 함께 컴파일한다. 특히, 확장자 “h”의 파일은 헤더 파일이라 불리 우며, PIC에서는 메모리 용량을 나타내거나, 할당 어드레스를 나타내는 경우에 사용한다. #define은 문자 열을 치환한다. 어셈블러에서는 EQU 등에 해당된다. 예를 들면, #define CVAL 128로 한 경우, 소스 내부의 CVAL이라는 단어는128이라는 정수로 치환될 수 있다. 문자열을 치환하기 때문에, 정수 이외에도 수식 등으로 치환할 수도 있다.

main()함수 PIC에 전원을 투입한 후나, 리셋한 후에 최초로 실행하는 함수이다. main()함수는 실행 프로그램에 필수 함수로서, 프로그램의 메인 부분을기술한다. 그 이외의 함수를 main()함수에서 부르는 것으로, 보다 복잡한 프로그램을 알기 쉽게기술할 수 있다.

기타 함수군 조금 복잡한 처리나, 몇 번이나 반복하여 실행하는 처리를 함수로 정리해두면, 그 함수를 실행하는 것으로 목적대로 처리할 수 있다. 또한, 함수이므로 독립변수를 다른 매개체로 넘겨줄 수 도있다.

주의점간단하게 프로그램을 기록할 수 있다고 해도, 어느정도 PIC의 사용방법을 이해해야 한다. 예를 들면, 타이머 할당을 사용하기 위해서는 어떤 레지스터의 어떤비트를 세트하는가 정도는 알아야 한다. 제어용의 라이브러리를 준비하는 C컴파일러도 있지만, 기억하면 도움이 될 것이다.

PicC를 사용한다.

PicC에는 준비된 라이브러리가 일체 없으므로 PIC의 여러 가지 기능을 사용하려면 거기에 맞추어 자신이함수 등을 만들어야 한다. 그래도 판정문 등은 AVSI-C에 준거했으므로 프로그램은 쉽다. 기본적인 C언어의 설명은 다른 참고서에 맡기고, 여기에서는 PIC를움직이기 위한 테크닉을 소개하겠다.

레지스터에 대하여 입출력을 한다.무엇을 하든지, 우선 레지스터에 대한 입출력을 기억해야 시작된다. 이것을 처리하기 위해서는 우선 변수를선언해야 한다. 범용의 레지스터는 컴파일러가 자동적으로 할당한다. 예를 들면,

int a:로 하면, a라는 이름의 8비트폭의 부호가 붙은 정수의 int형의 변수를 선언한 것이 된다. 이것은PIC의 범용 레지스터(GPR:General PurposeRegister)의 어딘가에 자동적으로 할당할 수 있다. 또한 PIC를 제어하는 레지스터는, 어드레스를 지정하여

Page 10: PIC 마이컴의 프로그래밍 - 칩 마이컴... · PDF file전자 55 월간 전자기술/ ’99년 11월호 55 pic 마이컴의 프로그래밍 그래밍(icsp)이 있다. 이전에는

전자 63

63월간 전자기술/ ’99년 11월호

PIC 마이컴의 프로그래밍

변수를 선언해야한다. PicC에서는 아래와 같이 변수를선언한다.

int porta @0x05;int trisa @0x85;이 변수들은 int형으로 선언하겠다. 부호가 붙은 형

이지만, 기본적으로 16진수로 값을 지정하므로 별로 문제는 없다. 그리고 어드레스를 지정하기 위해서, 변수명 뒤에 “@”를 붙여서 어드레스를 기록한다 이렇게 하면, 어드레스 지정의 변수를 선언할 수 있다. 앞의 예에서는 포트 A와, 그 제어 레지스터인 TRISA를 선언하고 있다.변수에 값을 넣기 위해서는 아래와 같이 한다.porta=0x0f;trisa=0xf0;a= porta & 0xf0;a에 값을 넣을 때에 조금 복잡한 것을 한다. 여기에서

a에 들어가는 값은 포트 A의 레지스터에 들어가는 값과 0xf0를 AND연산한 결과이다. 이와 같이 C언어에서는 1행에 연산이나 대입을 삽입하고 기술할 수 있다.

int형 이외에도 문자열의 char형, 16비트폭의 부호가 붙은 정수의 long형 등을 사용할 수 있다. 그러나,PicC에서는 float형 등의 실수형을 취급할 수는 없다.어디까지나 정수만을 취급한다. 나눗셈을 할 때도 떨어지는 값은 소수점이하가 잘린 정수이다.

I/O 등의 비트를 조작한다.PIC의 어셈블러에는 bsf나 bcf 등의 비트 연산명령

이 있다. PicC에서 같은 조작을 하기 위해서는 어떻게

기술하면 좋을까? 대답은“논리 연산자(&, )과 수치를내장하여 기술한다.”이다. 어떤 비트를 “1”로 한다.예를 들면, 변수 porta의 비트 2를 “1”로 하는 경우, porta =0x04;로 기술한다. 0x04와 OR을 취하는 것으로, porta의 비트 2가 “1”이 된다.

어떤 비트를 “0”으로 한다.이번에는 변수 porta의 비트 2를 “0”으로 해본다. porta &=~(0x04):0x04를 반전한 것과 AND를 취하는 것으로 porta의 비트 2가 “0”이 된다. -(0x04)로 하지 않고,0xfb로 해도 마찬가지이다. 그러나, 하나하나 비트 위치를 고려하면서 16진수로 값을 지정하는것은 조금 귀찮다. 그러므로 #define문을 사용하자. 프로그램 선두에서 아래와 같이 선언한다. #define BIT7 0x80 #define BIT6 0x40 ∼생략∼

리스트 1. 인라인 어셈블러를 사용한 웨이트 함수

리스트 2. PicC에서 생성한 중간 파일(발췌)

Page 11: PIC 마이컴의 프로그래밍 - 칩 마이컴... · PDF file전자 55 월간 전자기술/ ’99년 11월호 55 pic 마이컴의 프로그래밍 그래밍(icsp)이 있다. 이전에는

전자 64

64

원칩 마이컴 실천 입문

#define BIT1 0x02 #define BIT0 0x01이것으로 조금 간단하게 된다. 앞의 비트 2를 “1”로 하는 예는 다음과 같이 바꿔 쓸 수 있다. porta =BIT2;이것을 형으로서 기억해두면 간단하다. 결국, port=비트는 비트 세트의 형, porta=~(비트)는 비트 클리어의 형이라는 상태이다. 또한 비트 1과

비트 3을 동시에 “0”으로 하고 싶을 때는 다음과 같이쓸 수가 있다.port &=~(BIT1+BIT3);이처럼 약간의 테크닉을 기억해 두면 그다지 혼란스럽지 않고 C프로그래밍 할 수있을 것이다.

인라인 어셈블러를사용한다.

타이밍을 정확하게 잡고싶은 경우, 예를 들면 소프트웨어 타이머를 짜고 싶을때 등은 C가 아니라 어셈블러로 기록하면 좋을 것이다.이것을 실현하는 것이 인

라인 어셈블러이다. 인라인어셈블러는 asm()라는 함수를 사용한다. 괄호 안에 어셈블러 코드를 직접 쓰는 것이다. 또한, 선언한 변수 등도 어셈블러의 소스 내부에서 사용할 수 있다.예를 들어 100μs의 타이

머를 만들어 보자. 소스를 리스트 1에 컴파일했을 때 생성되는 MPASM의 형식의중간 파일을 리스트 2에 나타낸다.

PIC의 클록 주파수를10MHz로 한 경우, 1명령

의 처리시간은 400ns, 100μs의 쓸데없는 처리를 하기위해서는 250스텝을 처리해야 한다. 리스트에서는 ①의 루프부분을 49회 루프시키는 것으로 244스텝을 소화하고, 그 이외의 ②부분에서 return을 사용하므로약간 초과하지만 남은 6스텝을 소화하고 있다.이것은 전체의 루프 회수를 지정하는 것이다. 예를들면, 독립변수로서 “1”이 부여된 경우는 100μ웨이트,“100”이 부여된 경우는 10ms웨이트가 된다. 이번의 예

리스트 3. PIC판 “Hello World!”

Page 12: PIC 마이컴의 프로그래밍 - 칩 마이컴... · PDF file전자 55 월간 전자기술/ ’99년 11월호 55 pic 마이컴의 프로그래밍 그래밍(icsp)이 있다. 이전에는

전자 65

65월간 전자기술/ ’99년 11월호

PIC 마이컴의 프로그래밍

에서는 인라인 어셈블러로 기록한 부분이 그대로 중간파일에 반영되고 있지만, 이 계산은 한번 소스를 기록하고, 컴파일 후에 중간 파일에서 피드 백한다.

자, 이제 프로그램을 짜자!

C언어의 참고서 등에서 반드시 라고 해도 과언이 아닐 만큼 나오는 연습 예가 “Hello World!”이다.이것은 단순하게 화면상에 “Hello World!”라고 표

시만 하는 것이다. PIC에서도 “Hello World!”를 만들고 싶지만, 디스플레이는 없다. 따라서 LED를 조금 움직이는 정도의 프로그램으로서 그림 15의 순서도를 소개하겠다.동작은 단순하여 약 1초마다 스위치에서 입력하는 값

을 가산하여 LED에 출력한다. 웨이트 처리에는 아까설명한 인라인 어셈블러도 사용하자. 리스트 3이 PIC판 “Hello World!”이다.

프로그램의 설명 #include문가장 선두에서 PIC16F84용의 헤더 파일을 인클루드한다. 헤더 파일은 PicC에 첨부되어 있다.

#define문불(,Boole)형의 true와 false 값을 정의하고 있

portb=dat

다. 판정문에 사용하기 위해서이다. 외부변수 정의

porta와 portb, trisa와 trisb의 각 변수를 어드레스 지정으로 정의하고 있다.

100μs타이머 함수:wait_100us()인라인 어셈블러를 사용한 100μs의 타이머이다.

main()함수프로그램의 중심이 되는 함수이다. 1초의 웨이트제어와 스위치 입력, LED출력 등을 하고 있다.

컴파일프로그램을 입력하면 컴파일을 한다. PicC에서는 인스톨한 디렉토리 아래에 있는 ¥src라는 홀더에 파일을두어야한다. 만든 파일을 복사하든가, 이 홀더 상에 두고 편집하자.

PicC 아이콘을 클릭 하여 컴파일러를 실행한다. 파일명을 열었으므로, 작성한 프로그램의 파일명을 입력하여 리턴을 누른다. 에러가 없으면 컴파일 완료이다.컴파일한 결과는 PicC를 인스톨한 홀더 아래의 ¥out이라는 홀더에 보존된다. 인텔 헥사 형식의 파일도 여기에 보존된다.생성된 헥사 파일을 PIC에 기록하고 실행시켜 보자.

LED가 반짝 반짝 점멸할 것이다. LED가 점등하지 않는 경우는 스위치 값을 바꾸어 본다. 1초마다 스위치 값이 가산될 것이다.

마지막으로

C언어에 의한 개발방법을 중심으로 설명했다. 루프제어 등, 어느 정도의 부분은 C컴파일러가 보상해주지만, 기본적으로 기억해야 할 것은 어셈블러 등을 사용하는 경우와 같다. 결국, 각 레지스터의 의미나 주변기능의 사용방법 등은 어떤 언어라도 마찬가지인 것이다.이 부분만 파악해 두면 PIC 프로그램에 대한 고민도줄어들 것이다. 모든 일에는 기본이 중요하다. 기본을파악한 후에 여러분도 프로그램을 만들어 보자.

그림 15. “Hello World!”의 플로차트

스타트

포트의 초기화

portb=0XFFdat=0X00

cnt=0

cnt≦100?yes 10μs 대기

cnt=cnt+1

dat=dat+porta

no