인텔 P8051 마이크로컨트롤러 | |
| 이전 모델 | 인텔 MCS-48 |
|---|---|
| 후속 모델 | 인텔 MCS-151 |
인텔 MCS-51(흔히 8051이라 부름)은 1980년 인텔이 임베디드 시스템에서 사용하기 위해 개발한 단일 칩 마이크로컨트롤러(MCU) 계열이다. 인텔의 초기 버전은 1980년대와 1990년대 초반에 인기를 끌었으며, 향상된 바이너리 호환 파생형들은 오늘날에도 여전히 인기가 있다. 이 프로세서는 프로그램 명령어와 데이터를 위한 별도의 메모리 공간을 갖는 복잡 명령어 집합 컴퓨터이다.
인텔의 초기 MCS-51 제품군은 전작인 인텔 MCS-48과 마찬가지로 N형 금속 산화물 반도체(NMOS) 기술을 사용하여 개발되었지만, 이름에 문자 C가 포함된 후기 버전(예: 80C51)은 상보형 금속 산화물 반도체(CMOS) 기술을 사용하여 NMOS 전작보다 전력을 적게 소비한다. 이로 인해 배터리로 작동하는 장치에 더 적합해졌다.
이 제품군은 1996년 향상된 8비트 MCS-151과 8/16/32비트 MCS-251 바이너리 호환 마이크로컨트롤러 제품군으로 이어졌다. 인텔은 더 이상 MCS-51, MCS-151, MCS-251 제품군을 제조하지 않지만, 수많은 공급업체가 만든 향상된 바이너리 호환 파생형들은 오늘날에도 여전히 인기가 있다. 일부 파생형은 디지털 신호 처리 장치(DSP)나 부동소수점 장치(보조 프로세서, FPU)를 통합한다. 이러한 물리적 장치 외에도 여러 기업이 FPGA 또는 ASIC 설계에 사용할 수 있는 IP 코어로서 MCS-51 파생형을 제공한다.
인텔 MCS-51 명령어 집합의 설계자는 존 H. 와튼이다.

