인텔 8051은 1980년 인텔에서 발표한 마이크로컨트롤러로, CISC ISA를 쓰는 마이크로컨트롤러 중 지금까지도 가장 잘 쓰이는 장수만세 MCU이다.

구조

편집

주요 기능

편집

메모리 구조

편집

인텔 8051 칩은 범용 CPU처럼 내부에 직접 내장된 레지스터가 없고 그 대신 존재하는 내부 메모리 공간(Internal RAM)에 직접 데이터를 읽고 쓰는 구조이다. 겨우 128byte에 불과하지만, 바로 이 메모리에만 읽고 써서 레지스터 뱅크, 특수 레지스터, 통신 포트 등을 제어하며 모든 장비를 움직일 수 있다. 그 외에 프로그램 메모리와 데이터 메모리로 연결된 버스가 있으며 8bit 프로세싱 마이크로컨트롤러지만 데이터 버스는 16bit Adressing이 가능하여 최대 64KB까지 인식할 수 있는 별도의 SRAM 등을 연결할 수 있다. 그런데 괴상한 것은 ROM 내 프로그램을 싣는 프로그램 메모리와 평범한 연산용 값들이 들어있는 데이터 메모리 영역이 나뉘어 있는 하버드 구조처럼 보임에도 실제로는 프로그램 코드와 데이터를 MCU로 가져올 때 외부 RAM의 버스를 공유하기에 고전적인 폰 노이만 구조로 작동한다는 것이다. 즉 프로그램 영역과 데이터 영역에 동시 접근할 수 없다(…). 역시 발로 CPU 만들어도 잘 팔리는 인텔 제품답다 보통 포트 0.X 핀들과 포트 2.X 핀들에 연결한 단일 메모리 내 처음 4KB 영역이 프로그램 메모리, 그 이후 60KB 영역이 데이터 메모리다.

인텔 8051의 Internal RAM 구조
영역 역할
0x80~0xFF 특수 레지스터 영역. 스택 포인터와 누산 레지스터 같은 전용 레지스터도 있고, 포트 I/O 수행, 타이머 값 읽기, 레지스터 설정 등이 가능한 시스템 레지스터도 있다.
0x30~0x7F 데이터 영역. 추가적인 범용 레지스터처럼 쓸 수도 있고 스택 영역으로도 쓸 수 있다. 보통은 스택의 용도로만 사용한다.
0x20~0x2F 비트 플래그 레지스터, 16바이트의 영역이지만 이곳의 레지스터들은 단일 비트로 되어 있어서 128개의 번지를 가진다. 이곳의 레지스터 번호들은 여기에 접근하도록 되어 있는 전용 명령어가 있어 다른 유형의 8051용 레지스터들의 주소 체계와 구분하여 사용하기 때문에 혼동될 일은 없다.
0x00~0x1F 0x08 단위로 끊어지는 4개의 레지스터 뱅크(레지스터 윈도우라고도 한다). 각 뱅크에는 8개의 8bit 레지스터가 매핑되어 있으며 특수 레지스터 영역의 Program Status Word 내 RS0와 RS1 2개 bit 값으로 사용할 뱅크를 선택할 수 있다(뱅크 스위칭). CPU가 연산에 내부적으로 사용하는 결과는 보통 여기에 기록한다.

8051 칩은 8bit 구성의 포트 4개와 특수 핀들이 외부에 노출되어 있다.

다음은 특수 핀이다.

  • Reset: Active-High 방식의 CPU 리셋 핀이다. 2사이클 동안 High가 들어오면 CPU가 리셋된다.
  • EA: 0이면 외부 롬 사용(8031, 8051), 1이면 내부 롬 사용을 병행(8751, 8951)
  • ALE: 0이면 포트 0가 주소를 보내고 있으며, 1이면 포트 0으로 외부 데이터 메모리의 값이 들어온다.
  • PSEN: 외부 메모리의 프로그램 영역에 접근 중임을 나타내는 신호 핀
  • XTAL1과 XTAL2: 클럭 연결부. 내장 클럭 발진기를 사용하느냐, 아니면 외부 클럭 발진기의 신호를 받느냐에 따라 연결법이 다르다. 전자의 경우 콘덴서를 경유하며 두 핀에 모두 도선을 연결하고, 외부 클럭 발진기를 사용할 경우 XTAL1 접지 후 XTAL2에 발진기를 연결한다.
  • VCC/VSS: DC 5V 전원 핀과 접지 핀.