446
MCS-51 마이크로컴퓨터 이 명 의 박 천 주

MCS-51 마이크로컴퓨터 - KOREATECHmicrocom.koreatech.ac.kr/course backup/IFC180/TEXTBOOK... · 2020. 8. 25. · 8 MCS-51 마이크로컴퓨터 Â 67 7 q¨} 모델 ROM RAM 속도

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

  • Ver_2017_09_07

    MCS-51

    마이크로컴퓨터

    이 명 의 ․ 박 천 주

  • 머릿말 1

    머릿말

    Ver_2017_09_07

    Ver_2016_08_16

    Ver_2013_09_06

    Ver_2011_12_17

    본 책자는 MCS-51 MCU를 통해 주변 입출력 디바이스를 제어하는 응용 프로그

    램 작성을 위해 어셈블리 프로그래밍과 C51 프로그래밍을 함께 진행할 수 있도

    록 구성한다.

    여러 학기를 거쳐 강의 및 실습에 활용하였던 자료를 토대로, 필요한 개념들을

    정리하여 묶기에 이르렀다. 여러 부분에서 미흡한 느낌을 지울 수 없으나, 추후

    미진한 부분들은 다듬어 보완토록 하겠다.

    이와 관련된 소스 등의 자료는 다음의 사이트 [IFC181]마이크로프로세서및실습

    꼭지를 참고바란다.

    https://cms3.koreatech.ac.kr/sites/joo/home.html

  • 2 MCS-51 마이크로컴퓨터

  • 목차 1

    목 차

    제1장 MCS-51 MCU ··············································································1

    1.1 MCS-51 계열 MCU ·················································································1

    1.2 8051의 구조 ·································································································4

    1.3 메모리 구조 ·································································································9

    1.4 내부 데이터 메모리 ·················································································22

    1.5 MCU 타이밍도 ·························································································37

    제2장 MCS-51 명령어 ··········································································45

    2.1 주소 지정 방식 ·························································································45

    2.2 MCS-51 명령어 ·······················································································51

    2.3 명령어 요약 ·······························································································93

    제3장 KUT51 실습 보드 ······································································99

    3.1 실습 보드 제작 ·························································································99

    3.2 실습 환경 구축 ·······················································································105

    3.3 Keil uVision IDE ··················································································111

    3.4 소스 작성, 어셈블 및 실행 ··································································128

    3.5 실습과제 ···································································································140

  • 2 MCS-51 마이크로컴퓨터

    제4장 기초 연산 명령 ··········································································143

    4.1 전송 명령 ·································································································143

    4.2 산술 연산 명령 ·······················································································146

    4.3 논리 및 기타 연산 명령 ·······································································150

    4.4 실습과제 ···································································································153

    제5장 반복 처리 ····················································································157

    5.1 분기 명령 및 반복 처리 ·······································································157

    5.2 데이터 블록 전송 및 합산 ···································································162

    5.3 검색 및 정렬 ···························································································164

    5.4 실습과제 ···································································································170

    제6장 스택 및 서브루틴 ······································································171

    6.1 스택과 서브루틴 ·····················································································171

    6.2 코드 변환 ·································································································177

    6.3 실습과제 ···································································································185

  • 목차 3

    제7장 포트 입출력 ················································································187

    7.1 입출력 포트 ·····························································································187

    7.2 입출력 처리 및 시간지연 ·····································································192

    7.3 입출력 모듈 제어 ···················································································194

    7.4 실습과제 ···································································································210

    제8장 인터럽트 ······················································································213

    8.1 인터럽트 개요 ·························································································213

    8.2 관련 SFR ·································································································220

    8.3 이벤트 취급 방식 ···················································································224

    8.4 실습 보드에서의 인터럽트 ···································································228

    8.5 외부 인터럽트 ·························································································231

    8.6 실습과제 ···································································································237

    제9장 타이머/카운터 ············································································239

    9.1 타이머/카운터의 용도 ···········································································239

    9.2 관련 SFR ·································································································243

    9.3 타이머/카운터의 동작 모드 ·································································248

    9.4 예제 프로그램 ·························································································253

    9.5 실습과제 ···································································································258

  • 4 MCS-51 마이크로컴퓨터

    제10장 시리얼 통신 ··············································································259

    10.1 시리얼 통신 모드 ·················································································259

    10.2 관련 SFR ·······························································································262

    10.3 보 레이트 설정 및 송수신 ·································································266

    10.4 예제 프로그램 ·······················································································271

    10.5 실습과제 ·································································································276

    제11장 CLCD 제어 ···············································································277

    11.1 CLCD 개요 ···························································································277

    11.2 CLCD 제어 명령 ··················································································286

    11.3 CLCD의 초기화 ···················································································293

    11.4 예제 프로그램 ·······················································································298

    11.5 실습과제 ·································································································312

    제12장 C51 컴파일러 ···········································································313

    12.1 C51 개요 ································································································313

    12.2 데이터 형 ·······························································································314

    12.3 메모리 형 및 모델 ···············································································319

    12.4 포인터 ·····································································································324

    12.5 외부 메모리 및 입출력 디바이스 접근 ···········································330

    12.6 함수 ·········································································································333

    12.7 C와 어셈블리 소스간 인터페이싱 ····················································338

  • 목차 5

    제13장 C51 프로그래밍 ······································································345

    13.1 C51 프로그래밍 절차 ··········································································345

    13.2 C51 기초 실습 ······················································································354

    13.3 포트 입출력 ···························································································369

    13.4 DotMatrix 및 Keypad 제어 ······························································381

    13.5 CLCD 제어 ···························································································391

    13.6 외부 인터럽트 ·······················································································402

    13.7 타이머/카운터 인터럽트 ·····································································406

    13.8 시리얼 인터럽트 ···················································································410

    부록 1. KUT51 회로도 ·······································································425

    부록 2. KUT51 부품 목록 ·································································426

    부록 3. 모니터 프로그램 소스 ························································427

  • 6 MCS-51 마이크로컴퓨터

  • 목차 7

    제1장 MCS-51 MCU

    본 장에서는 MCS-51 계열의 호환 모델, 하드웨어 구조, 메모리 구조 및 CPU

    타이밍에 대해서 살펴본다.

    1.1 MCS-51 계열 MCU

    본 절에서는 Intel 사의 8비트 마이크로컨트롤러인 MCS-51 계열 모델의 각 특징

    과 Atmel 사에서 개발한 MCS-51 호환 모델들의 특징을 살펴본다.

    1.1.1 MCS-51 계열 모델

    Intel 사는 8051 외에 8051의 기본 구조에서 일부 기능을 추가 혹은 제거한 형태

    의 다양한 모델의 마이크로컨트롤러를 제품화하고 있다. 이 중 8051의 기본 구조

    를 중심으로 일부 변형된 형태의 마이크로컨트롤러를 통칭하여 MCS(micro

    controller system)-51 계열의 MCU(micro controller unit)라고 한다.

    MCS-51 계열의 마이크로컨트롤러는 하버드(Harvard) 구조를 채택한

    CISC(complex instruction set computer) 형의 마이크로프로세서이다. 하버드 구

    조란 데이터 메모리를 레지스터 파일 방식으로 관리하는 구조로, 레지스터와 데

    이터 메모리를 구분하지 않고 데이터 메모리 영역을 범용 레지스터처럼 사용하

    는 구조를 의미한다. MCS-51 계열 MCU는 111개의 명령어를 제공하며, 8가지의

    주소 지정 방식을 제공하는 CISC 형의 MCU다.

    MCS-51 계열의 MCU는 다양한 종류의 모델을 출시하고 있는데, 이중 주목하여

    야 할 것은 8031, 8051, 8751이며, 이들의 기본 구조는 동일하나, ROM의 내장 여

    부 및 롬의 유형, ROM과 RAM의 크기에 따라 구별된다. 이외에 8032, 8052와

    같이 모델 번호의 끝자리가 2인 모델을 추가로 고려할 필요가 있다. 또한 80C51

    유형의 모델은 CHMOS 제작 기술로 생산된 저전력 모델로, 저전력 모드를 제공

    하기도 한다. [표 1.1]은 Intel사의 MCS-51 계열 MCU의 특징들을 요약하여 보

  • 8 MCS-51 마이크로컴퓨터

    인 것이다.

    표 1.1 Intel MCS-51 계열

    모델 ROM RAM 속도 I/O핀 T/C UART Interrupt8031AH ROMless 128B 12MHz 32 2 1 58051AH 4KB ROM 128B 12MHz 32 2 1 58751BH 4KB EPROM 128B 12MHz 32 2 1 58032AH ROMless 256B 12MHz 32 3 1 68052AH 8KB ROM 256B 12MHz 32 3 1 68752BH 8KB EPROM 256B 12MHz 32 3 1 6

    8051 MCU

    8051은 4KB의 프로그램 메모리(Mask ROM), 128바이트의 데이터 메모리(RAM),

    16비트 타이머/카운터 2개, 인터럽트 소스 5개, UART 1개를 내장하고 있으며,

    최대 64KB의 외부 프로그램 메모리와 최대 64KB의 외부 데이터 메모리를 장착

    할 수 있는 메모리 공간을 확보하고 있다. 내장된 프로그램 메모리는 한번 기록

    되면 이후 재 기록할 수 없는 단점이 있으나 저렴하다는 장점이 있기도 하다. 일

    반적으로 4KB 미만의 프로그램 개발이 완료된 후 대량 생산하는 경우에 적합하

    다. [그림 1.1]은 8051 MCU의 하드웨어 구조를 블록형태로 보이고 있다.

    INTERRUPTCONTROL 4KROM

    CPU

    OSC

    EXTERNALINTERRUPTS

    BUSCONTROL

    128 BYTES RAM

    4 I/O PORTS

    P0 P2 P P3

    ADDRESS/DATA

    TIMER 1

    TIMER 0

    SERIALPORT

    TXD RXD

    COUNTERINPUTS

    그림 1.1 8051 MCU의 블록도

  • 목차 9

    8031 MCU

    8031은 프로그램 메모리(ROM)가 내장되어 있지 않다는 점을 제외하고 8051

    MCU와 동일하다. 이 MCU는 프로그램 메모리가 필요시 외부 장착해야 함을 의

    미하며, 최대 64KB까지 외부 장착 가능하다. 따라서 사용자가 응용에서 필요로

    하는 프로그램 메모리가 4KB(8051) 혹은 8KB(8052) 이상인 경우로, 외부 프로그

    램 메모리의 장착을 피할 수 없는 경우에 8031 MCU를 선택할 수 있다.

    8751 MCU

    8751은 내부 프로그램 메모리가 EPROM으로 내장되어 있다는 점을 제외하고

    8051 MCU와 동일하다. 이는 프로그램 메모리 내의 정보를 자외선 이레이저

    (eraser)를 사용하여 삭제한 후, 다시 재 기록할 수 있는 장점을 가진다. 이는

    4KB 미만의 프로그램을 개발하는 과정에서 바람직한 모델이다.

    8032, 8052, 8752 MCU

    이들 MCU는 각각 8031, 8051, 8751 MCU의 후속 모델로서, 내부 프로그램 메모

    리와 내부 데이터 메모리가 이전 모델에 비해 두 배씩 늘어났으며, 타이머/카운

    터가 하나씩 추가된 모델이다. 결국 8KB의 내부 프로그램 메모리, 256바이트의

    내부 데이터 메모리, 3개의 타이머/카운터를 내장하고 이외는 이전 모델과 동일

    한 기능을 가지는 MCU라고 할 수 있다.

    1.1.2 MCS-51 호환 모델

    최근에는 Intel 사의 MCS-51 계열과 호환되는 모델을 Atmel 사에서 출시하고

    있으며 이들 모델에 대한 특징을 [표 1.2]에 정리하여 보인다. 이들 Atmel 89Cxx

    시리즈는 MCS-51 계열과 달리 내부 프로그램 메모리를 플래쉬(flash) 메모리로

    대체 내장한 모델을 출시하였다. 이들 모델에는 외부에 ROM 혹은 RAM을 필요

    로 하지 않는 소형 20핀 형태의 89Cxx51 계열과, 8051과 완전 호환되며 플래쉬

    메모리가 내장된 89C5x 시리즈가 공급되고 있다.

    이외에도 Philips사는 MCS-51 호환 제품으로 초저가형, 저전력형, OTP형, 플래

    시 메모리형 등을 출시하고 있으며, Dallas사는 배터리 백업기능, RTC 기능이

    내장된 모델 등을 생산하고 있다.

  • 10 MCS-51 마이크로컴퓨터

    표 1.2 Atmel사의 AT89Cxx 계열

    모델 flashROM RAM 속도 I/O핀 T/C UART InterruptAT89C1051 1KB 64B 24MHz 15 1 - 3AT89C2051 2KB 128B 24MHz 15 2 1 6AT89C4051 4KB 128B 24MHz 15 2 1 6AT89C51 4KB 128B 24MHz 32 2 1 6AT89C52 8KB 256B 24MHz 32 3 1 8

    1.2 8051의 구조

    MCS-51 계열 MCU의 대표적인 모델인 8051 MCU의 특징 및 구조를 살펴본다.

    1.2.1 MCS-51의 특징

    MCS-51 계열의 대표적인 모델인 8051은 다음과 같은 특징들을 가진다.

    ▪ 제어를 위한 응용에 최적화된 8비트 CPU이다.

    ▪ 강화된 비트 단위의 대수 처리 능력을 가진다.

    ▪ 최대 64KB 크기의 프로그램 메모리 주소 공간을 제공한다.

    ▪ 최대 64KB 크기의 데이터 메모리 주소 공간을 제공한다.

    ▪ 최대 4KB 크기의 내장 프로그램 메모리를 제공한다.

    ▪ 128B 크기의 내장 데이터 메모리를 제공한다.

    ▪ 32 핀의 양방향 입출력 기능을 제공하며, 각 핀은 개별적으로 주소지정 가

    능하다.

    ▪ 2 개의 16비트 타이머/카운터를 제공한다.

    ▪ 전이중 방식의 UART(Universal Asynchronous Receiver/Transmitter)를

    제공한다.

    ▪ 두 레벨의 우선순위를 가지는 5가지 인터럽트 구조를 제공한다.

    ▪ 클록 오실레이터를 제공한다.

  • 목차 11

    1.2.2 하드웨어 구조

    [그림 1.2]는 MCS-51 MCU의 기본 내부 구조를 보다 구체적으로 나타낸 것이

    다.

    CY OVRS2RS1F0AC P

    ACC

    DPL

    DPH

    TCON

    TMOD

    TL0

    TH0

    TL1

    TH1

    SCON

    SBUF

    IEC

    IPC

    B

    SP

    128 X 8RAM

    REGISTER BANK 3

    REGISTER BANK 0

    REGISTER BANK 1

    REGISTER BANK 2

    DRIVERS

    SPEC

    IAL

    FUN

    CTI

    ON

    REG

    ISTE

    R A

    DD

    RES

    S D

    ECO

    DER

    RAM

    AD

    DR

    ESS

    DEC

    OD

    ER

    PARITY

    ALU

    ROTATE CONTROL

    INTERRUPTCONTROL

    SERIALPORT

    TIMERCONTROL

    OSCTIMING

    CIRCUITRY P1 P3

    XTAL1

    XTAL2

    EA/VDD

    ALE/PROG

    PSEN

    PORT 1 PORT 3

    P2

    PROGRAM CONTROL

    PCL

    PCH

    CONTROLPLA

    INSTRUCTIONDECODER

    CONTROLENGINE

    CO

    NTR

    OL

    P0

    PORT 2 PORT 0 VSS

    RST/VPD

    VCC

    4K X 8NONE (8031)ROM (8051)

    EPROM (8751)

    PRO

    GR

    AM M

    EMO

    RY

    ADD

    RES

    S D

    ECO

    OD

    R

    DRIVERS

    그림 1.2 8051의 내부 구조

  • 12 MCS-51 마이크로컴퓨터

    특수 기능 레지스터 영역에 있는 외부 인터럽트 관련, 타이머/카운터 인터럽트

    관련, 시리얼 통신 인터럽트 관련 레지스터들과 그 외의 레지스터들은 내부 메모

    리를 언급할 때 살펴보기로 하고, 여기서는 프로그램 카운터에 대해 간단히 살펴

    본다. 프로그램 카운터(program counter, PC)는 수행될 다음 명령이 메모리의 어

    디에 위치하는 지를 알려주는 두 바이트 크기의 주소를 값으로 가진다. 리셋하였

    을 때 8051의 프로그램 카운터 값은 0000H으로 초기화되며, 명령이 수행될 때마

    다 그 값을 변경한다. 항상 프로그램 카운터는 다음에 실행할 명령의 주소를 그

    값으로 가지는 16비트 길이의 레지스터이다.

    1.2.3 8051 핀 기능

    MCS-51의 PDIP형과 PLCC형의 핀 배치도는 [그림 1.3]과 같다.

    (a) PDIP형 (b) PLCC형

    그림 1.3 MCS-51의 핀 배치

    각 핀의 기능을 살펴보면 다음과 같다.

  • 목차 13

    P0(P0.7,...,P0.0)

    포트 P0는 8개의 핀으로 구성된 오픈 드레인(open drain) 출력 방식의 양방향 입

    출력 포트다. 각 핀은 독립적으로 입력 혹은 출력으로 사용될 수 있으며, 출력용

    으로 사용할 때 4개의 LS TTL을 구동할 수 있다. 추가의 외부 메모리를 장착하

    는 경우, 포트 P0는 16비트 길이의 외부 메모리 주소중 하위 바이트에 해당하는

    어드레스 신호(A7,...,A0)의 통로로, 혹은 기록/판독한 데이터 신호(D7,...,D0)의 이

    동 통로로 사용된다. 반면 외부 메모리를 연결하지 않을 경우, 순수한 입출력 포

    트의 용도로 사용된다.

    P1(P1.7,...,P1.0)

    포트 P1은 8개 핀으로 구성되며, 내부적으로 풀업(pull-up)된 양방향 입출력 포

    트다. 출력으로 사용할 때 각 핀은 4개의 LS TTL을 구동할 수 있다.

    P2(P2.7,...,P2.0)

    포트 P2는 8개 핀으로 구성되며, 내부적으로 풀업된 8비트 양방향 입출력 포트

    로, 출력으로 사용될 경우 각 핀은 4개의 LS TTL을 구동할 수 있다. 추가의 외

    부 메모리를 장착하는 경우, 포트 P2는 16비트 길이의 외부 메모리 주소중 상위

    바이트에 해당하는 어드레스 신호(A15,..,A8)의 통로로 사용된다. 외부 메모리를

    연결하지 않는 경우, 범용의 입출력용으로 사용된다.

    P3(P3.7,...,P3.0)

    포트 P3은 8개 핀으로 구성되며, 내부적으로 풀업된 8비트 양방향 입출력 포트

    다. 출력으로 사용될 경우 4개의 LS TTL을 구동할 수 있다. 포트 P3의 각 핀은

    입출력 용도 외에 [표 1.3]과 같은 특수한 기능으로도 사용된다.

    표 1.3 P3 핀의 특수 기능

    핀 명 칭 기 능P3.0 RxD 시리얼 수신 포트P3.1 TxD 시리얼 송신 포트P3.2 외부 인터럽트 0P3.3 외부 인터럽트 1P3.4 T0 타이머/카운터 0의 외부 입력P3.5 T1 타이머/카운터 1의 외부 입력P3.6 외부 데이터 메모리 기록 신호P3.7 외부 데이터 메모리 판독 신호

  • 14 MCS-51 마이크로컴퓨터

    RESET

    MCU를 리셋(reset)하기 위해 사용되는 핀으로, 이 핀에 입력되는 신호가 최소 2

    머신 사이클 이상동안 High 레벨로 유지되어야 한다. 리셋하였을 때 각 레지스

    터의 내정된 초기 상태는 [표 1.4]와 같다. 리셋하고 난 후, PC는 0000H, SP는

    07H, 입출력포트는 FFH, 인터럽트 허용여부를 설정하는 IE은 00H로 설정됨을

    유의할 필요가 있다.

    표 1.4 리셋시의 주요 레지스터의 내정된 초기치

    레지스터 초기값 레지스터 초기값PC 0000H ACC 00HB 00H PSW 00HSP 07H DPTR 0000HP0 FFH P1 FFHP2 FFH P3 FFHIP XX000000B IE 0X000000B

    TMOD 00H TCON 00HTH0 00H TL0 00HTH1 00H TL1 00H

    SCON 00H PCON 0XXX0000BSBUF XXXXXXXXB

    / (Address Latch Enable/Program Pulse)

    는 어드레스를 래취(latch)하기 위해 MCU에서 발생하는 출력신호로 사용될

    때를 말한다. 이 신호는 74HC573과 같은 래취용 IC의 칩 인에이블 핀에 입력된

    다. 이 신호는 P0 핀의 신호가 어드레스 혹은 데이터 신호로 사용될 수 있는데

    이들을 구분하여 래취하는 경우에 사용된다. 신호로 사용되는 경우는 내

    부 EPROM에 프로그램을 기록할 경우에 사용된다.

    (Program Store Enable)

    외부 프로그램 메모리를 접근할 때 사용하는 핀으로, Low 신호에서 활성화된다.

    각 머신 사이클에서 두 번 발생되며, 이 신호의 하강 에지에서 포트 P0에 인가된

    신호는 어드레스의 하위 바이트로 사용된다.

  • 목차 15

    /Vpp(External Access/Vpp)

    는 사용자에 의해 정의되는 기능을 하는 용도로, 일반적으로 외부 롬 혹은

    내부 롬을 사용할 것인지에 따라 다른 신호를 입력한다. 핀에 Low 신호가

    입력되면 외부 롬을, High 신호가 입력되면 내부 롬을 0000H부터 0FFFH 어드

    레스로 접근할 수 있다. Vpp 신호로 사용되는 경우는 내부 EPROM에 프로그램

    을 기록하는 동안 전원 입력 핀으로 사용되는 것을 말한다.

    XTAL1, XTAL2

    시스템 클록 발생회로를 위한 핀이다.

    Vcc, Vss

    Vcc는 전원 핀으로 통상 5V 전원을 인가하며, Vss는 접지 핀으로 전원의 Gnd와

    연결한다.

    1.3 메모리 구조

    MCS-51은 [그림 1.4]와 같이 세 가지 유형의 메모리를 이용하여 구성할 수 있

    다. 즉, MCU 내에 내장된 온칩(on-chip) 메모리, MCU 외부에 접속한 ROM인

    외부 프로그램 메모리, 그리고 외부에 RAM을 연결한 외부 데이터 메모리로 구

    성된다.

    그림 1.4 메모리의 구성

    온칩 메모리는 물리적으로 MCU 자체에 내장된 메모리로 내부 데이터 메모리와

  • 16 MCS-51 마이크로컴퓨터

    내부 프로그램 메모리가 다양한 형태로 조합될 수 있다. 즉, 출시되는 모델에 따

    라 내부 데이터 메모리의 크기, 내부 프로그램 메모리의 유무와 크기가 결정된

    다. 외부 프로그램 메모리는 MCU 외부에 장착하는 프로그램 메모리로, 종종

    EPROM을 사용한다. 외부 데이터 메모리는 MCU 외부에 장착하는 RAM 형태의

    메모리로, 표준 형태의 SRAM이나 플래쉬(flash) 메모리를 흔히 사용한다. 응용

    프로그램을 보다 효율적으로 작성할 수 있기 위해서는 이러한 메모리 구성에 대

    한 내용을 파악하고 있을 필요가 있다.

    1.3.1 메모리 주소 체계

    모든 MCS-51 계열의 MCU는 내부 데이터 메모리와 내부 프로그램 메모리를 위

    해 각기 다른 주소 체계를 제공한다. 즉, 내부 데이터 메모리는 8비트 주소 체계

    를, 내부 프로그램 메모리를 비롯하여 MCU 외부에 확장 연결하는 외부 메모리

    는 16비트 주소 체계를 사용하고 있다.

    8비트 주소 체계

    내부 데이터 메모리는 8비트 길이의 주소에 의해 접근하므로 8비트 처리 시스템

    인 MCS-51 MCU에 의해 16비트 주소 체계의 메모리를 접근하는 것보다 고속으

    로 해당 메모리를 접근할 수 있다.

    그림 1.5 내부 데이터 메모리의 주소 체계

    [그림 1.5]은 내부 데이터 메모리의 주소 체계를 나타낸다. 특히, xx52 모델의

  • 목차 17

    MCU의 경우 주소 80H부터 FFH까지의 내부 램 128바이트가 추가 제공되어 총

    256 바이트의 내부 데이터 메모리를 제공한다.

    xx52 모델 경우 SFR 영역의 주소도 80H부터 FFH이다. 동일 주소를 통해 상위

    의 내부 램과 SFR 영역의 주소 지정에 있어 충돌이 발생한다. 이러한 문제는 각

    영역에 따른 주소 지정 방식을 달리함으로써 해결하고 있다. 주소 00H부터 7FH

    까지는 직접 주소, 혹은 간접 주소 지정 방식으로 접근 가능하다. 하지만 주소

    80H부터 FFH까지 접근할 때 직접 주소 지정 방식을 사용하면 SFR 영역을, 간

    접 주소 지정 방식으로 접근하면 상위의 내부 램 128바이트를 접근하도록 설계

    되었다. 이에 대한 보다 세부적인 내용은 다음 절에서 설명하도록 한다.

    16비트 주소 체계

    반면, 내부 프로그램 메모리는 16비트 길이의 DPTR(data pointer) 레지스터로 주

    소 지정하여 접근할 수 있다. 뿐만 아니라 외부에 확장 구성하는 외부 프로그램

    메모리 및 외부 데이터 메모리 역시 16비트 주소 체계를 사용하므로, 확장 가능

    한 외부 프로그램 메모리 및 데이터 메모리는 최대 64KB까지 가능하다.

    내부 프로그램 메모리는 MCS-51 계열 모델에 따라 ROM 혹은 EPROM 형태로

    4KB 혹은 8KB 크기의 내장된 메모리로 제공된다. 각 모델에 따른 내부 프로그

    램 메모리의 크기는 앞의 [표 1.1]을 참조한다. 내장된 프로그램 메모리는 필요에

    따라 사용할 수도 있고 사용하지 않을 수 있다. 내장된 프로그램 메모리를 사용

    하기 위해서는 MCU의 단자에 High 신호를 인가한다. 내장 프로그램 메모

    리를 사용하지 않으려면 MCU의 단자에 Low 신호를 인가하면 된다.

    [그림 1.6]은 내부 프로그램 메모리가 제공되는 MCS-51 모델에서 내부 프로그램

    메모리를 사용하면서, 외부에 프로그램 메모리와 데이터 메모리를 확장 장착한

    상황에서의 회로 및 주소 체계를 나타낸다. 제공되는 내부 프로그램 메모리의 크

    기에 따라 주소 0000H부터 사용하고, 나머지 주소 공간은 확장 장착된 외부의

    메모리의 주소 공간으로 사용된다. 이렇게 내부 프로그램 메모리를 포함하도록

    하려면 MCU의 단자에 High 신호를 인가하면 된다.

  • 18 MCS-51 마이크로컴퓨터

    그림 1.6 내부 프로그램 메모리를 포함한 경우의 회로 및 주소 체계

    또한 [그림 1.6]에서 보듯이 외부 프로그램 메모리와 외부 데이터 메모리는 필요

    에 따라 조합되어 사용될 수 있으며, 조합되는 ROM과 RAM의 전체 주소 공간

    은 최대 64KB까지 구성될 수 있다.

    추가 장착된 외부 프로그램 메모리에 대한 읽기 신호는 MCU로부터의을

    이용한다. MCU로부터 외부 데이터 메모리 접근동안 필요에 따라 읽기와 기록

    신호인 와 신호를 생성한다. AND 게이트의 두 입력단에 MCU의

    와 신호를 인가하고, 그 게이트의 출력을 외부 프로그램 메모리와 외부

    데이터 메모리의 신호 단자에 연결한다. 이 신호는 이들 외부 메모리에 대

    한 판독 신호로 작용한다.

    [그림 1.7]은 내부 프로그램 메모리를 제공하지 않거나, 제공하더라도 사용하지

    않고 외부에 프로그램 메모리와 데이터 메모리를 확장 장착하는 상황에서의 회

    로 및 주소 체계를 나타낸다. 내부 프로그램 메모리의 사용하지 않기 위해서는 단자에 Low 신호를 인가하면 된다. 이 경우 주소 0000H은 외부에 장착된

    프로그램 메모리 혹은 데이터 메모리의 첫 위치를 지정하게 된다. 외부에 장착하

    는 메모리는 프로그램 메모리만으로 최대 64KB까지, 데이터 메모리만으로 최대

    64KB까지, 혹은 프로그램 메모리와 데이터 메모리의 조합으로 최대 64KB까지

    접속가능하다.

  • 목차 19

    그림 1.7 내부 프로그램 메모리를 제외한 경우의 회로 및 주소 체계

    1.3.2 내부 데이터 메모리

    MCS-51 MCU의 내부 데이터 메모리의 주소체계는 [그림 1.8]과 같이 사상되어

    있다. 이 메모리 공간은 2개의 영역으로 나누어져 있으며, 하위 128B 영역, 상위

    128B 영역 혹은 SFR 영역으로 지칭된다. 주소 00H부터 7FH까지는 하위 128B영

    역인 반면, 상위 128B 영역과 SFR 영역은 물리적으로는 구분됨에도 불구하고

    주소 80H부터 FFH까지 동일한 주소 공간을 사용하고 있는 것을 확인할 수 있

    다.

    그림 1.8 내부 데이터 메모리의 접근

  • 20 MCS-51 마이크로컴퓨터

    내부 데이터 메모리의 주소는 8비트의 주소 체계를 사용하므로 256바이트의 주

    소 공간만을 가질 수 있음을 의미한다. 그러나 내부 데이터 메모리를 위한 주소

    지정 방식을 달리함으로써 최대 384바이트의 공간을 접근하는 것이 가능하다. 하

    위 128B 영역의 각 바이트는 직접 혹은 간접 주소 지정하여 접근할 수 있다. 반

    면 상위 128B 영역은 단지 간접 주소지정에 의해서만 접근할 수 있다. SFR 영

    역은 직접 주소지정 방식에 의해 접근할 수 있다. 즉, RAM의 상위 128B 영역은

    8051 MCU에는 제공되지 않으나, 8052 MCU와 같은 xx82 모델에서는 256바이트

    의 내부 RAM을 제공한다. 이 경우, 80H부터 FFH까지의 주소 영역을 간접 주소

    지정방식에 의해 접근하면 내부 RAM의 상위 128B 영역을 접근하는 것이며, 직

    접 주소지정 방식으로 접근하면 SFR 영역을 접근하는 것이다.

    램의 하위 128B 영역은 [그림 1.9]에 보인 것과 같이 모든 MCS-51 MCU에 존

    재하며, 레지스터 뱅크, 비트 주소 가능 영역, 사용자 데이터 영역의 3개 영역으

    로 구성된다. 이러한 내부 데이터 메모리에 대한 내용은 다음 절에서 보다 자세

    히 살펴보도록 한다.

    그림 1.9 하위 128B 영역

    레지스터 뱅크 영역

    최하위의 32바이트에는 8개 레지스터로 구성되는 레지스터 뱅크(register bank)

    가 4조가 위치한다. 각 레지스터 뱅크내의 레지스터 각각은 R0, R1, ..., R7으로

    지칭된다. 이렇게 레지스터 이름을 사용하는 명령들은 해당 레지스터의 직접 주

    소를 사용하는 명령보다 짧기 때문에 명령 코드를 보다 효율적으로 사용할 수

  • 목차 21

    있도록 한다. 이러한 레지스터 뱅크는 한 순간에 하나의 레지스터 뱅크만이 의미

    를 가지며, PSW(program status word) SFR의 두 비트 RS1, RS0의 설정 값에

    따라 레지스터 뱅크가 선택된다.

    리셋 후 레지스터 뱅크는 RB0가 기본적으로 설정되고, SP(stack pointer)는 07H

    로 설정된다. 이 경우 실질적인 스택 영역은 주소 08H부터 시작된다. 따라서 레

    지스터 뱅크를 제외한 나머지 영역은 프로그램 수행 중에 스택 영역으로 사용된

    다. 이들 레지스터 뱅크는 한 순간에 하나의 레지스터 뱅크만을 사용할 수 있으

    며, 다른 레지스터 뱅크를 선택하는 경우에는 SP도 적절히 재설정해 줄 필요가

    있다.

    비트 주소 가능 영역

    비트 주소 가능 영역은 레지스터 뱅크 다음의 16바이트 영역으로 바이트 단위뿐

    만 아니라 비트 단위의 주소 지정이 가능한 메모리 공간이다. MCS-51 명령은

    많은 비트 처리 명령을 가지고 있으며, 이들 16바이트는 128비트로 구성되므로

    이 영역의 비트 주소는 00H부터 7FH까지의 범위로 주소 지정될 수 있다.

    사용자 데이터 영역

    하위 128B 영역의 나머지 영역은 스택 영역 혹은 사용자의 데이터 메모리로서

    사용될 수 있다. 특히, xx52 MCU와 같이 상위 128B 영역을 제공하는 경우 이

    영역도 데이터 영역으로 사용된다. [그림 1.10]은 이 모델에서의 데이터 영역 및

    SFR 영역의 주소 공간을 보여준다.

    그림 1.10 SFR 영역 및 상위 128B 영역

  • 22 MCS-51 마이크로컴퓨터

    특수 기능 레지스터 영역

    다음으로 특수 기능 레지스터(SFR) 영역은 입출력 포트, 외부 인터럽트, 타이머/

    카운터 등의 인터럽트 등의 처리를 위해 연관된 특수 기능의 레지스터들이 위치

    한 영역이다. 이들 특수 기능 레지스터 영역은 직접 주소 지정에 의해서만 접근

    할 수 있다. 일반적으로 모든 MCS-51 계열의 MCU는 기본적으로 8051 MCU와

    동일한 SFR를 가지며, 동일한 주소 공간을 사용한다. 그러나 보다 개선된 모델

    에서는 부가적인 SFR가 제공되기도 한다. 위의 [그림 1.10]을 통하여 SFR 영역

    의 주소 공간을 확인할 수 있다.

    특수 기능 레지스터 영역의 레지스터 중에서 16개 주소는 바이트 단위 및 비트

    단위 접근이 가능하다. SFR중 비트 단위 주소 지정이 가능한 SFR는 주소의 하

    위 3비트가 0002로 끝나는 주소의 SFR들이다. 이 영역에서의 비트 주소는 80H부

    터 FFH가 사용된다.

    1.3.3 내부 프로그램 메모리

    프로그램 메모리는 리셋 후 곧바로 실행될 실질적인 8051 프로그램을 적재하는

    메모리이다. 이 프로그램 메모리는 16비트 주소 체계를 사용한다. 또한 MCS-51

    계열의 모델에 따라 내부 프로그램 메모리의 사이즈가 다르게 출시된다. 8031의

    경우 내부 프로그램 메모리는 제공되지 않으며, 이 모델을 사용하면서 프로그램

    메모리를 두고자 하는 경우는 외부에 ROM을 장착하는 방식으로 설계할 수 있

    다. 8051의 경우 4K 바이트의 프로그램 메모리를 내장하고 있다. 8052의 경우

    8K 바이트의 프로그램 메모리를 제공한다.

    내장된 프로그램 메모리를 제공하는 모델에서 내부 프로그램 메모리를 사용하기

    위해서는 MCU의 단자에 High 신호를 인가하여야 한다. 이 경우 내부 프로

    그램 메모리의 첫 주소는 0000H 번지가 된다. 따라서 4KB를 제공하는 8051의

    경우 내부 프로그램 메모리의 주소 범위는 0000H부터 0FFFH번지까지, 8KB를

    제공하는 8052의 경우 내부 프로그램 메모리의 주소 범위는 0000H부터 1FFFH

    번지까지 사용되며, 응용 프로그램의 크기도 이 범위 내에 있어야 적재하여 실행

    가능하다.

    [그림 1.11]은 프로그램 메모리의 하위 영역의 메모리 맵을 보인다. 리셋 후

    MCU는 0000H 주소부터 실행을 시작하도록 되어 있으며, 인터럽트를 취급하여

  • 목차 23

    야 하는 경우 각 인터럽트 서비스 루틴의 시작 위치는 [그림 1.11]에서 보듯이

    프로그램 메모리의 고정된 위치에 할당되어 있다. 이들 인터럽트 서비스 루틴의

    첫 명령이 위치해야 할 주소를 인터럽트 벡터 주소(interrupt vector address)라

    한다. 인터럽트 요청시 MCU는 PC의 값을 인터럽트 벡터 값으로 설정함으로써

    해당 인터럽트의 서비스 루틴이 실행될 수 있도록 한다.

    그림 1.11 프로그램 메모리

    예를 들면, 외부 인터럽트 INT0의 벡터 주소는 0003H으로 지정되어 있다. 만일

    외부 인터럽트 0의 요청이 발생한다면 그것의 인터럽트 서비스 루틴은 0003H에

    서 시작되어야 한다. 만일 이 인터럽트를 취급할 필요가 없다면 서비스 루틴이

    있어야할 위치의 메모리는 일반 목적의 프로그램 메모리로서 사용할 수 있다.

    인터럽트 서비스 루틴의 위치들은 8바이트 간격으로 배치되어 있다. 만일 인터럽

    트 서비스 루틴이 충분히 짧다면 그 루틴은 8바이트 구간 내에 상주할 수 있으

    나 보다 많은 코드로 작성된다면 인접한 다른 인터럽트 서비스 루틴의 위치를

    침범할 수 있다. 따라서 인터럽트를 취급하는 프로그램을 작성할 때는, 인터럽트

    서비스 루틴을 메모리의 다른 영역에 적재하고, 그 위치로의 분기 명령을 해당

    인터럽트 벡터 주소에 위치하는 방식을 취한다.

  • 24 MCS-51 마이크로컴퓨터

    일반적으로 인터럽트를 취급하는 응용 프로그램이 있을 경우, 0000H번지에는 실

    질적인 응용 프로그램이 위치하게 되는 0028H 번지 이후의 위치로 분기하는 분

    기 명령이 위치하게 된다. 또한 인터럽트 서비스 루틴도 0028H 번지 이후의 주

    소 공간에 위치하도록 하고, 해당 인터럽트 벡터 주소에서는 실질적인 인터럽트

    서비스 루틴이 위치한 주소로 분기할 수 있도록 분기 명령을 위치시키게 된다.

    1.3.4 외부 프로그램 메모리

    내부 프로그램 메모리의 크기는 MCU 모델의 선택에 따라 없거나, 4KB 혹은

    8KB가 제공될 수 있다. 내장 형태로 제공되는 이러한 내부 프로그램 메모리가

    특정 응용 프로그램을 실행하기에 부족한 경우, 외부에 추가의 ROM을 장착함으

    로써 프로그램 메모리를 확장할 수 있다. 이렇게 외부에 확장된 형태의 프로그램

    메모리를 외부 프로그램 메모리라 한다. MCS-51 MCU에서는 프로그램 메모리

    를 위해 16비트 주소 체계를 사용하므로, 내부 프로그램 메모리를 포함하여 외부

    프로그램 메모리는 최대 64KB까지 확장할 수 있다.

    그림 1.12 에 따른 프로그램 메모리 주소 영역

    프로그램 메모리는 내부 프로그램 메모리와 외부 프로그램 메모리로 구성될 수

  • 목차 25

    있으며, 선택된 MCU 모델에 따라 (External Access) 핀을 Vcc 혹은 Vss의

    어느 것에 접속하느냐에 의해 여러 형태로 구성될 수 있다. [그림 1.12]는 MCU

    모델에 따른 프로그램 메모리의 구성 사례를 보인다.

    8031과 같이 내부 프로그램 메모리를 제공하지 않는 모델의 경우, 외부 프로그램

    메모리를 장착하여 구성해야 하며, 이 경우 최대 64KB까지 장착할 수 있다. 이

    경우, 단자는 Low 신호를 인가함으로써 외부 프로그램 메모리만을 사용함

    을 MCU에 알려주어야 한다.

    8051의 경우 4KB의 내부 프로그램 메모리가 제공되며, 이 경우 내부 프로그램

    메모리를 사용하고 추가로 외부 프로그램 메모리를 장착하고자 하는 경우,

    단자에 Low 신호를 인가하여 내장된 프로그램 메모리를 사용하여 확장하겠다는

    것을 MCU에 알려 주어야 한다. 이 경우 4KB 범위를 넘어서는 주소에 접근하면

    자동적으로 외부 프로그램 메모리를 접근하게 된다. 즉, 주소 0000H부터 0FFFH

    주소까지는 내부 프로그램 메모리를, 나머지 경우는 외부 프로그램 메모리를 접

    근하게 된다. 최대 장착 가능한 프로그램 메모리는 60KB이다.

    8052의 경우 8KB의 내부 프로그램 메모리가 제공되며, 이 경우 내부 프로그램

    메모리를 사용하고 추가로 외부 프로그램 메모리를 장착하고자 하는 경우,

    단자에 Low 신호를 인가하여 내장된 프로그램 메모리를 사용하여 확장하겠다는

    것을 MCU에 알려 주어야 한다. 이 경우 8KB 범위를 넘어서는 주소에 접근하면

    자동적으로 외부 프로그램 메모리를 접근하게 된다. 즉, 주소 0000H부터 1FFFH

    주소까지는 내부 프로그램 메모리를 나머지 경우는 외부 프로그램 메모리를 접

    근하게 된다. 최대 장착 가능한 프로그램 메모리는 56KB이다.

    물론, 내부 프로그램 메모리를 제공하는 8051, 8052 모델에서 내부 프로그램 메

    모리를 사용하지 않고 외부 프로그램 메모리만으로 프로그램 메모리를 구성하는

    것도 가능하다. 이 경우 내부 프로그램 메모리가 제공되지만 사용하지 않겠다는

    의미로 단자에 Low 신호를 인가하고, 최대 64KB까지의 외부 프로그램 메

    모리를 장착할 수 있다.

    외부 프로그램 메모리에 대한 판독 때에는 신호를 사용하여 외부 프로그

    램 메모리를 접근하여야 하며, 내부 프로그램 메모리를 접근할 때는 활성

  • 26 MCS-51 마이크로컴퓨터

    화되지 않아야 한다.

    프로그램 메모리는 최대 64KB로 제한되기 때문에 응용 프로그램의 크기 또한

    64KB로 제한 받는다. 몇몇 어셈블러나 컴파일러는 특수한 보조 하드웨어를 이용

    하여 이 제한을 극복할 수 있는 수단을 제공하기도 하지만, 그러한 특수한 컴파

    일러나 하드웨어가 없다면 프로그램 메모리는 64KB를 초과할 수 없다.

    외부 프로그램 메모리와의 하드웨어 인터페이스는 [그림 1.13]에서 보인다. 입출

    력 포트 P0, P2에 해당하는 16개의 라인은 외부 프로그램 메모리 접근동안 전용

    버스로서 사용된다. 포트 P0는 다중화되어 주소 혹은 데이터 버스로 사용된다.

    PC의 하위 바이트(PCL), 즉 주소의 하위 바이트는 P0로 내보내고, 그런 다음 프

    로그램 메모리로부터 코드 바이트의 도착을 기다리는 플로팅 상태에 있게 된다.

    PC의 하위 바이트가 포트 P0 상에서 유효한 동안 (Address Latch Enable)

    신호는 어드레스 래치로 하위 주소에 해당하는 바이트를 취한다. 그 동안 포트

    P2를 통해 PC의 상위 바이트(PCH)를 내보낸다. 이 때은 EPROM을 활

    성화하면, 포트 P0을 통하여 1바이트의 데이터가 MCU로 읽혀지게 된다.

    MCS-51

    P1 P0

    EA

    ALE

    P3 P2

    PSEN

    EPROM

    INSTR.

    ADDR

    OE

    LATCH

    그림 1.13 외부 프로그램 메모리로부터의 실행

    비록 실제 프로그램 메모리로 사용하는 크기가 64KB보다 작더라도, 프로그램 메

    모리 주소는 항상 16비트 크기를 가진다. 또한 외부 프로그램을 실행하려면 프로

    그램 메모리의 주소를 지정하기 위한 용도로 두 개의 8비트 포트 P2, P0를 사용

  • 목차 27

    해야 한다.

    1.3.5 외부 데이터 메모리

    MCS-51 계열 MCU는 8비트 주소체계를 사용하여 접근하는 내부 데이터 메모리

    를 모델에 따라 128바이트 혹은 256바이트까지 제공한다. 하지만, 이러한 내부

    데이터 메모리로는 부족할 때, 외부 데이터 메모리를 추가 장착할 수 있다. 이

    경우 외부 데이터 메모리의 접근은 앞서 살펴본 프로그램 메모리 공간을 사용하

    므로 16비트 주소체계를 사용한다. 따라서 외부 데이터 메모리로의 접근은 유연

    성이 떨어지며 속도 또한 느리다. 예로 내부 데이터 메모리의 특정 위치 값을 증

    가시키는데 단지 하나의 명령을 요구하며, 하나의 명령 사이클을 필요로 한다.

    하지만 외부 데이터 메모리에 저장된 특정 위치의 값을 증가하기 위해서는 4개

    의 명령과 7개의 명령 사이클을 요구한다. 비록 외부 데이터 메모리가 속도와 유

    연성에서 취약하지만 데이터 메모리 크기를 늘릴 수 있다는 장점을 제공한다.

    MCS-51 MCU에서 외부 데이터 메모리로 최대 64KB까지 추가 장착할 수 있다.

    [그림 1.14]는 MCS-51 MCU에서 장착 가능한 외부 데이터 메모리의 주소 체계

    를 보인다.

    그림 1.14 외부 데이터 메모리의 주소 영역

  • 28 MCS-51 마이크로컴퓨터

    [그림 1.15]는 2KB 크기의 외부 데이터 메모리를 장착하고 이를 접근하기 위한

    하드웨어 구성을 보인다. 즉 크기가 2KB이므로 주소 비트로 11비트를 사용한다.

    이 경우 MCU에서 프로그램 메모리로 내부 프로그램 메모리를 사용한다고 가정

    한 상황이다. 포트 P0는 램에 대한 다중화된 주소/데이터 버스로서 사용되고, 포

    트 P2의 3라인은 RAM에 대한 페이지 지정을 위해 사용된다. CPU는 외부 RAM

    을 접근하는 동안 필요에 따라 와 신호를 생성한다. 프로그램 메모리가

    내부에 있다면 포트 P2의 나머지 비트는 입출력용으로 사용 가능하다.

    P1 P0EA

    MCS-51WITH INTERNAL

    ROMALE

    P3 P2RDWR

    DATA

    RAM

    ADDR

    WE OE

    LATCH

    I/OPAGE BITS

    그림 1.15 외부 데이터 메모리 접근

    외부 데이터 메모리는 최대 64KB까지 장착할 수 있기 때문에, 만일 64KB의 외

    부 데이터 메모리를 구성하는 경우라면 [그림 1.15]의 포트 P2의 모든 비트는 메

    모리 주소의 상위 바이트를 위해 사용되어야 할 것이다.

    1.4 내부 데이터 메모리

    MCS-51 MCU는 내부 데이터 메모리는 흡사 고속의 레지스터들의 집단으로 볼

    수 있다. 프로그램 수행 중에 임시의 데이터를 저장하기 위한 영역과 입출력, 인

    러텁트 등과 관련된 특정 목적의 용도로 사용되는 레지스터들의 영역인 특수 기

  • 목차 29

    능 레지스터 영역으로 나누어 볼 수 있다. 전자는 통상 내부 데이터 메모리의 하

    위 128B 영역을, 후자는 상위의 128B 영역을 의미한다. [그림 1.16]은 MCS-51

    계열 MCU의 내부 데이터 메모리의 메모리 맵을 나타낸다.

    그림 1.16 내부 메모리

    하위의 128B 영역은 다시 레지스터 뱅크 영역, 비트 주소 가능 영역, 데이터 영

    역으로 나누어 볼 수 있다. 이들 영역은 빈번히 혹은 고속으로 접근해야 하는 사

    용자용 임시 기억 공간으로 사용된다. 또한 이 영역은 서브루틴을 호출할 때 반

    환할 주소를 저장하는 등의 용도로 사용되는 스택 영역으로도 사용된다. 따라서

    스택과 사용자용 임시 기억 공간을 위해 공유되기 때문에 주의하여 취급하여야

    한다.

  • 30 MCS-51 마이크로컴퓨터

    1.4.1 레지스터 뱅크 영역

    MCS-51에는 [그림 1.17]과 같이 4조의 레지스터 뱅크(register bank)가 제공된

    다. 하나의 레지스터 뱅크에는 1 바이트 길이의 범용 레지스터 8개로 구성되며,

    특정 레지스터 뱅크의 최하위 바이트부터 R0, R1, ..., R7로 명명된다. 이들 레지

    스터는 많은 명령에서 유용하게 사용되는 보조 레지스터로 이용된다. 또한 이들

    레지스터는 값을 임시 저장하는 데에도 유용하게 사용된다.

    그림 1.17 레지스터 뱅크 영역

    레지스터 뱅크는 [표 1.5]와 같이 PSW의 RS1, RS0 비트의 설정으로 선택된다.

    표 1.5 레지스터 뱅크 선택

    RS1 RS0 뱅크 선택0 0 레지스터 뱅크 0(RB0, 00H~07H)0 1 레지스터 뱅크 1(RB1, 08H~0FH)1 0 레지스터 뱅크 2(RB2, 10H~17H)1 1 레지스터 뱅크 3(RB3, 18H~1FH)

    리셋하였을 때, PSW의 RS1, RS0비트가 00으로 설정되므로 기본 선택되는 레지

    스터 뱅크는 레지스터 뱅크 RB0이다. 또한 이 때의 스택 포인터(SP) 값은 07H

    이다. 이것이 의미하는 바는 범용 레지스터로 레지스터 뱅크 RB0를, 즉, 00H번지

    부터 07번지의 레지스터를 사용하며, 범용 레지스터 R3이라 함은 03H번지를 의

  • 목차 31

    미하게 된다. 또한 SP의 기본 값으로 인해 08H번지부터 스택 영역으로 사용하겠

    다는 의미가 된다. 즉, 스택은 주소 08H부터 시작하여 주소가 커지는 방향으로

    확장되어 사용된다.

    만일 어떠한 프로그램에서 레지스터 뱅크를 다른 것으로 선택하고자 하는 경우

    두가지 점에서 주의를 기울여야 한다. 하나는 범용 레지스터로 접근하는 R0, R1,

    ..., R7의 사용과 스택 영역에 관한 것이다.

    첫 번째로 범용 레지스터 사용에서의 예를 들면 다음과 같다. 다음 명령과 같이,

    범용 레지스터 R4의 값을 어큐뮬레이터의 값과 덧셈하는 경우이다.

    ADD A,R4 ; ACC

  • 32 MCS-51 마이크로컴퓨터

    하지만 프로그램에서 기본 설정된 레지스터 뱅크와는 다른 레지스터 뱅크를 선

    택하는 경우는 SP도 주의를 기울여 재설정하여야 한다. 즉, 아래의 코드와 같이

    레지스터 뱅크 RB1을 사용하기로 선택하였다면, 범용 레지스터 R0, R1, ..., R7으

    로 내부 데이터 메모리의 08H 주소부터 0FH까지의 주소를 사용하므로, 기본 설

    정된 스택 영역과 중복된다. 따라서 레지스터 뱅크 RB1 영역 이후로 스택 영역

    이 위치하도록 SP를 재설정할 필요가 있다.

    MOV PSW,#08H ; RB1 사용, 00001000BMOV SP,#0FH ; 10H부터 스택영역

    레지스터 뱅크의 개념은 MCS-51 CPU에 상당한 유연성을 제공한다. 특히 인터

    럽트 서비스 루틴이나 서브루틴을 사용할 때 그러하다. 메인 루틴에서의 레지스

    터 뱅크와 인터럽트 서비스 루틴이나 일반 서브루틴 내에서 사용하는 레지스터

    뱅크를 달리 선택함으로써, 범용 레지스터 R0, R1, ..., R7을 사용하는데 있어 중

    복 사용으로 인한 데이터 손실의 우려를 덜 수 있다.

    또한 레지스터 뱅크 내의 범용 레지스터 R0와 R1은 다음 명령과 같이 간접 주소

    지정할 수 있는 레지스터로 유용하게 사용된다.

    MOV A,@R0 ; ACC

  • 목차 33

    능 영역으로, 비트 단위의 주소가 부여되어 있어서 비트 명령을 통해 비트 단위

    의 데이터 처리가 가능한 영역이다. 이들 16바이트 영역은 총 128비트로 구성되

    되므로 비트 주소 영역은 128개 비트가 된다. 이 영역에 대한 비트 주소는 00H

    부터 7FH까지 주소를 지정하도록 되어 있으며, [그림 1.18]은 비트 주소 영역의

    각 비트에 할당된 비트 주소를 보여주고 있다.

    그림 1.18 비트 주소 가능 영역의 비트 주소

    프로그램에서 사용되는 00H부터 7FH까지의 주소가 바이트 주소인지 비트 주소

    인지는 해당 명령이 바이트 처리 명령이냐, 비트 처리 명령이냐에 의해 결정된

    다. 즉, 다음과 같이 피연산자로 20H라고 사용되었을 때 첫 번째 명령은 또다른

    피연산자가 즉치 F0H이므로 바이트 단위 처리 명령으로, 바이트 단위 주소 20H

    번지로 1바이트 데이터를 전송하는 것이다. 반면 두 번째 명령은 피연산자가 C

    로, 즉, 캐리 플래그 비트에 대한 비트 단위 처리이므로, 비트 주소 20H의 1 비

    트를 전송하는 명령이다.

    MOV 20H,#0F0H ; 바이트 단위 처리 명령MOV C,20H ; 비트 단위 처리 명령

  • 34 MCS-51 마이크로컴퓨터

    이러한 전송 명령 이외에, 비트 단위 처리 명령으로 해당 비트를 1로 설정하는

    SETB와 0으로 설정하는 CLR 명령들이 제공된다. 예로 비트 주소 영역의 24H

    비트 주소의 값을 1로 설정하고, 25H의 값을 0으로 설정하려면 다음 명령들을

    수행하면 된다.

    SETB 24H ; 비트 주소 24H

  • 목차 35

    하여 비트 주소 영역과 스택 영역이 중복되지 않도록 해야 한다. 즉, 범용 레지

    스터뿐만 아니라 비트 주소 영역도 사용할 것이라면, 다음과 같은 명령을 사용하

    여 스택 영역이 이들 영역과 중첩되지 않도록 해야 한다. 이 명령은 30H 번지부

    터 스택 영역으로 사용하겠다는 의미이다.

    MOV SP,#2FH

    만일 사용자 프로그램이 비트 주소 영역을 사용하지 않는다면, 이 영역은 일반

    목적의 데이터 영역 혹은 스택 영역으로 사용할 수 있다.

    1.4.3 데이터 영역

    내부 데이터 메모리 하위 128바이트 중 레지스터 뱅크 영역, 비트 주소 가능 영

    역을 제외한 나머지 영역은 데이터 영역으로, 사용자 프로그램에서 다양한 목적

    으로 데이터를 임시 기억하는 용도로 사용할 수 있다. 경우에 따라서 스택 영역

    으로 사용될 수도 있다. 물론 레지스터 뱅크 영역, 비트 주소 가능 영역도 그 고

    유의 목적으로 사용되지 않을 경우 데이터 영역에 포함된다.

    MCS-51 MCU중 xx52형태의 모델은 상위의 128 바이트의 데이터 영역을 추가

    로 제공한다. 이들 모델에서 상위 128 바이트의 데이터 영역을 접근하기 위해서

    는 간접 주소 지정 방식으로만 접근해야 한다. 이들 모델에서 데이터 영역 80H

    주소에 F0H 값을 저장하려면 다음과 같은 명령들을 사용해야 한다.

    MOV R1,#80HMOV @R1,#0F0H

    만일 다음의 명령과 같이 직접 주소 지정 방식으로 80H 번지를 접근하게 되면,

    이는 특수 기능 레지스터 영역을 접근하는 것이 된다. 즉 포트 P0에 F0H를 출력

    하는 것이다.

    MOV 80H,#0F0H ; P0

  • 36 MCS-51 마이크로컴퓨터

    직접 주소 지정 방식 둘 다 사용하여 접근할 수 있다.

    1.4.4 특수 기능 레지스터 영역

    특수 기능 레지스터(special function register) 영역은 MCS-51 MCU의 특수한

    기능을 제어하는 메모리 영역이다. 즉, 어떤 SFR는 CPU의 32개의 입출력 핀에

    접근하는 것을 허용하고, 어떤 SFR는 프로그램이 시리얼 포트로 기록하거나 읽

    어 들이는 것을 허용하며, 또 다른 SFR는 사용자가 외부 인터럽트, 타이머/카운

    터, 시리얼 통신 등의 인터럽트와 관련한 환경을 설정하는데 이용되기도 한다.

    [그림 1.19]는 MCS-51 MCU에서 제공되는 특수 기능 레지스터 영역의 SFR 이

    름과 그들의 주소를 나타낸다.

    그림 1.19 특수 기능 레지스터 영역

  • 목차 37

    비록 80H부터 FFH까지의 주소 범위는 128개의 가능한 접근 가능한 특수 기능

    레지스터 영역의 주소들이지만 MCS-51 MCU에서는 단지 21개의 SFR만이 정의

    되어 있다. 이 영역에서 SFR 이름으로 정의되지 않은 주소에 대해서 읽거나 기

    록하는 것은 무의미하다. 즉, 특수 기능 레지스터 영역의 미 정의된 주소를 일반

    목적의 데이터 영역으로 사용하는 것은 허용되지 않는다.

    특수 기능 레지스터 영역을 접근하기 위한 80H번지부터 FFH번지까지의 접근은

    직접 주소 지정 방식으로만 접근하도록 설계되었다. 예로 시리얼 포트에 어떤 값

    을 보내려면 시리얼 버퍼인 SBUF에 해당 데이터 값을 전달하면 된다. 즉, 다음

    명령과 같이 해당 데이터 값 0FH을 주소가 99H인 SBUF라 불리는 SFR에 저장

    하면 된다.

    MOV 99H,#0FH ; 직접 주소

    혹은, 다음 명령과 같이 해당 특수 기능 레지스터 이름을 사용할 수도 있다.

    MOV SBUF,#0FH

    하지만 다음과 같이 간접 주소 지정 방식으로 표현하는 경우는, xx52 계열의

    MCU에서만 의미가 있으며, 이 경우에 한해 상위 128 바이트에 해당하는 데이터

    영역의 99H 번지에 0FH를 저장함을 유의할 필요가 있다.

    MOV R0,#99HMOV @R0,#0FH ; 간접 주소

    특히, [그림 1.19]에서 +0의 열에 존재하는 SFR는 비트 단위 접근이 가능한 특수

    기능 레지스터들로 주소의 최하위 3비트가 000B이다. 특수 기능 레지스터 영역

    내에서 비트 주소로 접근 가능한 주소 공간은 80H부터 FFH까지다. 비트 주소

    00H부터 7FH까지는 앞에서 살펴보았듯이 비트 주소 가능 영역에 할당된다. [그

    림 1.20]은 이러한 SFR들에 부여된 비트 주소를 보여준다.

  • 38 MCS-51 마이크로컴퓨터

    7 6 5 4 3 2 1 080H P0 87H 86H 85H 84H 83H 82H 81H 80H88H TCON 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H90H P1 97H 96H 95H 94H 93H 92H 91H 90H98H SCON 9FH 9EH 9DH 9CH 9BH 9AH 99H 98HA0H P2 A7H A6H A5H A4H A3H A2H A1H A0HA8H IE AFH AEH ADH ACH ABH AAH A9H A8HB0H P3 B7H B6H B5H B4H B3H B2H B1H B0HB8H IP BFH BEH BDH BCH BBH BAH B9H B8HC0H C7H C6H C5H C4H C3H C2H C1H C0HC8H CFH CEH CDH CCH CBH CAH C9H C8HD0H PSW D7H D6H D5H D4H D3H D2H D1H D0HD8H DFH DEH DDH DCH DBH DAH D9H D8HE0H ACC E7H E6H E5H E4H E3H E2H E1H E0HE8H EFH EEH EDH ECH EBH EAH E9H E8HF0H B F7H F6H F5H F4H F3H F2H F1H F0HF8H FFH FEH FDH FCH FBH FAH F9H F8H

    그림 1.20 비트 주소 가능한 SFR의 비트 주소

    비트 주소 가능 영역의 비트 주소 00H부터 7FH는 사용자의 프로그램에서 사용

    자가 그 기능을 정의하여 이용하게 된다. 그러나 80H부터 FFH까지의 비트 주소

    는 몇몇 특수 기능 레지스터를 비트 단위로 접근하는데 이용된다. 예로 포트 P0

    의 비트 인덱스 0인 핀에 High 신호를 출력하려면 다음의 명령들 중 하나를 사

    용하면 된다. 이들 명령을 통해서 특수 기능 레지스터 영역에서의 비트 단위 접

    근 표현 방법도 살펴 볼 수 있다.

    MOV P0,#01H ; 바이트 단위 명령SETB P0.0 ; SFR명과 비트 인덱스SETB 80H.0 ; 바이트 단위 직접 주소와 비트 인덱스 SETB 80H ; 비트 주소

    위의 명령들 중 첫 번째 MOV 명령은 기타의 다른 비트들에 0의 신호를 출력하

    게 된다. 하지만 나머지 세 개의 명령은 비트 인덱스 0만 1로 영향을 주는 반면,

  • 목차 39

    다른 비트들에는 영향을 주지 않는다.

    1.4.5 각 특수 기능 레지스터의 기능

    아래에서 각 SFR의 개괄적인 기능에 대해 살펴보며, 보다 구체적인 사항들은 해

    당 SFR의 취급과 관련된 절에서 살펴보도록 한다.

    P0(Port 0, 80H, Bit-Addressable)

    이는 입출력 포트 0이다. 이 SFR의 각 비트는 마이크로프로세서에서 하나의 핀

    에 대응된다. 예로 P0의 최하위 비트는 P0.0와 최상위 비트는 P0.7과 대응된다.

    이 SFR의 특정 비트에 1의 값을 기록하는 것은 대응하는 입출력 핀에 High 신

    호를, 0을 기록하는 것은 Low 신호를 보내는 것과 마찬가지이다.

    MCS-51 MCU는 4개의 입출력 포트(P0, P1, P2, P3)를 제공하지만, 사용자의 하

    드웨어가 외부 데이터 메모리나 외부 프로그램 메모리를 사용한다면, P0 혹은

    P2는 사용할 수 없을 수도 있다. 이는 포트 P0와 P2를 외부 메모리의 주소 신호

    로 이용하기 때문이다. 따라서 만일 외부 데이터 메모리 혹은 외부 프로그램 메

    모리를 사용한다면, 단지 P1과 P3 포트만이 의도된 목적으로 이용될 수 있다.

    SP(Stack Pointer, 81H)

    SP는 스택 영역을 지시하는 스택 포인터다. 리셋 후 SP은 07H로 초기화되며, 스

    택 영역은 08H부터 시작하여 내부 램의 주소 증가 방향으로 확장된다. 이 SFR

    는 스택에 동작을 가하는 PUSH, POP 명령의 실행에 의해 그 값이 변경된다. 또

    한 서브루틴의 호출 및 반환, 인터럽트 서비스 루틴의 실행 및 반환과 관련한

    LCALL, RET, RETI 등과 같은 명령의 실행으로 그 값이 변경된다. 스택에 값을

    저장하는 PUSH 명령의 경우, SP값을 하나 증가시키고 해당 위치에 값을 저장한

    다. POP 명령의 경우 우선 현재 SP값의 주소에 있는 값을 읽어내고, SP 값을

    하나 감소한다.

    또한, 응용 프로그램에서 레지스터 뱅크를 변경하거나, 비트 주소 가능 영역을

    사용할 필요가 있을 경우는 응용 프로그램의 시작부분에서 이러한 영역과 중첩

    되지 않도록 SP의 값을 적절히 초기화할 필요가 있다. 일반적으로 이러한 영역

    을 피하여 SP의 값을 2FH로 설정하는 것이 바람직하다.

  • 40 MCS-51 마이크로컴퓨터

    DPL/DPH(Data Pointer Low/High, 82H/83H)

    DPH와 DPL은 데이터 포인터(data pointer)라 명명된 16비트 값을 표현하기 위

    해 함께 사용된다. 이 데이터 포인터는 외부 램과 관련된 동작에서 이용되며, 경

    우에 따라서는 프로그램 메모리와 관련된 명령에서도 이용된다. DPTR은 비부호

    2바이트 정수이기 때문에 0000H부터 FFFFH까지의 값을 표현할 수 있다.

    DPTR은 실제로 DPH와 DPL이 결합되어 16비트 값을 표현한다. 실제로 대부분

    의 경우 DPTR을 다룰 때 한 번에 한 바이트씩 취급해야 한다. 예로 DPTR을

    스택에 저장하려면 우선 DPL을 우선 저장하고 다음에 DPH를 저장해야 한다.

    단순히 DPTR을 스택에 저장할 수 없다. 아울러 게다가 DPTR을 증가시키는 명

    령을 실행할 때 두 바이트는 마치 16비트 값처럼 동작한다. 그러나 DPTR을 감

    소시키는 명령은 존재하지 않기 때문에 DPTR의 값을 감소시키려면 바이트 단위

    로 취급하여 DPL을 감소함으로써 그 기능을 구현할 수 있다.

    PCON(Power Control, 87H)

    PCON은 CPU의 파워 제어 모드를 통제하는데 이용한다. 8051의 특정 동작 모드

    는 보다 적은 파워를 요구하는 휴면(sleep) 모드에서 8051이 동작하는 것을 허용

    한다. 이러한 동작 모드는 PCON에 의해 통제된다. 게다가 PCON의 최상위 비트

    는 시리얼 포트의 유효 보 레이트를 두 배로 하는데 이용되기도 한다.

    TCON(Timer Control, 88H, Bit-Addressable)

    TCON은 두 개의 타이머/카운터의 동작 방식 설정에 이용한다. 이 SFR는 두 타

    이머의 각각이 수행되도록 혹은 정지하도록 통제하기도 하며, 각 타이머에서 오

    버플로가 발생되었는지를 나타내는 플래그 비트를 포함한다. 게다가 몇몇 타이머

    와 무관한 비트들이 포함되어 있다. 이들 비트는 외부 인터럽트의 트리거 모드를

    설정하고 외부 인터럽트가 발생할 때 1로 설정되는 외부 인터럽트 플래그를 포

    함한다.

    TMOD(Timer Mode, 89H)

    TMOD는 두 타이머/카운터 각각의 동작 모드를 설정하는데 이용된다. 이 SFR를

    이용하여 사용자 프로그램은 13비트, 16비트 혹은 8비트 자동 재적재 타이머/카

    운터가 되도록 할 수 있다. 게다가 내부 클록을 계수하거나 외부 핀에 들어오는

    사건을 계수하도록 설정할 수 있다.

  • 목차 41

    TL0/TH0(Timer 0 Low/High, 8AH/8CH)

    이 두 SFR은 함께 사용되어 타이머/카운터 0를 표현한다. 이들의 정확한 동작은

    TMOD에서 환경 설정이 어떻게 되었는가에 따라 다르다. 그러나 이들 타이머/카

    운터는 항상 계수를 행한다. 계수하는 방법과 언제 계수할 것인가는 프로그래머

    가 통제할 수 있다.

    TL1/TH1(Timer 1 Low/High, 8BH/8DH)

    이 두 SFR은 함께 사용되어 타이머/카운터 1를 표현한다. 이들의 정확한 동작은

    TMOD에서 환경 설정이 어떻게 되었는가에 따라 다르다. 그러나 이들 타이머/카

    운터는 항상 계수를 행한다. 계수 방법과 언제 계수할 것인가는 통제 가능하다.

    P1(Port 1, 90H, Bit-Addressable)

    P1은 입출력 포트 1이며, 각 비트는 마이크로프로세서에서 하나의 핀에 대응된

    다. 예로 P1의 최하위 비트는 P1.0와 최상위 비트는 P1.7과 대응된다. 이 SFR의

    한 비트에 1의 값을 기록하는 것은 대응하는 입출력 핀에 High 신호를, 0을 기

    록하는 것은 Low 신호를 보내는 것과 마찬가지이다.

    SCON(Serial Control, 98H, Bit-Addressable)

    SCON은 시리얼 포트의 동작에 대한 환경 설정에 이용된다. 이 SFR는 시리얼

    포트의 보 레이트(baud rate) 설정과 관련된 비트, 시리얼 포트가 데이터를 수신

    하도록 활성화되었는지를 나타내는 비트와 데이터가 성공적으로 전송 혹은 수신

    되었을 때 1로 설정되는 플래그들을 포함하고 있다.

    일반적으로 시리얼 포트를 이용하기 위해서는 SCON, TCON, TMOD를 초기화

    하는 과정이 요구된다. 이는 SCON이 시리얼 포트를 통제하기 때문이다. 그러나

    대부분의 경우에서 프로그램은 시리얼 포트의 보 레이트를 설정하기 위해 타이

    머의 하나를 이용할 것이다. 이 경우에 TCON과 TMOD를 초기화함으로써 타이

    머/카운터 1을 적절히 설정할 필요가 있다.

    SBUF(Serial Buffer, 99H)

    SBUF는 시리얼 포트를 통해 데이터를 전송하고 수신하는데 이용된다. SBUF에

    기록되는 값은 시리얼 포트의 TXD 핀으로 전송된다. 마찬가지로 시리얼 포트의

    RXD 핀으로 수신된 값은 SBUF를 통해 사용자 프로그램에 전달된다. 즉, SBUF

    는 기록될 때는 출력 포트 역할을 하며 읽어들 일 때는 입력 포트 역할을 한다.

  • 42 MCS-51 마이크로컴퓨터

    P2(Port 2, A0H, Bit-Addressable)

    P2는 입출력 포트 2로, 각 비트는 마이크로프로세서에서 하나의 핀에 대응된다.

    예로 P2의 최하위 비트는 P2.0와 최상위 비트는 P2.7과 대응된다. 이 SFR의 특

    정 비트에 1을 기록하는 것은 대응하는 입출력 핀에 High 신호를, 0을 기록하는

    것은 Low 신호를 보내는 것과 마찬가지이다.

    IE(Interrupt Enable, A8H)

    IE는 특정 인터럽트를 허용하거나 거부하는데 이용된다. IE의 하위 비트들은 특

    정 인터럽트를 허용하거나 불허하는데 이용되는 반면, 최상위 비트는 모든 인터

    럽트를 허용할지의 여부를 나타내는데 이용된다. 따라서 IE의 최상위 비트가 0이

    면 각각의 인터럽트가 허용된 것에 상관없이 모든 인터럽트는 허용되지 않는다.

    P3(Port 3, B0H, Bit-Addressable)

    P3은 입출력 포트 3으로, 각 비트는 마이크로프로세서에서 하나의 핀에 대응된

    다. 예로 P3의 최하위 비트는 P3.0와 최상위 비트는 P3.7과 대응된다. 이 SFR의

    특정 비트에 1을 기록하는 것은 대응하는 입출력 핀에 High 신호를, 0을 기록하

    는 것은 Low 신호를 보내는 것과 마찬가지이다.

    IP(Interrupt Priority, B8H, Bit-Addressable)

    IP는 각 인터럽트의 상대적인 우선순위를 명시하는데 이용된다. MCS-51 MCU

    에서 인터럽트는 하위(0) 혹은 상위(1)의 두 레벨의 우선순위를 가질 수 있다. 인

    터럽트는 보다 하위의 우선순위를 갖는 인터럽트만 개입할 수 있다. 예로 만일

    시리얼 인터럽트를 제외한 모든 인터럽트를 하위의 우선순위를 가지도록 환경

    설정하였다면, 다른 인터럽트가 현재 수행중일지라도 시리얼 인터럽트는 항상 시

    스템을 가로챌 수 있다. 그러나 시리얼 인터럽트가 수행중이라면 다른 어떠한 인

    터럽트도 시리얼 인터럽트 루틴을 가로채지 못한다. 이는 시리얼 인터럽트 루틴

    은 최상위의 우선순위로 설정되었기 때문이다.

    PSW(Program Status Word, D0H, Bit-Addressable)

    PSW는 명령이 수행된 후에 그 결과에 따라 그 상태를 반영하는 중요한 비트들

    을 저장하는데 이용된다. PSW는 캐리, 보조 캐리, 오버플로, 그리고 패리티 플래

    그를 포함한다. 또한 PSW는 현재 선택된 레지스터 뱅크가 무엇인지를 나타내는

    데 이용되는 레지스터 뱅크 선택 플래그 비트를 가진다.

  • 목차 43

    만일 인터럽트 서비스 루틴을 작성한다면 PSW를 스택에 저장하였다가 인터럽트

    가 종료되면 복구하는 것이 바람직하다. 대부분의 MCS-51 연산 명령들은 명령

    실행 결과를 반영하여 PSW의 비트들을 변경한다. 만일 인터럽트 루틴에 진입할

    때와 동일한 PSW를 가지고 종료하는 것을 보장하지 않는다면 사용자 프로그램

    은 예기치 않은 동작을 유발할 수 있다. 그리고 이는 그 행위가 옳지 않기 때문

    에 디버그하기도 쉽지 않다.

    ACC(Accumulator, E0H, Bit-Addressable)

    어큐뮬레이터는 많은 명령에서 사용되기 때문에 MCS-51 MCU에서 가장 많이

    사용되는 SFR의 하나이다. A의 주소는 E0H에 위치하기 때문에 MOV A,#20H는

    실제로 MOV E0H,#20H와 동일하다. 그러나 후자의 명령은 3 바이트를 요구하는

    반면 전자의 명령은 단지 2 바이트만을 요구하기 때문에 전자의 방법을 이용하

    는 것이 바람직하다.

    B(B Register, F0H, Bit-Addressable)

    B 레지스터는 곱셈과 나눗셈 연산을 행하는 두 명령 MUL, DIV에서 이용된다.

    또한 B 레지스터는 임시의 값을 저장하는 보조 레지스터로 프로그래머에 의해

    보편적으로 이용된다.

    1.5 MCU 타이밍도

    본 절에서는 MCS-51에서의 클록 생성 회로, 명령 사이클, 메모리 사이클에 관에

    살펴본다.

    1.5.1 클록 생성 회로

    모든 MCS-51 MCU는 클록 신호로 사용할 수 있는 내장 오실레이터를 가지고

    있다. 내장 오실레이터를 사용하려면 [그림 1.21]과 같이 CPU의 XTAL1과

    XTAL2 핀 사이에 수정 발진자 혹은 세라믹 발진자를 연결하고 커패시터를 그

    라운드에 연결한다. 발진기는 내부에서 1/12로 분주되어 시스템 클록으로 사용된

    다. 통상 수정 발진자를 사용하는 경우 C1, C2의 용량은 30pF정도를 사용한다.

  • 44 MCS-51 마이크로컴퓨터

    MCS-51HMOS

    OR CHMOS

    XTAL2

    XTAL1VSS

    C2

    C1

    OUATRZ CRYSTALOR CERAMICRESONATOR

    그림 1.21 내장 오실레이터를 사용한 클록 생성

    외부 클록을 사용할 경우는 [그림 1.22]와 같은 여러 가지 방법에 의해 구현 될

    수 있다. 이러한 경우 내장 발진기를 동작시키면 내부 클록의 신호는 외부 클록

    신호 주파수의 1/2로 동작한다.

    (a) HMOS 혹은 CHMOS (b) HMOS 만 (c) CHMOS 만

    그림 1.22 외부 클록을 활용한 클록 생성

    1.5.2 머신 사이클(machine cycle)

    [그림 1.23]의 머신 사이클 타이밍도는 MCS-51 MCU의 발진자 클록, 머신 사이

    클(T), 스테이트(S), 페이즈(P)간의 상호관계를 보여준다. 하나의 머신 사이클인

  • 목차 45

    T는 S1,...,S6까지의 6개 스테이트로 구성되며, 각각의 스테이트는 P1, P2의 2개

    페이즈로 구성된다. 또한 각 페이즈는 1개 발진 주기를 의미한다. 신호는

    매 머신 사이클마다 S1P2에서 S2P1까지와 S4P2에서 S5P1까지 두 차례 활성화

    되며, 이때 명령어 페치가 이루어진다.

    그림 1.23 MCS-51 MCU의 머신 사이클

    1.5.3 명령어 페치 사이클

    [그림 1.24]에서 MCS-51 CPU의 명령어 페치(fetch) 사이클 타이밍도를 보여준

    다. 여기서 신호는 외부 메모리의 주소를 지정할 때, 주소의 하위 바이트

    (PCL)가 포트 P0를 통해 인가되고 있음을 나타내며, 이 신호는 포트 P0

    를 통하여 데이터가 전달될 때 주소의 하위 바이트를 래치(latch)하는데 이용한

    다.

    [그림 1.24] (A)는 1바이트, 1T인 명령어의 페치 사이클을 보여주며, 이러한 명령

    어의 예로는 INC A가 있다. 즉 INC A 명령어는 1 바이트로 구성되며 실행에 1

    머신 사이클을 요구한다. 이러한 경우 S1P2에서 OP 코드를 페치하며, S4P2에서

    페치된 OP 코드는 다음 명령어의 OP 코드이므로 무시하며, 이때 PC 값은 변하

    지 않는다. 무시된 다음 명령어는 다음 머신 사이클에서 다시 페치된다.

    [그림 1.24] (B)는 2바이트, 1T인 명령어의 페치 사이클을 보여주며, 이러한 명령

    어의 예로는 ADD A,#10H가 있다. 즉, ADD A,#10H 명령의 경우 2 바이트 명령

    어이며, 실행할 때 2개 머신 사이클을 요구한다. 이 경우 S4P2에서 피연산자를

    읽어 들여 처리하게 되며 이 때 PC 값은 증가한다.

  • 46 MCS-51 마이크로컴퓨터

    그림 1.24 MCS-51 명령어 페치 사이클

    [그림 1.24] (C)는 1바이트, 2T인 명령어의 페치 사이클을 보여주며, 이러한 명령

    어의 예로는 INC DPTR가 있다. 즉, INC DPTR 명령의 경우 1바이트 명령이면

    서 실행할 때 2개 머신 사이클을 요구한다. 이 경우 첫 번째 머신 사이클의

    S4P2와 두 번째 머신 사이클의 S1P2, S4P2에서 읽어 들인 데이터는 불필요하므

    로 무시하고, 이 때 PC 값은 변하지 않는다.

    [그림 1.24] (D)는 1바이트, 2T인 명령어의 특수한 경우인 MOVX 명령어에 대한

    페치 사이클을 보여준다. 이 명령어의 두 번째 머신 사이클의 S1P2에서 신

    호는 활성화되지 않는다. 대신 신호 혹은 이 발생한다. 첫 번째 머신 사

  • 목차 47

    이클의 S4P2와 두 번째 머신 사이클의 S4P2에 읽혀진 데이터는 불필요한 것이

    므로 무시하며, 이 때 PC 값은 변하지 않는다.

    1.5.4 외부 프로그램 메모리 판독 사이클

    외부 프로그램 메모리와는 포트 P2를 통해 주소의 상위 바이트가, 포트 P0를 통

    해 주소의 하위 바이트 및 판독된 데이터 전달에 이용되도록 연결된다. 또한 신호는 프로그램 메모리의 단자와 연결된다. 신호가 Low로

    되어 활성화된 동안 포트 P0를 통해 주소의 하위 바이트가 출력되는 반면,

    신호가 High가 되어 비 활성화된 동안은 해당 주소의 데이터를 MCU로 전달하

    기 위해 사용된다. 포트 P0가 데이터 전달통로로 사용되는 동안에 직전에 인가되

    었던 주소의 하위 바이트 값은 래치에 의해 유지되어야 한다.

    그림 1.25 외부 프로그램 메모리 판독 사이클

    외부 프로그램 메모리의 판독은 MOVC 명령에 의해 실행되며, [그림 1.25]의 판

    독 타이밍도와 갈이 신호와 함께 MCU로부터 포트 P2와 포트 P0를 통해

    주소 값이 출력된다. 이 때, 포트 P0를 통해 출력된 주소의 하위 바이트(A7..0)는

    신호가 Low로 되어 비활성화된 후에도 래치에 의해 하드웨어적으로 유지

    된다. 신호가 Low가 된 직후 신호가 Low로 변경되어 활성화되면,

  • 48 MCS-51 마이크로컴퓨터

    외부 프로그램 메모리의 단자가 인에이블되어 해당 주소의 데이터가 포트

    P0를 통해 MCU로 전달된다.

    1.5.5 외부 데이터 메모리 판독 사이클

    외부 데이터 메모리는 판독 및 기록이 가능하므로 이를 위한 제어신호 와이 MCU의 포트 P3으로부터 출력된다. MCU의 신호 단자는 외부 데이

    터 메모리의 단자와 연결되고 신호 단자는 외부 데이터 메모리의

    단자와 연결된다.

    외부 데이터 메모리의 판독은 MOVX 명령에 의해 이루어지며, [그림 1.26]의 판

    독 타이밍도와 같이 신호와 함께 MCU로부터 포트 P2와 P0를 통해 주소

    값이 인가된다. 이때 신호는 하나의 머신 사이클 동안 한번만 출력되며, 신호가 Low로 되어 활성화된 후, 외부 데이터 메모리 내 해당 주소의 데이

    터가 포트 P0를 통해 MCU에 전달된다.

    그림 1.26 외부 데이터 메모리 판독 사이클

  • 목차 49

    1.5.6 외부 데이터 메모리 기록 사이클

    외부 데이터 메모리 기록은 판독할 때와 마찬가지로 MOVX 명령에 의해 이루어

    진다. 외부 데이터 메모리에 데이터를 기록하는 타이밍도는 [그림 1.27]에서 보인

    다. 포트 P2와 P0를 통해 주소 값이 인가된 후, 신호를 Low로 하여 주소

    래치를 활성화한다. 이후 외부 데이터 메모리의 해당 주소에 기록할 데이터를 포

    트 P0에 인가한 후, 신호를 Low로 하여 활성화 시켜주면 외부 데이터 메모

    리에 기록된다.

    그림 1.27 외부 데이터 메모리 기록 사이클

  • 50 MCS-51 마이크로컴퓨터

  • 제2장 MCS-51 명령어 51

    제2장 MCS-51 명령어

    본 장에서는 MCS-51 MCU에서 제공하는 명령어들에 대해 살펴본다. 우선 명령

    어의 형식과 주소 지정 방식을 알아보고, 제공되는 각 명령어를 기능 유형별로

    나누어 구체적으로 살펴본다. 마지막 절에는 각 명령어를 유형별로 분류하여 기

    능 등을 요약하여 정리한다.

    2.1