8051 아키텍처는 하나의 패키지 내에 많은 기능(중앙 처리 장치(CPU), 랜덤 액세스 메모리(RAM), 고정 기억 장치(ROM), 입출력(I/O) 포트, 직렬 포트, 인터럽트 제어, 타이머)을 제공한다.
8051 코어의 한 가지 특징은 비트 수준의 불리언 논리 연산을 선택된 내부 레지스터, 포트 및 선택된 RAM 위치에서 직접 효율적으로 수행할 수 있는 불리언 처리 엔진의 포함이다. 또 다른 특징은 4개의 뱅크 선택 가능 작업 레지스터 세트가 포함되어 있어 인터럽트 서비스 루틴을 시작하고 종료하기 위한 문맥 교환에 필요한 시간을 크게 줄여준다. 하나의 명령어로 8051은 레지스터 뱅크를 전환할 수 있어, 중요한 레지스터를 RAM으로 전송하는 시간이 많이 걸리는 작업을 피할 수 있다.
2013년 기준[update], 새로운 파생형들이 여전히 많은 주요 칩 제조사에 의해 개발되고 있으며, 케일 및 TASKING과 같은 주요 컴파일러 공급업체들도 지속적으로 업데이트를 출시하고 있다.
MCS-51 기반 마이크로컨트롤러는 일반적으로 1~2개의 UART, 2~3개의 타이머, 128 또는 256바이트의 내부 데이터 RAM(그중 16바이트는 비트 주소 지정 가능), 최대 128바이트의 입출력, 512바이트에서 64KB의 내부 프로그램 메모리를 포함하며, 때로는 외부 데이터 공간에 위치한 확장 데이터 RAM(ERAM)을 포함하기도 한다. 외부 RAM과 ROM은 데이터 및 주소 버스를 공유한다. 오리지널 8051 코어는 머신 사이클당 12 클럭 사이클로 실행되었으며, 대부분의 명령어는 1~2 머신 사이클 내에 실행된다. 12 MHz 클럭 주파수에서 8051은 초당 100만 개의 단일 사이클 명령어 또는 500,000개의 2사이클 명령어를 실행할 수 있었다. 현재는 머신 사이클당 6, 4, 2, 심지어 1 클럭("1T"로 표시)으로 실행되며 최대 100 MHz의 클럭 주파수를 갖는 향상된 8051 코어가 일반적으로 사용되어 초당 훨씬 더 많은 명령어를 처리할 수 있다. 모든 실리콘 랩스, 일부 댈러스(현재는 맥심 인터그레이티드의 일부), 소수의 아트멜(현재는 마이크로칩 테크놀로지의 일부) 장치들은 단일 사이클 코어를 가지고 있다.
8051 변형 제품에는 브라운아웃 감지 기능이 있는 내장 리셋 타이머, 온칩 오실레이터, 자체 프로그래밍 가능한 플래시 ROM 프로그램 메모리, 내장 외부 RAM, 추가 내부 프로그램 저장소, ROM의 부트로더 코드, EEPROM 비휘발성 데이터 저장소, I²C, SPI 및 USB 호스트 인터페이스, CAN 또는 LIN 버스, 직비 또는 블루투스 라디오 모듈, PWM 생성기, 아날로그 비교기, 디지털-아날로그 변환회로, 실시간 시계, 추가 카운터 및 타이머, 인 서킷 디버그 기능, 더 많은 인터럽트 소스, 추가 절전 모드, 더 많거나 적은 병렬 포트 등이 포함될 수 있다. 인텔은 ROM에 베이직 인터프리터를 내장하여 RAM으로 로드된 사용자 프로그램을 실행할 수 있는 마스크 프로그래밍 버전인 8052AH-BASIC을 제조했다.
MCS-51 기반 마이크로컨트롤러는 극한 환경에 적응되어 왔다. 고온 파생형의 예로는 −40°C ~ +250°C 범위의 Tekmos TK8H51 제품군이나 −55°C ~ +225°C 범위의 허니웰 HT83C51(+300°C에서 최대 1년 작동 가능)이 있다. 우주선용 내방사선 MCS-51 마이크로컨트롤러도 사용할 수 있는데, 예를 들어 Cobham(구 Aeroflex)의 UT69RH051이나 NIIET의 1830VE32(러시아어: 1830ВЕ32) 등이 있다.
일부 공학 대학에서는 8051 마이크로컨트롤러를 입문용 마이크로컨트롤러 과정에서 사용한다.
인텔의 첫 MCS-51 마이크로컨트롤러는 4 KB ROM과 128 바이트 RAM을 갖춘 8051이었다. 87로 시작하는 파생형은 사용자 프로그래밍 가능한 EPROM을 가지고 있으며, 때로는 자외선으로 지울 수 있다. 세 번째 문자로 C가 들어가는 파생형은 CMOS 계열이다. 8031과 8032는 각각 128바이트와 256바이트 RAM을 갖춘 ROM리스 버전이다. 마지막 숫자는 메모리 크기를 나타낼 수 있는데, 예를 들어 8 KB ROM을 가진 8052, 16 KB EPROM을 가진 87C54, 32 KB EPROM을 가진 87C58은 모두 256바이트 RAM을 갖추고 있다.
MCS-51은 내부 RAM, 특수 기능 레지스터, 프로그램 메모리, 외부 데이터 메모리라는 4가지 독특한 유형의 메모리를 가지고 있다. 이를 효율적으로 접근하기 위해 일부 컴파일러는 내부 RAM, 내부 RAM에 대한 단일 비트 접근, 특수 기능 레지스터, 선택된(8로 나눌 수 있는) 특수 기능 레지스터에 대한 단일 비트 접근, 프로그램 RAM, 레지스터 간접 접근을 사용하는 외부 RAM, 표준 8비트 레지스터 중 하나를 사용하는 접근, 16비트 간접 접근 레지스터를 활용하는 레지스터 간접 외부 RAM 접근 등 최대 7가지 유형의 메모리 정의를 활용한다.
8051의 명령어 집합은 분리된 메모리(데이터와 명령어)를 가진 하버드 아키텍처로 설계되었으며, 프로그램 메모리에서 가져온 코드만 실행할 수 있고 프로그램 메모리에 쓸 수 있는 명령어는 없다. 그러나 IC에서 나오는 버스는 단일 주소 및 데이터 경로를 가지고 있으며 폰 노이만 구조 버스와 매우 흡사하다.
대부분의 8051 시스템은 명령어 집합을 준수하며 플래시 메모리와 같이 새로운 실행 프로그램을 다운로드하기 위해 맞춤화된 기능을 필요로 한다.
내부 RAM(IRAM)은 0에서 0xFF까지의 주소를 사용하는 8비트 주소 공간을 가지고 있다. 0x00에서 0x7F까지의 IRAM은 명령어의 일부인 8비트 절대 주소를 사용하여 접근할 수 있는 128개의 직접 주소 지정 가능 1바이트 레지스터를 포함한다. 대안적으로, IRAM은 간접적으로 접근할 수 있는데, 주소는 R0 또는 R1에 로드되고 메모리는 @R0 또는 @R1 구문을 사용하거나, PUSH/POP 및 *CALL/RET 연산을 통해 스택 포인터 SP를 거쳐 스택 메모리로 접근한다.
오리지널 8051은 128바이트의 IRAM만 가지고 있다. 8052는 0x80에서 0xFF까지의 IRAM을 추가했는데, 이는 간접적으로만 접근할 수 있다(예: 스택 공간으로 사용). 대부분의 8051 클론들도 256바이트의 전체 IRAM을 가지고 있다.
IRAM 주소 0x80–0xFF에 대한 직접 접근은 대신 특수 기능 레지스터(SFR)로 매핑되는데, 여기에는 누산기 A, B, 캐리 비트 C, 그리고 제어, 상태 등을 위한 다른 특수 레지스터들이 위치한다.
특수 기능 레지스터(SFR)는 IRAM과 동일한 주소 공간인 0x80에서 0xFF에 위치하며, IRAM 하위 절반과 동일한 명령어를 사용하여 직접 접근한다. 이들은 @R0, @R1 또는 스택 포인터 SP를 통해 간접적으로 접근할 수 없으며, 해당 주소에 대한 간접 접근은 대신 IRAM의 두 번째 절반에 접근하게 된다.
특수 기능 레지스터(SFR)에는 누산기 A(또는 ACC, E0 위치)와 B(F0 위치), 프로그램 상태 워드(PSW, D0 위치), 그리고 16비트 데이터 포인터 DPTR(82 위치에 DPL, 83 위치에 DPH) 등이 포함된다. 이 외에도 인터럽트 인에이블 IE(A8), 인터럽트 우선순위 IP(B8); 입출력 포트 P0(80), P1(90), P2(A0), P3(B0); 직렬 입출력 제어 SCON(98) 및 버퍼 SBUF(99); CPU/전원 제어 레지스터 PCON(87); 타이머 0 및 1 제어(TCON, 88) 및 동작 모드(TMOD, 89), 16비트 타이머 0(TL0, 8A; TH0, 8C) 및 타이머 1(TL1, 8B; TH1, 8D) 등을 포함한 핵심 레지스터들이 모든 8051 버전에 존재한다. 다른 주소들은 버전 의존적이며, 특히 8052용 타이머 2 레지스터, 제어 레지스터 T2CON(C8), 16비트 캡처/래치(RCAP2L, CA; RCAP2H, CB) 및 타이머 2(TL2, CC; TH2, CD)는 8051에 포함되어 있지 않다.
0x00에서 0x1F까지의 IRAM 내 32바이트에는 8개의 레지스터 R0–R7이 매핑되는 4개의 8바이트 레지스터 윈도 공간이 있다. 현재 활성 상태인 윈도는 프로그램 상태 워드에 포함된 2비트 주소에 의해 결정된다.
IRAM 위치 0x20–0x2F의 16바이트(128비트)에는 비트 레지스터 00–7F로 개별적으로 주소 지정 가능한 128개의 1비트 레지스터를 위한 공간이 있다.
80–FF로 주소 지정되는 나머지 비트 레지스터들은 16개의 특수 기능 레지스터 80, 88, 90, 98, ..., F0 및 F8(주소가 8의 배수인 것들)에 매핑되므로 누산기 A, B 및 프로그램 상태 워드 PSW를 구성하는 비트들을 포함한다. PSW의 3번과 4번 비트인 레지스터 윈도 주소는 그 자체로 각각 비트 레지스터 D3 및 D4로 주소 지정 가능하며, PSW의 7번 비트인 캐리 비트 C(또는 CY)는 비트 레지스터 D7로 주소 지정 가능하다.
프로그램 메모리(PMEM, IRAM이나 XRAM보다 사용 빈도는 낮음)는 별도의 주소 공간에서 0번 주소부터 시작하는 최대 64 KB의 읽기 전용 메모리이다. 이는 사용하는 칩의 모델에 따라 온칩 또는 오프칩일 수 있다. 프로그램 메모리는 읽기 전용이지만, 일부 8051 변형 제품은 온칩 플래시 메모리를 사용하며 인 시스템 또는 인 애플리케이션 방식으로 메모리를 재프로그래밍하는 방법을 제공한다.
코드 외에도 MOVC A,@A+DPTR 또는 MOVC A,@A+PC 명령어로 검색되는 순람표와 같은 읽기 전용 데이터를 프로그램 메모리에 저장할 수 있다. 주소는 8비트 누산기와 16비트 레지스터(PC 또는 DPTR)의 합으로 계산된다.
특수 점프 및 호출 명령어(AJMP 및 {{{1}}})는 로컬(동일한 2 KB 내) 프로그램 메모리에 접근하는 코드의 크기를 약간 줄여준다.
64 KB보다 큰 코드가 필요할 때, 일반적인 시스템은 범용 입출력을 사용하여 상위 주소 비트를 선택하는 뱅크 전환 방식을 사용한다. 일부 8051 컴파일러는 페이징된 코드에 자동으로 접근하는 기능을 제공한다. 이러한 시스템에서 인터럽트 벡터와 페이징 테이블은 코드의 첫 32 KB에 배치되며 항상 상주한다.
외부 데이터 메모리(XRAM)는 세 번째 주소 공간으로, 역시 0번 주소에서 시작하며 16비트의 주소 공간을 허용한다. 이는 온칩 또는 오프칩일 수 있으며, "외부"라고 불리는 이유는 MOVX(외부 이동) 명령어를 사용하여 접근해야 하기 때문이다. 8051의 많은 변형 제품은 표준 256바이트 IRAM에 더해 칩 상에 몇 킬로바이트의 XRAM을 포함한다.
XRAM의 첫 256바이트는 MOVX A,@R0, MOVX A,@R1, MOVX @R0,A, MOVX @R1,A 명령어를 사용하여 접근할 수 있다. 전체 64 KB는 MOVX A,@DPTR 및 MOVX @DPTR,A를 사용하여 접근할 수 있다. 16비트 주소는 프로그래머가 16비트 인덱스 레지스터를 로드해야 한다. 이러한 이유로 16비트 주소를 사용하는 RAM 접근은 상당히 느리다.
일부 CPU는 8비트 간접 주소가 임의의 8비트 범용 레지스터를 사용하도록 허용한다.
이 기능을 사용할 수 있게 하기 위해, 256바이트보다 큰 내부 RAM을 가지거나 외부 RAM에 접근할 수 없는 일부 8051 호환 마이크로컨트롤러는 내부 RAM을 외부 RAM인 것처럼 접근하며, 256바이트 페이지의 상위 주소를 설정할 수 있게 하는 특수 기능 레지스터(예: PDATA)를 가진다. 이는 범용 입출력 핀을 설정하여 RAM 주소의 상위 바이트를 페이징할 수 있는 MCS8051 모드를 에뮬레이트한다.
64 KB보다 큰 RAM이 필요할 때, 일반적인 시스템은 범용 입출력을 사용하여 상위 주소 비트를 선택하는 뱅크 전환 방식을 사용한다. 일부 8051 컴파일러는 페이징된 데이터에 자동으로 접근하는 기능을 제공한다.
8051에서 메모리 매핑되지 않은 유일한 레지스터는 16비트 프로그램 카운터(PC)이다. 이는 다음에 실행할 명령어의 주소를 지정한다. 상대 분기 명령어는 8비트 부호 있는 오프셋을 제공하며, 이는 PC에 더해진다.
8개의 범용 레지스터 R0–R7은 다른 명령어보다 1바이트 더 짧은 명령어로 접근할 수 있다. 이들은 0x00과 0x1F 사이의 IRAM에 매핑된다. PSW의 두 뱅크 선택 비트에 의해 결정되어, 특정 시점에 해당 범위 중 8바이트만 사용된다.
다음은 특수 기능 레지스터 공간으로 메모리 매핑된 8051 레지스터의 부분 목록이다:
256개의 단일 비트가 직접 주소 지정 가능하다. 이는 0x20–0x2F의 16개 IRAM 위치와 0x80, 0x88, 0x90, ..., 0xF8의 16개 특수 기능 레지스터이다. 이 바이트들의 어떤 비트라도 다양한 논리 연산과 조건 분기를 통해 직접 접근할 수 있다.
PSW는 일반적인 음수(N) 또는 영(Z) 플래그를 포함하지 않는다는 점에 유의하라. 전자의 경우, 누산기의 최상위 비트는 비트 주소 지정 가능 SFR이므로 직접 주소 지정할 수 있다. 후자의 경우, 누산기가 0인지 아닌지에 따라 점프하는 명시적인 명령어가 있다. 두 개의 피연산자를 사용하는 비교 후 점프 연산도 존재한다.
패리티(P) 비트는 종종 패리티를 포함하는 직렬 모드를 구현하는 데 사용된다. 이를 지원하기 위해 표준 MCS51 UART들은 9비트를 보낼 수 있다.
인텔 MCS8051의 마이크로아키텍처는 독점적이지만 발표된 기능들은 그 작동 방식을 시사한다. 이는 다중 사이클 프로세서이다. MCS8051은 대부분의 명령어에 12 클럭 사이클을 사용했다. 많은 명령어들이 누산기를 활용한다. 대조적으로, 호환 컴퓨터들은 곱셈 및 나눗셈 명령어를 제외하고 대부분 1~3 사이클 내에 명령어를 실행한다. 훨씬 높은 속도는 이들이 대부분의 응용 분야에서 MCS8051을 대체하게 된 주요 이유이다.
각 인터럽트는 4개의 우선순위를 가진다. 각 우선순위 내에서 장치들의 인터럽트는 고정된 우선순위를 가진다.
명령어는 모두 1~3바이트 길이이며, 초기 오코드 바이트와 최대 2바이트의 피연산자로 구성된다.
오코드 바이트의 1⁄4인 x0–x3은 비정형 오코드에 사용된다.
오코드 바이트의 3⁄4인 x4–xF는 12개의 가능한 피연산자를 가진 16개의 기본 ALU 명령어에 할당된다. 오코드의 최하위 니블은 다음과 같이 기본 피연산자를 선택한다:
@R0 또는 @R1.address, 이어지는 바이트는 IRAM 또는 SFR 위치를 지정한다.#data, 이어지는 바이트는 8비트 상수를 지정한다. 피연산자가 목적지(INC operand, DEC operand)이거나 연산에 이미 즉치 소스가 포함된 경우(MOV operand,#data, CJNE operand,#data,offset), 이는 대신 누산기가 사용됨을 지정한다.일반적으로 누산기에서 작동하는 세 가지 비트 연산인 ANL, ORL, XRL도 두 가지 메모리 목적지 모드를 지원한다:
opL address,#dataopL address,A최상위 니블은 연산을 다음과 같이 지정한다. 모든 연산이 모든 주소 지정 모드를 지원하는 것은 아니며, 특히 즉치 모드는 주 피연산자가 기록될 때는 사용할 수 없어 6개의 연산에만 적용 가능하며, 그중 4개에서는 누산기 목적지를 인코딩한다. 명령어 니모닉은 목적지, 소스 피연산자 순서를 사용한다.
INC operand: 지정된 피연산자를 증가시킨다. 즉치 모드(오코드 0x04)는 누산기를 지정하여 INC A가 된다.DEC operand: 지정된 피연산자를 감소시킨다. 즉치 모드(오코드 0x14)는 누산기를 지정하여 DEC A가 된다.ADD A,operand: 피연산자를 누산기 A에 더한다. 오코드 0x23(RL A, "왼쪽 회전"이지만 실제로는 왼쪽 시프트)은 ADD A,A로 생각할 수 있다.ADDC A,operand: 피연산자와 캐리 비트를 누산기에 더한다. 오코드 0x33(RLC A, 캐리를 통한 왼쪽 회전)은 ADDC A,A로 생각할 수 있다.ORL A,operand: 피연산자를 누산기에 논리 OR한다. 이 연산의 두 가지 메모리 목적지 형식인 ORL address,#data와 ORL address,A는 오코드 0x43 및 0x42로 지정된다.ANL A,operand: 피연산자를 누산기에 논리 AND한다. 이 연산의 두 가지 메모리 목적지 형식인 ANL address,#data와 ANL address,A는 오코드 0x53 및 0x52로 지정된다.XRL A,operand: 피연산자를 누산기에 논리 XOR한다. 이 연산의 두 가지 메모리 목적지 형식인 XRL address,#data와 XRL address,A는 오코드 0x63 및 0x62로 지정된다.MOV operand,#data: 즉치를 피연산자로 이동한다. 즉치 모드(오코드 0x74)는 누산기를 지정하여 MOV A,#data가 된다.MOV address,operand: 값을 IRAM 또는 SFR 레지스터로 이동한다. 메모리 직접 모드(오코드 0x85)는 두 IRAM 또는 SFR 레지스터 사이에서 직접 이동한다(MOV address,address). 즉치 모드(오코드 0x84)는 오코드 0x75와 중복되므로 이 연산에 사용되지 않는다.SUBB A,operand: 피연산자와 캐리 플래그를 누산기에서 뺀다. 이 연산은 빌림을 발생시키며 빌림 없는 뺄셈은 없다.MOV operand,address: IRAM 또는 SFR 레지스터에서 값을 가져온다. 메모리 직접 모드(오코드 0xA5)는 0x85와 중복되므로 사용되지 않는다. 즉치/누산기 모드(오코드 0xA4)는 0xE5와 중복되므로 사용되지 않는다.CJNE operand,#data,offset: 피연산자를 즉치 #data와 비교하여 같지 않으면 PC + offset으로 점프한다. 이 명령어는 이미 최대 2바이트의 피연산자를 가지고 있기 때문에 즉치 및 메모리 직접 모드(오코드 0xB4 및 0xB5)는 즉치 #data를 생략하고 대신 피연산자를 누산기와 비교한다(CJNE A,#data,offset 및 CJNE A,address,offset). 같으면 점프하는 명령어 CJE는 없음에 유의하라.XCH A,operand: 누산기와 피연산자를 교환한다. 즉치/누산기 모드(오코드 0xC4)는 XCH A,A가 효과가 없으므로 이 연산에 사용되지 않는다.DJNZ operand,offset: 피연산자를 감소시키고 결과가 0이 아니면 PC + offset으로 점프한다. 즉치 모드(오코드 0xD4) 및 레지스터 간접 모드(0xD6, 0xD7)는 사용되지 않는다.MOV A,operand: 피연산자를 누산기로 이동한다. 즉치 모드(오코드 0xE4)는 오코드 0x74와 중복되므로 이 연산에 사용되지 않는다.MOV operand,A: 누산기를 피연산자로 이동한다. 즉치/누산기 모드(오코드 0xF4)는 MOV A,A가 효과가 없으므로 사용되지 않는다.ADD, ADDC, SUBB 명령어만이 PSW 플래그를 설정한다. INC, DEC 및 논리 명령어는 그렇지 않다. CJNE 명령어는 피연산자1 − 피연산자2의 결과인 빌림에 대해서만 C 비트를 수정한다.
비정형 명령어는 더 제한된 주소 지정 모드를 가지며 x0–x3 범위의 오코드와 일반 명령어에서 사용되지 않는 x4–x7 범위의 일부 오코드로 인코딩된다.
| 오코드 | x0 | x1 | x2 | x3 | x4 |
|---|---|---|---|---|---|
| 0y | NOP |
|
LJMP addr16 | RR A (오른쪽 회전) | INC A |
| 1y | JBC bit,offset (비트 설정 시 점프 및 클리어) |
LCALL addr16 | RRC A (캐리를 통한 오른쪽 회전) | DEC A | |
| 2y | JB bit,offset (비트 설정 시 점프) |
RET | RL A (왼쪽 회전) | ADD A,#data | |
| 3y | JNB bit,offset (비트 클리어 시 점프) |
RETI | RLC A (캐리를 통한 왼쪽 회전) | ADDC A,#data | |
| 4y | JC offset (캐리 설정 시 점프) |
ORL address,A | ORL address,#data | ORL A,#data | |
| 5y | JNC offset (캐리 클리어 시 점프) |
ANL address,A | ANL address,#data | ANL A,#data | |
| 6y | JZ offset (0일 때 점프) |
XRL address,A | XRL address,#data | XRL A,#data | |
| 7y | JNZ offset (0이 아닐 때 점프) |
ORL C,bit | JMP @A+DPTR | MOV A,#data | |
| 8y | SJMP offset (짧은 점프) |
ANL C,bit | MOVC A,@A+PC | DIV AB | |
| 9y | MOV DPTR,#data16 |
MOV bit,C | MOVC A,@A+DPTR | SUBB A,#data | |
| Ay | ORL C,/bit |
MOV C,bit | INC DPTR | MUL AB | |
| By | ANL C,/bit |
CPL bit | CPL C | CJNE A,#data,offset | |
| Cy | PUSH address |
CLR bit | CLR C | SWAP A | |
| Dy | POP address |
SETB bit | SETB C | DA A (10진 조정) | |
| Ey | MOVX A,@DPTR |
MOVX A,@R0 | MOVX A,@R1 | CLR A | |
| Fy | MOVX @DPTR,A |
MOVX @R0,A | MOVX @R1,A | CPL A |
추가 비정형 명령어:
ESC 8051에서는 사용되지 않지만, MCS-251과 같은 후속 제품에서 확장 오코드로 사용된다.XCHD A,@R0–1 피연산자의 하위 니블을 교환한다.SJMP(짧은 점프) 오코드는 부호 있는 상대 오프셋 바이트 피연산자를 취하여 다음 명령어의 주소를 기준으로 그곳으로 제어를 전송한다. AJMP/{{{1}}} 오코드는 오코드 바이트의 최상위 3비트와 이어지는 바이트를 결합하여 PC 레지스터의 하위 11비트를 대체하는 데 사용되는 11비트 목적지를 지정한다(PC 레지스터의 상위 5비트는 유지되므로 2048바이트 페이지 내에서만 점프 가능). 더 먼 거리를 위해서는 LJMP 및 LCALL 명령어가 16비트 목적지를 허용한다.
8051의 인기 이유 중 하나는 단일 비트에 대한 광범위한 연산이다. 비트는 항상 절대 주소로 지정되며, 레지스터 간접 또는 인덱스 주소 지정은 없다. 단일 비트에서 작동하는 명령어는 다음과 같다:
SETB bit, CLR bit, CPL bit: 지정된 비트를 설정, 클리어 또는 반전한다.JB bit,offset: 비트가 설정되어 있으면(PC+offset으로) 점프JNB bit,offset: 비트가 클리어되어 있으면 점프JBC bit,offset: 비트가 설정되어 있으면 점프하고 비트를 클리어한다.MOV C,bit, MOV bit,C: 지정된 비트를 캐리 비트로 이동하거나 그 반대로 한다.ORL C,bit, ORL C,/bit: 비트(또는 그 반전)를 캐리 비트에 OR한다.ANL C,bit, ANL C,/bit: 비트(또는 그 반전)를 캐리 비트에 AND한다.비트 피연산자는 address.number 형식으로 작성된다. 캐리 플래그는 비트 주소 지정 가능 프로그램 상태 워드의 7번 비트이므로, SETB C, CLR C 및 CPL C 명령어는 SETB PSW.7, CLR PSW.7 및 CPL PSW.7의 더 짧은 대응 명령어이다.
8051을 위한 다양한 고급 프로그래밍 언어 컴파일러가 있다. 8051용으로 여러 C 컴파일러를 사용할 수 있는데, 대부분 프로그래머가 6가지 메모리 유형 중 각 변수가 저장될 위치를 지정할 수 있게 하며 다중 레지스터 뱅크 및 비트 조작 명령어와 같은 8051 전용 하드웨어 기능에 대한 접근을 제공한다. 많은 상용 C 컴파일러가 존재한다. 스몰 디바이스 C 컴파일러(SDCC)는 널리 사용되는 오픈 소스 C 컴파일러이다. C++, 포스, 베이직, 오브젝트 파스칼, 파스칼, PL/M 및 모듈라-2도 8051에서 사용할 수 있지만 C나 어셈블리어보다 덜 널리 사용된다.
IRAM, XRAM 및 PMEM(읽기 전용)이 모두 0번 주소를 가지기 때문에 8051 아키텍처용 C 컴파일러는 특정 데이터가 저장되어야 할 위치(예: PMEM의 상수 또는 IRAM에서 빠른 접근이 필요한 변수)를 나타내기 위해 컴파일러 전용 지시자나 다른 확장을 제공한다. 데이터가 세 가지 메모리 공간 중 하나에 있을 수 있으므로, 포인터 유형에 메모리 공간을 포함하도록 제한하거나 포인터와 함께 메타데이터를 저장하는 방식으로 포인터가 어느 메모리를 참조하는지 결정할 수 있는 메커니즘이 일반적으로 제공된다.


