인텔 8051
인텔 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 영역이 데이터 메모리다.
| 영역 | 역할 |
|---|---|
| 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가 연산에 내부적으로 사용하는 결과는 보통 여기에 기록한다. |