임베디드랜드

    복선은 "기계"라는 이미지로 하여금 현대문명의 결정체인 마이컴을 처음 접하는 사람의 마음을 (상대의 명성과 후광에서 벗어나) 친숙하고 편안하도록 만드는 것입니다.
    인간이라는 종족은 새로움에 대한 호기심도 강하지만 다른 한편으로는 어떻게든 자신이 이해할 수 있는 세계에서만 안주하려고 발버둥을 치는 이중성을 지니고 있습니다. 새로운 세계는 우리를 불안하게 만들 수 있는 힘이 있습니다. 인간은 편안한 상태에서 잠재력을 최대로 발휘할 수 있으므로 친근함은 초보자의 학습에 꼭 필요한 요소입니다. 실제로 마이컴은 기계와 같이 동작하지만 다른 한 편에서 보면 외부의 환경변화에 대응하여 최적의 행동을 결정하는 생물(生物)의 지능(知能)을 흉내내는 놀라운 기계(機械)입니다.
    이러한 마이컴의 신통력은 마이컴 내부에 전자회로로 심어져 있는 명령에 담겨져 있습니다. "하나의 언어를 정복하는 것은 한 나라를 정복하는 것과 같다"는 프랑스 격언이 시사하듯이 마이컴을 이해하는 첩경은 내장된 명령어(instructuon)의 의미와 결과를 다각도로 분석해 보는 것입니다. 프로그래머는 소수의 명령어를 질서있게 조합하여 자신의 지식과 판단을 마이컴 내에 차곡차곡 쌓을 수 있습니다. 다시 말하면 인간의 언어세계에서와 마찬가지로 프로그래머는 컴퓨터 세계의 언어와 문법을 사용하여 자신의 생각을 마이컴의 두뇌안에 하나씩 둘씩 새겨둘 수 있다는 것입니다.
    자, 이제 이 놀라운 기계의 내부로 들어가 봅시다.
    마이컴을 정복하는 첫번째 작업은 공략 대상인 마이컴의 기종을 선정하는 것입니다. 마이컴은 명령어를 비롯한 모든 기능이 하드웨어(회로)로 만들어져 있으므로 제조회사마다 사용법이 전부 다릅니다. (심지어 같은 회사의 마이컴조차도 배타적인 경우가 종종 있습니다) 한마디로 호환성이 제로입니다. 마이컴 공부에는 많은 시간과 노력의 집중이 요구되므로 한 마이컴을 공부하다가 집어치우고 다른 기종으로 전환하고 나면 물적, 심적으로 타격이 큽니다. -_-
    오늘날 상업적으로 성공한 마이컴의 기본개념은 "폰 노이만 방식"만을 사용되므로 여러 회사의 마이컴들 간에 근본적인 우열은 없습니다. 사용자에게는 단지 목적에 적합한 마이컴을 고르는 선택만이 남아 있습니다. -_-
    ※ 폰 노이만은 최초의 프로그램 내장형 컴퓨터를 고안한 수학자이며, 그가 고안한 프로그램 내장 방식(또는 폰 노이만 방식)은 50년이 넘은 지금까지 컴퓨터의 근본 원리이다.
    ※ 폰 노이만 (J von Neumann, 1903∼1957) : 기초수학, 응용수학, 물리학, 컴퓨터, 인공생명 등 현대 과학과 공학 전반에 지대한 영향을 끼친 헝가리 출신 천재과학자. 노이만은 최초의 컴퓨터 에니악(ENIAC)이 등장했을 때 문제가 많다고 생각했다. 에니악은 폭탄의 비행거리나 암호해독 등 인간 머리로 처리하기 어려운 숫자계산 속도를 획기적으로 향상시켰으나, 새로운 일을 할 때마다 사람이 수천 개의 스위치를 며칠씩이나 걸려서 다시 세팅해야 했다. 그는 프로그램과 자료를 모두 기억장치에 집어넣고 여기에서 프로그램과 자료를 차례로 불러 처리할 수 있는 현대식 논리구조를 확립, 이를 적용한 컴퓨터를 만들기 시작했다. 이렇게 탄생한 것이 에드박(EDVAC)이다. 노이만 방식 또는 프로그램 내장방식으로 불리는 현대식 컴퓨터의 등장은 디지털 기술의 급속한 발전을 가능케 했다. 현재 사용되는 컴퓨터의 99.9%가 노이만 방식이거나 이를 변형한 형태다.
    ※ 노이만형 직렬처리 컴퓨터는 CPU 를 이용한 순차처리방식으로 동작합니다. 이로 인해 동작속도에서 이론적 한계에 직면하고 기능이 추가됨에 따라 구조가 점점 복잡해지는 단점이 있습니다. 프로그램과 자료의 규칙을 모두 규격화하여 외부에서 제공해 주어야 하는 경직성이 큰 문제로 지적되고 있습니다.
    ※ 노이만형 직렬처리의 반대개념은 생물체의 뉴럴 네트워크(Neural Network, 병렬분산 아키텍쳐)로 인간의 뇌가 대표적인 예입니다. 중요한 특징으로는 학습과 자기 조직화 능력으로, 뇌는 외계와의 환경과 상호작용을 통해서 다양한 사항을 학습하고 그 정보를 기억하는 과정을 반복하여 자기 조직화를 이루어 나갑니다. (즉 지적으로 성장해 나갑니다)
    노벨상 수상자인 미국 물리학자 리처드 파인만 (Richard Phillips Feynman 1918-1988)은 그의 강연에서 인문학을 즙이 풍부한 과일에, 자연과학을 딱딱한 껍질을 가진 호두(nuts)에 비유 했습니다. 과일은 필요할 때 마다 한 입 깨어물어 속살을 맛볼 수 있지만, 호두는 일단 단단한 껍질을 뚫어야만 내용을 섭취할 수 있다는 거지요. 파인만의 비유는 새로운 것을 습득할 때 필요한 노력의 차이를 멋들어지게 설명하고 있습니다. 자연과학의 공부는 처음에 호두껍질을 돌파하기 위한 집중력이 요구됩니다. 준비하고 도전했을 때 돌파하지 못하면 말짱 도루묵... 다음번에 해보면 준비체조부터 몽땅 다시해야 합니다... 필자의 경험담... -_-
    ▶ "망치로 호두를 단번에 깨버리고 먹으면 되지~", "판 자리 또 파다 보면 언젠가는 뚫리겠지~" 라고 생각하면 좀 곤란... (사과만한 단단한 호두를 드릴로 뚫어 구멍을 낸다고 가정해 보자구요) ^^
    애석하게도 마이컴 공부는 후자의 호두에 속합니다. 그러므로 초보자가 마이컴을 공부할 때 적절한 기종과 일관된 내용의 (신뢰할 수 있는) 교재를 선택하는 것이 매우x매우 중요합니다. 사람의 집중력에는 제한이 있으므로 정해진 시간내에 마이컴 내용을 처음부터 끝까지 한 번 독파해 나가는 것이 중요합니다. 우리 강의에서도 초보자가 "한 입에 삼킬 수 있는" 크기의 메뉴를 제공하는 것이 주요한 과제겠지요... ^^

    ▶ 마이크로칩사의 8 비트 원칩마이컴 PIC16F84A

    작고 강하다! 이 표어는 마이크로칩사의 8 비트 원칩마이컴 PIC 패밀리를 잘 표현한 말입니다. 특히 PIC 시리즈 중에서 플래시 ROM을 장착한 16F84(A)는 교육용 마이컴으로 착각할 만큼 초보자가 마이컴을 접하기에 용이한 최적의 조건을 구비하고 있습니다. (필자의 의견임)

    16F84(A)의 특징을 그림에서 살펴봅시다. 우선 크기가 작습니다. 값도 적당합니다. 원칩 마이컴이라 4 개의 주변부품만으로 동작합니다. 최고 천 번까지 프로그램을 변경할 수 있습니다. 35개의 명령어만으로 모든 프로그램을 작성할 수 있습니다. 그 밖의 마이컴 기능도 전부 갖추고 있습니다.

    프로그램 개발환경을 살펴봅시다. PIC16F84(A)는 8 비트 원칩 마이컴으로는 세계적인 베스트셀러 입니다. (구글에서 영문으로 "16F84"라고 검색해 보세요. 취미, 교육목적으로 방대한 자료를 발견할 수 있습니다) 개발도구가 무료로 배포됩니다. (MPLAB IDE, Simulator : IBM-PC용) PIC 시리즈용 고급언어인 c와 BASIC 프로그램이 개발되어 판매됩니다. (무료 제공되는 16F84(A)용 맛보기 프로그램도 다수) 국내외 서점에 입문부터 고급까지 10여 종류의 전문서적이 나와 있습니다. 무료 롬-라이터 회로와 공짜 롬-라이팅 프로그램을 인터넷에서 쉽게 찾을 수 있습니다.응용예제와 실제 개발사례가 인터넷에 많습니다. (영문이 많음)

    PIC16F84(A)는 개발이 간편하고 사용이 간단하면서도 필요한 것은 모두 갖추고 있는 원칩 마이컴입니다. 아~ 도데체 여기서 뭘 더 바랄 수 있단 말입니까? 한 마디로 환상적입니다. 넉넉잡고 10,000원만 가지고 세운상가나 용산으로 나가면 16F84(A)에서 주변부품까지 일체를 구입할 수 있습니다. → ♪ 쨔쨔쨔 쨘~ ♬ 바햐흐로 마이컴 대중시대가 열린 것입니다... ^^

    ▶ PIC16F84A의 작동에는 4개의 외부 부품만 필요 (百聞이 不如一見, 보라! 얼마나 간단한가...)

    ▶ 왕초보 강의에 사용하는 PIC16F84A 타겟 회로도 (여기에 프로그램만 투입되면 완성...)

    위의 그림은 왕초보 마이컴 강의의 타겟 회로도입니다. 특정한 마이컴 프로그램으로 동작시키기를 원하는 회로를 타겟 회로라고 부릅니다. 그렇지만 현재 보여지는 회로는 미완성입니다. 이대로는 전원이 투입되어도 아무런 움직임을 보여주지 않습니다. 육신만 있고 영혼이 빠져있는 상태라고나 할까요...

    이제부터 마이컴의 영혼, 즉 프로그램 영역으로 함께 들어가 봅시다.

    ※ PIC16F84A의 사양에 의하면 2.0V부터 5.5V사이의 전압에서 동작합니다. 실험의 편의를 위해 타겟 회로에서는 건전지를 전원으로 사용합니다 (1.5V 4개용 6V 홀더를 사용) 다만 전압을 16F84A 동작범위 내로 낮추기 위해 다이오드를 2개 직렬로 연결하여 사용합니다. (다이오드 하나에 약 0.6V가 낮아집니다)

    ▶ 16F84(A) 프로그램 메모리 맵

    인간의 영혼은 어디에 자리잡고 있을까요? 심장 일까요? 뇌 일까요? 정확한 것은 알 수 없지만 어디엔가 자리잡고 있음에 틀림 없습니다. ^^ 반면에 마이컴의 영혼은 프로그램 메모리(ROM)에 담겨 있답니다...

    ※ 16F84(A)는 원칩 마이컴이라 ROM이 마이컴 속에 있습니다. 범용 마이컴이면 ROM IC를 마이컴 외부에 연결하여야 합니다. RAM도 마찬가지 입니다. ^^

    프로그램 메모리도 일종의 창고로 번지가 매겨져 있습니다. (0000번지부터 3FF번지까지) 16F84(A) 마이컴에서는 0000번지와 0004번지가 특별한 의미를 갖고 있습니다.

    ※ 0000번지는 0 번지와 의미가 같습니다. (0004번지는 4 번지) 마이컴에서는 ROM과 RAM의 번지에 16진수를 사용합니다. 16진수를 표기하는 경우에는 관례적으로 4 자리를 기입합니다. 정확한 표기법은 0000h와 같이 숫자의 끝에 h를 붙입니다. h의 의미는 영어로 Hexa decimal, 즉 16진수를 의미합니다.

    ※ 16진수 : 0, 1, -- , 9, 10(A), 11(B), 12(C), 13(D), 14(E), 15(F)까지 같은 자리에 쓰고 16은 같은 자리에 0, 다음 자리(좌측)에 1을 더하는 16 진법에 사용하는 수

    16F84(A)에서 전원이 투입되거나 4번 단자 전압이 0→1 (L→H)가 되면 리셋(reset) 동작으로 들어갑니다. 리셋은 말 그대로 re-set, 즉 re(다시) set(세우다) 입니다. "처음부터 다시..." 라는 의미이지요...

    16F84(A) 마이컴에서는 리셋이 되면 최초의 작업으로 ROM의 0000h 번지에 기록된 명령을 읽어와서 해독하고 지시에 따르게 됩니다. 다음의 두 번째 작업은 0001h 번지의 명령을 읽어와서 해독하고 지시에 따르고, 다음에는 0003h 번지에서... 이렇게 진행됩니다. 하나씩 하나씩 번지를 증가시켜 가면서 읽고, 해독하고 지시에 따르게 되지요. (마치 기계가 절도있게 착착 움직이는 것이 연상되지 않습니까? ^^)

    그런데 재미있는 것이 하나 있습니다. 마이컴 명령중에는 반드시 몇 종류의 점프 명령이 있게 마련입니다. 16F84(A)도 예외는 아니지요. 차례로 번지값을 증가시켜 가면서 명령을 읽고, 해독하고 실행해 가다가, 해독 결과에 어느어느 번지로 점프하라는 내용이 나오면... 프로그램의 다음 순서가 명령이 가르키는 번지로 바뀌어 버립니다. 다시 말하면 프로그램의 진행 순서가 바뀌는 셈이지요...

    이 이야기는 겉보기와는 달리 엄청난 잠재력을 내포하고 있습니다. 마이컴의 작업은 두루마리처럼 길다란 롬(ROM) 안에 기록된 프로그램의 내용과 순서에 의해 결정됩니다. 프로그램이 진행되는 순서가 달라지면 마이컴의 동작도 바뀌게 됩니다. 마이컴 내의 점프명령과 비교와 점프를 결합한 조건부 분기명령을 사용하면 유한한 길이의 롬(ROM) 안에 기입된 명령들의 조합과 순서를 바꾸고, 재 사용할 수 있습니다. 그 결과로 우리는 다양한 작업과 무한히 순환되는 프로그램을 만들어 낼 수 있는 것입니다.

    우리는 영화를 "편집의 예술"이라고 흔히 말합니다. 영화에서 편집이란 거대하면서도 복잡하기 그지없는 조각그림 맞추기 게임에 비유할 수 있을 것입니다. 규모와 다양성을 축소한다면, 롬(ROM) 안의 마이컴 프로그램도 작게 구획되어진 명령들의 집합(조각)으로 구성되고, 이들 집합(조각)을 필요에 따라 조합해서 사용한다는 점에서 편집작업을 거친 영화 한편과 비슷하게 느껴진다면 과장일까요? ^^

    ※ 편집을 영화예술의 기본이라고 믿었던 러시아의 위대한 감독 푸도프킨(V.I. Pu-dovkin)은 영화가 촬영된다는 생각은 전적인 오류로서, 그러한 표현은 이제 폐기처분해야 한다고 말했다. 그에 의하면 영화란 촬영되는 것이 아니라 조립된다. 영화란 그 소재인 셀룰로이드 조각을 조립함으로서 구축되는 것이다. 알프레드 히치코크 (Alfred Hitchcock)는 이 견해를 더 강화시켰다. 즉, "스크린은 새롭게 주조된 자신의 언어로 말할 수 있어야 하며, 그러기 위해서는 촬영된 각각의 장면을 분해 가능한 한 조각의 소재로 취급하고, 이 소재들을 이용하여 하나의 의미심장한 시각적 패턴을 직조해내지 않으면 안된다."



    실제 마이컴 프로그램을 작성할 때는 구조와 동작논리를 구현하는데 주의를 기울이고, 구체적인 번지에 대해서는 굳이 고려할 필요가 없습니다. 그 이유는 어셈블러라는 언어를 사용하기 때문입니다. 어셈블러에서는 점프명령을 사용할 때 숫자 번지보다는 라벨이라고 부르는 단어로 된 번지를 사용합니다. 예를들면 "GOTO 0100h" (100번지로 점프해라...) 보다는 "GOTO pencil" (pencil 번지로 점프해라. 단 실제 숫자번지는 인간이 알 필요가 없으니 우리끼리 주고받자...) 라는 식으로 말입니다. ^^

    ※ GOTO는 마이컴 내에 내장된 명령어, GOTO 명령어 다음에 (한 칸 이상의 공백을 띄우고 나서) 하나의 목적번지를 써야하는 것은 문법. → 목적번지에는 숫자나 영문자로 된 라벨을 사용할 수 있음. 목적번지를 두 개 쓰면 안됨. (너무나 당연...) GOTO 다음에 또 다른 명령어를 덧붙여 써도 안됨. (이것도 당연...) 이 모든 사소한 것들이 바로 문법이랍니다. ^^ 우리 모두 문법을 무서워하지 맙시다...

    물론 우리는 숫자번지의 결정에 간여하지 않는 편이 좋습니다. 한 예를 보면, 힘들여서 157줄 길이의 프로그램을 작성했다고 합시다. 운이 나쁘게도 (뭐 늘 생기는 일이지만...) 처음에서 104번째 명령과 105번째 명령 사이에 다른 명령을 하나 추가해야 한다고 합시다. 이렇게 수정하면 105번째줄 아래의 번지의 값은 전부 하나씩 커지게(증가하게) 됩니다. 중요한 점은 (프로그램 105번째의) 아래쪽에 있던 명령어들의 번지가 전부 변한다는 겁니다. 만약 105번째 아래쪽으로 12개의 점프명령의 목적번지가 있었다면, 이 목적번지들로 오기를 원하는 (점프하기 원하는) 명령의 내용은 모조리 수정해야 한다는 결론이 나옵니다. 단 하나라도 빼 먹으면 안됩니다... -_- 아이고~ 곡소리 절로나죠...

    고생고생, 2시간 여에 걸쳐 간신히 모든 프로그램 코드의 수정과 검증을 마쳤는데... 아뿔사! 어딘가 또 하나 명령이 빠졌다고 귀띔을 받는다면??? → 도데체 힘들어서 프로그램이라는 작업을 어떻게 할 수 있겠습니까? (난 안해~) 아무래도 만수무강은 고사하고 제 명 근처까지 가기도 힘들겠죠? -_- 그렇지만 당신이 어셈블러를 사용하고 단어(영문자)로 라벨을 만들어 표기해 두었다면... 이제는 번지를 대조하고 수정하는 모든 골치아픈 작업을 어셈블러에게 맡길 수 있습니다. 자, 이제 왜 반드시 어셈블러를 사용해야만 하는지 아시겠지요? 그것도 공짜로 사용할 수 있는데 말입니다...

    16F84(A) 마이컴에서 0004h 번지는 인터럽트가 발생하면 프로그램이 점프되어 오는 번지입니다. 그러므로 인터럽트를 사용하는 경우에는 0004h 번지부터 인터럽트 서비스 프로그램 (ISR : Interrupt service routine) 이 반드시 기입되어야 합니다. 인터럽트의 의미, 발생, 사용예는 우리 강의의 범위를 넘어가므로 자세히 설명하지는 않습니다. 그러나 마이컴의 인터럽트는 매우 유용한 개념이므로, 흥미가 있으신 분은 "인터럽트의 발생은 어떤 원인으로, 언제 일어나는가?" 라는 의문에서 실마리를 풀어나가면 됩니다. ^^

    지금까지는 16F84(A) 마이컴에서 프로그램을 담는 프로그램 메모리(총 1024개) 구성, 리셋(reset)이 발생했을 때 프로그램이 시작하는 번지, 프로그램에서 명령들이 수행되는 순서의 중요성, 어셈블러의 위력등에 대해 알아보았습니다. 사실 이 프로그램 메모리에 관련된 내용은 대부분의 마이컴에서 거의 같습니다. 차이점이 있다면 ROM 크기의 차이, 명령어 길이의 차이, 시작주소 번지의 차이, 인터럽트 서비스 번지의차이 정도로 비교적 사소한 것들 뿐입니다. 반면에 다음에 나오는 데이터 메모리는 구성과 기능에서 마이컴의 특징이 구체화 되는 장소로 각 마이컴마다 확연히 다른 모습을 보입니다.

    자, 이제 16F84(A)의 테이터 메모리에 대해 알아봅시다.

    ▶ 16F84(A) 테이터 메모리 맵과 스페셜 펑션 레지스터 (SFR : Special Function Registers)

    전 시간의 마이컴 개요에서 설명한 바와 같이, 마이컴의 프로그램 메모리가 카세트의 테이프라면 테이터 메모리는 (8 bit) 창고에 해당합니다. 그림에서 보이는 것 처럼 16F84(A)에는 전부 85개(80개 + 5개)의 데이터 메모리가 있습니다. (엄밀히 말하자면 몇 개 더 있으나 굳이 설명하지 않습니다) 이 중에서 16개의 특수한 메모리를 SFR (Special Function Registers) 이라고 부릅니다. 여기서 특수하다는 말의 의미는 마이컴 내/외부의 하드웨어와 연결되어 있다는 뜻입니다. 16F84(A) 칩의 핀 단자들과 연결된 외부 I/O 접속부분도 SFR 내에 있습니다.

    ※ 그림에서 보면 SFR 번지는 좌측의 12개와 우측의 5개로 나누어져 있습니다. (실은 우측의 번지수도 12개지만 5개를 제외하면 좌측과 내용이 중복입니다) 반드시 기억해 두어야 할 점은, 좌측과 우측의 SFR 번지를 오가는 방법입니다. (정확히 말하면 SFR 페이지(page) 전환입니다) 자세한 설명은 피하지만 03h와 83h의 SATAUS 레지스터 내의 여섯번째 비트값을 0과 1로 변환하면, SFR 페이지가 변경됩니다.

    ※ 16F84(A)에서는 RA0-RA3, RB0-RB7의 각 핀들을 입력(input)으로 설정할 지, 출력(output)으로 설정할 지를 정해야 합니다. (리셋 초기시는 전부 입력으로 설정됨) 이 In/Out 설정에 사용되는 레지스터가 TRISA, TRISB 이며 각 비트(bit)의 0, 1 값으로 In/Out 상태가 결정됩니다. 설정이 종료되면 In/Out 핀을 사용하게 되는데, 이 때에는 PORTA, PORTB 레지스터의 각 비트(bit)를 읽고 쓰게 됩니다. 중요한 점은 16F84(A)이 간단한 동작만 수행하더라도 SFR 페이지 전환은 반드시 필요하다는 것입니다.

    16F84(A) 데이터 메모리의 SFR이 16개 뿐이지만 모든 동작이 비트(bit) 단위로 이루어지므로 실제 변경하는 대상은 16 x 8 = 128가지나 됩니다. 더구나 각 비트(bit)는 읽을 수 있고, 쓸 수도 있는 두 가지 모드로 사용되므로 실제 변화량은 무려 128 x 2 = 256가지가 됩니다. 이 말은 약 200가지의 0, 1에 대응하는 각각 다른 하드웨어 동작을 이해해야 한다는 뜻으로, 습득하기에 대단히 많은 분량이 아닐 수 없습니다. (이것이 일반적으로 마이컴 전체를 설명하는 책이 두꺼워지는 이유입니다. 16F84(A)도 예외는 아닙니다. 명령어 설명하랴... 레지스터 각 비트의 의미 설명햐랴... 해가 지고 날이 샙니다)

    그러나 SFR의 모든 내용을 전부 숙지해야 마이컴 프로그램을 시작할 수 있는 것은 아닙니다. 다행히도 SFR 내의 각 비트(bit)는 대부분 독립적으로 작동하므로, 지금 사용하려는 용도에 필요한 부분만 알고 있으면 문제는 없습니다. ^^ 실제로 일부 공부하고 써먹고, 다음에 또 일부 공부하고 써먹고... 이런 식으로 지식을 덛붙여 나가면서 마이컴을 배워나가게 됩니다. 누구나 이런 과정을 거치면서 성장합니다...

    ▶ 16F84(A)의 레지스터 개념

    자, 16F84(A)의 데이터 메모리 중의 레지스터와 프로그램의 관계에 대해 좀 더 알아봅시다. (SFR중에서 R자 만을 따서 레지스터라고 줄여서 부르겠습니다. 즉 레지스터는 SFR을 의미합니다)

    필자는 비행기를 조종해 본 적이 없습니다. 자동차 정도지요... -_- 하지만 비유를 들기에는 자동차는 너무 간단합니다. 비행기를 예로 들겠습니다. 그림의 사진은 보잉 747기 조종석 일부를 보여주고 있습니다. 이제 당신이 기장석에 앉아 747기를 조종하려고 한다고 가정해 봅시다. 조종기술을 포함해서 무슨 일을 하게 될까요? 분명한 것은 당신이 바쁘리라고 예상된다는 것입니다. 무엇 하기에 바쁠까요? 당신은 수 많은 계기들을 지켜보면서 현재 상황을 판단하기에 바쁠 것입니다. 동시에 당신은 판단을 기초로 여러 스위치와 레버를 조작하면서 비행기를 움직이기에 바쁠 것입니다. 그러나 분명한 점은 당신은 조종석 안에서 이 모든 일들을 한다는 점입니다. 의자에 편히 앉아서 말이지요... 기체 밖으로 나가서 엘레베이터 트랩을 내리지도 않을 것이며, 랜딩 기어를 들어 올리지도 않고, 방향타를 직접 움직이는 일도 없을 것입니다.

    비행기 속의 당신과 같이 마이컴 내의 프로그램도 마찬가지로 행동합니다. 당신이 계기판을 보듯이 프로그램은 레지스터의 비트(bit)를 읽습니다. 당신이 스위치와 레버를 조작하듯이 프로그램은 레지스터의 비트(bit)를 켜고 끕니다. 당신과 마찬가지로 프로그램도 마이컴 칩 속에서 나오지 않습니다. 당신처럼 판단과 행동을 반복 할 따름입니다...

    당신은 눈으로 보고 판단하고 손으로 조작합니다. 16F84(A) 마이컴 프로그램은 BTFSC, BTFSS 명령어로 레지스터 비트(bit) 값을 판단하고, BSF, BCF 명령어로 레지스터 비트(bit) 값을 0 또는 1로 조작합니다. 프로그램은 당신 사고(思考)의 분신(分身)입니다.

    ※ 16F84(A)의 레지스터의 크기는 모두 8bit 입니다. 각각의 레지스터의 8개 비트(bit)들에는 모두 특정한 이름이 붙어 있습니다. 예를 들면 앞에서 언급한 레지스터 전체 페이지를 전환하는 기능을 가진 SATAUS 레지스터 내의 여섯번째 비트는 RP0라는 이름을 가지고 있습니다. 이들 비트명은 어셈블러 프로그램의 작성에 사용되므로, 어셈블러를 공부할 때 함께 설명하도록 하겠습니다.

    ▶ 16F84(A)의 워킹 레지스터 (w registor)

    마지막으로 16F84(A)의 워킹 레지스터(w registor)에 대해 설명을 드리겠습니다. 그림에서 보면 워킹 레지스터는 ALU 아래에 위치하고 있으며 크기는 역시 8bit 입니다. 워킹 레지스터는 SFR과는 다른 레지스터로 일종의 버퍼역활을 합니다. 예를 들면 계산에는 두 개의 8bit 레지스터가 필요한데, 그 중에 하나는 반드시 워킹 레지스터가 사용되어야 합니다. 계산결과는 워킹 레지스터나 다른 SFR에 들어갈 수 있습니다. 또 다른 예로는 SFR 레지스터 간에 8bit 값을 이동할 필요가 있을 때 반드시 워킹 레지스터에 일시적으로 보관했다가 목적지로 향해야 합니다.

    ※ 워킹 레지스터(w registor)는 약자로 w 라고 부릅니다.

    워킹 레지스터의 존재는 번거롭게 여겨질 수 있지만 대부분의 마이컴 하드웨어가 워킹 레지스터 구조를 채택하고 있는 것을 보면 마이컴 회로설계시에 필요한 이유가 있는 것 같습니다. 불평하지 마시고 식구중의 하나로 따뜻하게 맞이하여 주시기 바랍니다.

    긴 여행에 고생이 많으십니다. ^^ 좀 쉬어 가도록 하십시요...
Posted by suvisor