인텔은 2007년 3월 MCS-51 제품군을 단종했지만, 다른 공급업체로부터 향상된 8051 제품이나 실리콘 지식 재산권이 정기적으로 추가되고 있다.
8051의 전작인 8048은 첫 IBM PC의 키보드에 사용되어 키 입력을 직렬 데이터 스트림으로 변환해 컴퓨터 본체로 보냈다. 인텔 8049는 Sinclair QL에서 유사한 역할을 수행했다. 8048과 그 파생형들은 오늘날[update]에도 기본적인 모델 키보드에 사용된다.
8031은 내부 프로그램 ROM이 없는 오리지널 8051의 축소 버전이었다. 이 칩을 사용하려면 8031이 가져와 실행할 프로그램이 포함된 외부 ROM을 추가해야 했다. 8051 칩은 8031 기반 설계에서 EA 핀의 정상 상태에 의해 8051 내부 ROM이 비활성화되므로 ROM리스 8031로 판매될 수 있었다. 공급업체는 8051 ROM의 오류 코드나 단순히 8051의 과잉 공급 및 8031의 공급 부족과 같은 여러 가지 이유로 8051을 8031로 판매할 수 있었다.

8044(및 ROM리스 8344와 EPROM이 있는 8744)는 8051 코어에 SDLC 제어기를 추가했다(특히 Bitbus 애플리케이션용).
8052는 오리지널 8051의 향상된 버전으로, 128바이트 대신 256바이트의 내부 RAM, 4 KB 대신 8 KB의 ROM, 그리고 세 번째 16비트 타이머를 특징으로 했다. 대부분의 현대 8051 호환 마이크로컨트롤러는 이러한 기능을 포함한다.
8032는 내부 ROM 프로그램 메모리가 없다는 점을 제외하면 8052와 동일한 기능을 가졌다.
8751은 4 KB ROM 대신 4 KB EPROM을 가진 8051이었다. 이들은 비휘발성 메모리 유형을 제외하면 동일했다. 이 부품은 다이 상단에 투명한 석영 창이 있는 세라믹 패키지로 제공되어 자외선을 사용하여 EPROM을 지울 수 있었다. 관련 부품은 다음과 같다: 8752는 8 KB EPROM, 8754는 16 KB EPROM, 8758은 32 KB EPROM을 가졌다.
80C537(ROM리스)과 80C517(8 KB ROM)은 자동차 산업을 위해 설계된 CMOS 버전이다. 개선 사항은 주로 새롭고 향상된 주변 장치를 포함한다. 80C5x7은 페일세이프 메커니즘, 아날로그 신호 처리 시설, 향상된 타이머 기능 및 32비트 산술 주변 장치를 가지고 있다. 기타 기능은 다음과 같다:
20개 이상의 독립 제조사가 MCS-51 호환 프로세서를 생산한다.
MCS-51과 호환되는 다른 IC 또는 IP는 아날로그 디바이스, 민스크의 Integral, 키이우의 Kristall, 및 보로네시의 NIIET에 의해 개발되었다.
오늘날 8051은 여전히 이산 부품으로 구매할 수 있지만, 대부분 실리콘 지식 재산권 코어로 사용된다. VHDL 또는 베릴로그와 같은 하드웨어 기술 언어 소스 코드나 FPGA 넷리스트 형태로 제공되는 이 코어들은 일반적으로 USB 플래시 드라이브에서 세탁기, 복잡한 무선 통신 시스템 온 칩에 이르는 다양한 제품의 임베디드 시스템 내부에 통합된다. 설계자들은 ARM Cortex-M, MIPS 아키텍처 및 BA22와 같은 32비트 프로세서에 비해 작은 크기와 낮은 전력 소비 때문에 8051 실리콘 IP 코어를 사용한다.
후속 8051 코어 설계들은 오리지널 MCS-51 명령어 집합과의 호환성을 유지하면서 성능을 향상시켰다. 오리지널 인텔 8051은 수동 저항 풀업에서 전력을 소비하는 NMOS 논리 게이트의 수를 최소화하기 위해 머신 사이클당 12개의 클럭 마이크로코드 사이클을 사용하는 마이크로코드 엔진이었다. 대부분의 명령어는 1~2 머신 사이클 내에 실행되었다. 12 MHz의 일반적인 최대 클럭 주파수에서 오리지널 8051 유형은 초당 100만 개의 단일 사이클 명령어 또는 500,000개의 2사이클 명령어를 실행한다. 활성 P채널 FET 풀업을 사용하는 CMOS로의 전환으로 마이크로코드 없이 코어를 구현할 수 있게 되었다. 향상된 8051 IP 코어는 머신 사이클당 1 클럭 사이클로 실행된다. 최대 450 MHz의 클럭 주파수에서 8051 호환 프로세서는 초당 최대 4억 5천만 개의 명령어를 실행할 수 있다.

최대 675 MIPS의 성능을 가진 16비트 디지털 신호 처리 장치(DSP)(예: MP3 또는 Vorbis 코딩/디코딩용) 및 통합 USB 2.0 인터페이스를 추가하거나 지식 재산권으로 존재하는 여러 파생형이 있다.
1996년 인텔은 8051과 완벽하게 바이너리 및 명령어 집합 호환되는 최대 6배 더 빠른 변형인 MCS-151 제품군을 발표했다. 8051과 달리 MCS-151은 16비트 내부 코드 버스를 갖춘 파이프라인 CPU이며 속도가 6배 빠르다. MCS-151 제품군 역시 인텔에 의해 단종되었지만 바이너리 호환 및 부분적으로 향상된 파생형들로 널리 사용 가능하다.
16 MB(24비트) 주소 공간과 6배 더 빠른 명령어 사이클을 갖춘 80251 8/16/32비트 마이크로컨트롤러는 1996년 인텔에 의해 도입되었다. 이는 8비트 8051로 작동할 수 있으며, 24비트 선형 주소 지정, 8비트 ALU, 8비트 명령어, 16비트 명령어, 제한된 32비트 명령어 세트, 16개의 8비트 레지스터, 16개의 16비트 레지스터(그중 8개는 8비트 레지스터 쌍과 겹침), 10개의 32비트 레지스터(그중 8개는 16비트 레지스터 쌍과 겹침)를 가진다.
이는 확장 명령어와 높은 성능을 가진 후기 변형 제품을 특징으로 한다. 또한 IP로도 이용 가능하다. 이는 3단계 파이프라인이다. MCS-251 제품군 역시 인텔에 의해 단종되었지만, 많은 제조사의 바이너리 호환 및 부분적으로 향상된 파생형으로 널리 사용 가능하다.
80251 새 명령어는 x8–xF 범위의 오코드로 할당되며, 다음과 같은 두 가지 방법 중 하나로 이전에 사용되지 않았던 오코드 A5를 오코드 접두사로 사용하여 선택된다:: 4–13
일반적으로 새로운 80251 명령어는 2바이트 길이이며(A5 접두사 제외), 첫 번째 바이트는 연산을 지정하고 두 번째 바이트는 두 개의 4비트 레지스터 피연산자, 또는 하나의 레지스터 피연산자와 4개의 추가 오코드 비트를 인코딩한다.