Computer/CPU

Intel MCS-51 [Intel / 1980]

AICAT 2024. 9. 23. 15:39
반응형

intel 8051

 

인텔 MCS-51(일반적으로 8051로 불림)은 1980년에 인텔이 임베디드 시스템용으로 개발한 단일 칩 마이크로컨트롤러(MCU) 시리즈다. 인텔 MCS-51 명령어 세트의 설계자는 존 H. 워튼이다. 인텔의 초기 버전은 1980년대와 1990년대 초반에 인기를 끌었으며, 향상된 이진 호환 파생 제품은 오늘날에도 여전히 인기가 있다. 이 마이크로컨트롤러는 복잡한 명령어 집합 컴퓨터(CISC)이지만, 대형 레지스터 세트와 레지스터 윈도우와 같은 RISC 아키텍처의 일부 기능도 갖추고 있으며, 프로그램 명령어와 데이터를 위한 별도의 메모리 공간을 가지고 있다.

인텔의 초기 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(응용 맞춤형 집적 회로) 설계에 사용할 수 있는 MCS-51 파생 제품을 IP 코어로 제공한다.

중요한 기능 및 응용 프로그램

i8051 마이크로아키텍처
8051 아키텍처는 하나의 패키지에 많은 기능(CPU, RAM, ROM, I/O 포트, 직렬 포트, 인터럽트 제어, 타이머)을 제공한다:

- 8비트 산술 논리 유닛(ALU) 및 누산기, 8비트 레지스터(특수 이동 명령어가 있는 16비트 레지스터 하나), 8비트 데이터 버스 및 2×16비트 주소 버스, 프로그램 카운터, 데이터 포인터 및 관련 8/11/16비트 작업; 따라서 주로 8비트 마이크로컨트롤러이다.
- 17개의 명령어를 가진 불리언 프로세서, 1비트 누산기, 32개의 레지스터(4 × 8비트, 비트 주소 지정 가능) 및 최대 144개의 특수 1비트 주소 지정 가능 RAM 변수(18 × 8비트)
- 곱셈, 나눗셈 및 비교 명령어
- 8개의 레지스터가 있는 4개의 빠른 전환 가능한 레지스터 뱅크(메모리 매핑됨)
- 선택적 레지스터 뱅크 전환이 가능한 빠른 인터럽트
- 선택 가능한 우선 순위가 있는 인터럽트 및 스레드
- 128 또는 256바이트의 온칩 RAM(IRAM)
- 듀얼 16비트 주소 버스; 하버드 아키텍처에서 두 개의 메모리 버스를 사용하여 2×216 메모리 위치: 각각 64KB(65,536 위치)의 ROM(PMEM) 및 외부 RAM(XRAM)에 액세스할 수 있다.
- 온칩 ROM(803x 변형에는 포함되지 않음)
- 4개의(3개 전체) 8비트 양방향 입출력 포트, 비트 주소 지정 가능
- UART(직렬 포트)
- 두 개의 16비트 카운터/타이머
- 절전 모드(일부 파생 제품에서 사용 가능)

8051 코어의 한 가지 특징은 불리언 처리 엔진이 포함되어 있어 선택된 내부 레지스터, 포트 및 선택된 RAM 위치에서 비트 수준의 불리언 논리 연산을 직접 효율적으로 수행할 수 있다는 것이다. 또 다른 특징은 네 개의 뱅크 선택 가능한 작업 레지스터 세트가 포함되어 있어 인터럽트 서비스 루틴에 들어가고 나가는 컨텍스트 전환에 필요한 시간을 크게 줄여준다. 8051은 하나의 명령어로 레지스터 뱅크를 전환할 수 있어 중요한 레지스터를 RAM으로 전송하는 시간 소모적인 작업을 피할 수 있다.

UART와 필요한 경우 타이머가 구성되면, 프로그래머는 UART에 의해 마지막 비트가 전송 시프트 레지스터에서 이동될 때마다 전송 시프트 레지스터를 다시 채우거나(데이터를 다른 곳으로 복사) 수신 시프트 레지스터를 비우는 간단한 인터럽트 루틴만 작성하면 된다. 그런 다음 메인 프로그램은 스택에 8비트 데이터를 읽고 쓰는 방식으로 직렬 읽기 및 쓰기를 수행한다.

파생 기능
2013년 현재, 많은 주요 칩 제조업체에서 새로운 파생 제품을 계속 개발하고 있으며, IAR Systems, Keil 및 Altium Tasking과 같은 주요 컴파일러 공급업체는 지속적으로 업데이트를 출시하고 있다. MCS-51 기반 마이크로컨트롤러는 일반적으로 하나 또는 두 개의 UART, 두 개 또는 세 개의 타이머, 128 또는 256바이트의 내부 데이터 RAM(그 중 16바이트는 비트 주소 지정 가능), 최대 128바이트의 I/O, 512바이트에서 64KB의 내부 프로그램 메모리 및 때로는 외부 데이터 공간에 위치한 확장 데이터 RAM(ERAM)의 양을 포함한다. 외부 RAM 및 ROM은 데이터 및 주소 버스를 공유한다. 원래 8051 코어는 기계 주기당 12 클록 사이클에서 실행되었으며 대부분의 명령어는 하나 또는 두 개의 기계 주기에서 실행되었다. 12MHz 클록 주파수로 8051은 초당 100만 개의 1사이클 명령어 또는 초당 500,000개의 2사이클 명령어를 실행할 수 있었다. 향상된 8051 코어는 이제 일반적으로 6, 4, 2 또는 심지어 1 클록당 기계 주기(1T로 표시)에서 실행되며 클록 주파수는 최대 100MHz에 이르며, 따라서 초당 더 많은 명령어를 실행할 수 있다. Silicon Labs의 모든 장치, 일부 Dallas(현재 Maxim Integrated의 일부) 및 일부 Atmel(현재 Microchip의 일부) 장치는 단일 사이클 코어를 가지고 있다.

8051 변형에는 브라운아웃 감지 기능이 있는 내장 리셋 타이머, 온칩 오실레이터, 자체 프로그래밍 가능한 플래시 ROM 프로그램 메모리, 내장 외부 RAM, 추가 내부 프로그램 저장소, ROM의 부트로더 코드, EEPROM 비휘발성 데이터 저장소, I2C, SPI 및 USB 호스트 인터페이스, CAN 또는 LIN 버스, Zigbee 또는 Bluetooth 라디오 모듈, PWM 생성기, 아날로그 비교기, 아날로그-디지털 및 디지털-아날로그 변환기, RTC, 추가 카운터 및 타이머, 회로 내 디버깅 기능, 더 많은 인터럽트 소스, 추가 절전 모드, 더 많거나 적은 병렬 포트 등이 포함될 수 있다. 인텔은 ROM에 BASIC 인터프리터가 포함된 마스크 프로그래밍 버전인 8052AH-BASIC을 제조했으며, RAM에 로드된 사용자 프로그램을 실행할 수 있다.

MCS-51 기반 마이크로컨트롤러는 극한 환경에 적응되었다. 고온 변형의 예로는 -40°C에서 +250°C까지의 Tekmos TK8H51 제품군 또는 -55°C에서 +225°C까지의 Honeywell HT83C51(최대 +300°C에서 1년 동안 작동 가능)이 있다. 우주선에서 사용하기 위한 방사선 경화 MCS-51 마이크로컨트롤러도 제공된다. 예를 들어 Cobham(이전 Aeroflex)의 UT69RH051 또는 NIIET의 1830VE32(러시아어: 1830ВЕ32) 등이 있다.

일부 공학 학교에서는 8051 마이크로컨트롤러를 소개 마이크로컨트롤러 과정에서 사용한다.

패밀리 명명 규칙
인텔의 첫 번째 MCS-51 마이크로컨트롤러는 4KB ROM과 128바이트 RAM을 가진 8051이었다. 87로 시작하는 변형은 사용자 프로그래밍 가능한 EPROM을 가지고 있으며, 때로는 UV로 지울 수 있다. 이름의 세 번째 문자가 C인 변형은 CMOS의 일종이다. 8031 및 8032는 ROM이 없는 버전으로, 각각 128 및 256바이트 RAM을 가지고 있다. 마지막 숫자는 메모리 크기를 나타낼 수 있다. 예를 들어, 8KB ROM을 가진 8052, 16KB EPROM을 가진 87C54, 32KB EPROM을 가진 87C58은 모두 256바이트 RAM을 가지고 있다.

메모리 아키텍처
MCS-51에는 내부 RAM, 특수 기능 레지스터, 프로그램 메모리 및 외부 데이터 메모리의 네 가지 유형의 메모리가 있다. 이를 효율적으로 액세스하기 위해 일부 컴파일러는 최대 7가지 유형의 메모리 정의를 사용한다: 내부 RAM, 내부 RAM에 대한 단일 비트 액세스, 특수 기능 레지스터, 선택된(8로 나누어지는) 특수 기능 레지스터에 대한 단일 비트 액세스, 프로그램 RAM, 레지스터 간접 액세스를 사용하여 액세스되는 외부 RAM, 표준 8비트 레지스터 중 하나를 사용하여 레지스터 간접 외부 RAM 액세스를 포함한다.

8051의 명령어 세트는 분리된 메모리(데이터 및 명령어)로 설계된 하버드 아키텍처로, 프로그램 메모리에서 가져온 코드만 실행할 수 있으며 프로그램 메모리에 쓰기 위한 명령어는 없다. 그러나 IC를 떠나는 버스는 단일 주소 및 데이터 경로를 가지고 있으며, 폰 노이만 아키텍처 버스와 매우 유사하다.

대부분의 8051 시스템은 명령어 세트를 준수하며, 플래시 메모리에 새로운 실행 프로그램을 다운로드하기 위한 맞춤형 기능이 필요하다.

내부 RAM
내부 RAM(IRAM)은 주소 0에서 0xFF까지의 8비트 주소 공간을 가지고 있다. 0x00에서 0x7F까지의 IRAM은 128개의 직접 주소 지정 가능한 1바이트 레지스터를 포함하며, 이는 명령어의 일부인 8비트 절대 주소를 사용하여 액세스할 수 있다. 대안으로, IRAM은 간접적으로 액세스할 수 있다: 주소는 R0 또는 R1에 로드되고, 메모리는 @R0 또는 @R1 구문을 사용하여 액세스되거나, 스택 포인터 SP를 통해 스택 메모리로 액세스되며, PUSH 및 POP 연산과 *CALL 및 RET 연산을 통해 액세스된다.

원래 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), I/O 포트 P0(80), P1(90), P2(A0), P3(B0), 직렬 I/O 제어 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바이트 레지스터 윈도우를 위한 공간을 포함하며, 여기에 8개의 레지스터 R0–R7이 매핑된다. 현재 활성 윈도우는 프로그램 상태 워드에 포함된 2비트 주소에 의해 결정된다.

비트 레지스터
0x20–0x2F의 IRAM 위치에 있는 16바이트(128비트)는 128개의 1비트 레지스터를 위한 공간을 포함하며, 이는 별도로 비트 레지스터 00–7F로 주소 지정할 수 있다.

나머지 비트 레지스터는 80–FF로 주소 지정되며, 16개의 특수 기능 레지스터 80, 88, 90, 98, ..., F0 및 F8(주소가 8의 배수인 것)에 매핑되므로, 누산기 A, B 및 프로그램 상태 워드 PSW를 구성하는 비트를 포함한다. 레지스터 윈도우 주소는 PSW의 비트 3 및 4로, 각각 비트 레지스터 D3 및 D4로 주소 지정할 수 있다. 캐리 비트 C(또는 CY)는 PSW의 비트 7에 있으며, 비트 레지스터 D7로 주소 지정할 수 있다.

프로그램 메모리
프로그램 메모리(PMEM, IRAM 및 XRAM보다 덜 일반적으로 사용됨)는 별도의 주소 공간에서 주소 0에서 시작하는 최대 64KB의 읽기 전용 메모리이다. 사용 중인 특정 칩 모델에 따라 온칩 또는 오프칩일 수 있다. 프로그램 메모리는 읽기 전용이지만, 일부 8051 변형은 온칩 플래시 메모리를 사용하며, 시스템 내 또는 애플리케이션 내에서 메모리를 다시 프로그래밍하는 방법을 제공한다.

코드 외에도, 프로그램 메모리에 조회 테이블과 같은 읽기 전용 데이터를 저장할 수 있으며, MOVC A,@A+DPTR 또는 MOVC A,@A+PC 명령어로 검색할 수 있다. 주소는 8비트 누산기와 16비트 레지스터(PC 또는 DPTR)의 합으로 계산된다.

특수 점프 및 호출 명령어(AJMP 및 ACALL)는 동일한 2KB 내의 프로그램 메모리에 액세스하는 코드를 약간 줄인다.

64KB 이상의 코드가 필요한 경우, 일반적인 시스템은 코드 뱅크를 전환하여 상위 주소 비트를 선택하는 범용 I/O를 사용한다. 일부 8051 컴파일러는 페이지 코드에 자동으로 액세스할 수 있는 기능을 제공한다. 이러한 시스템에서는 인터럽트 벡터와 페이징 테이블이 코드의 첫 32K에 배치되며 항상 상주한다.

외부 데이터 메모리
외부 데이터 메모리(XRAM)는 주소 0에서 시작하는 세 번째 주소 공간이며, 16비트 주소 공간을 허용한다. 온칩 또는 오프칩일 수 있으며, "외부"로 간주되는 이유는 MOVX(외부 이동) 명령어를 사용하여 액세스해야 하기 때문이다. 많은 8051 변형은 표준 256바이트의 IRAM과 몇 킬로바이트의 XRAM을 칩에 포함한다.

XRAM의 첫 256바이트는 MOVX A,@R0, MOVX A,@R1, MOVX @R0,A 및 MOVX @R1,A 명령어를 사용하여 액세스할 수 있다. 전체 64KB는 MOVX A,@DPTR 및 MOVX @DPTR,A를 사용하여 액세스할 수 있다. 16비트@DPTR,A를 사용하여 액세스할 수 있다. 16비트 주소는 프로그래머가 16비트 인덱스 레지스터를 로드해야 하므로, 16비트 주소를 사용하는 RAM 액세스는 상당히 느리다.

일부 CPU는 8비트 간접 주소가 모든 8비트 범용 레지스터를 사용할 수 있도록 허용한다.

이 기능을 사용하기 위해, 내부 RAM이 256바이트보다 크거나 외부 RAM에 액세스할 수 없는 일부 8051 호환 마이크로컨트롤러는 내부 RAM을 외부 RAM처럼 액세스하며, 256바이트 페이지의 상위 주소를 설정할 수 있는 특수 기능 레지스터(e.g. PDATA)를 가지고 있다. 이는 일반적인 I/O 핀을 설정하여 RAM 주소의 상위 바이트를 페이지로 설정할 수 있는 MCS8051 모드를 에뮬레이트한다.

64KB 이상의 RAM이 필요한 경우, 일반적인 시스템은 RAM 뱅크를 전환하여 상위 주소 비트를 선택하는 범용 I/O를 사용한다. 일부 8051 컴파일러는 페이지 데이터를 자동으로 액세스할 수 있는 기능을 제공한다.

레지스터
8051에서 메모리 매핑되지 않은 유일한 레지스터는 16비트 프로그램 카운터(PC)이다. 이는 다음에 실행할 명령어의 주소를 지정한다. 상대 분기 명령어는 8비트 부호 오프셋을 제공하며, 이는 PC에 더해진다.

여덟 개의 범용 레지스터 R0–R7은 다른 명령어보다 한 바이트 짧은 명령어로 액세스할 수 있다. 이들은 0x00에서 0x1F 사이의 IRAM에 매핑된다. 현재 사용 중인 범위는 PSW의 두 뱅크 선택 비트에 의해 결정된다.

다음은 특수 기능 레지스터 공간에 메모리 매핑된 8051의 레지스터 목록이다:

- 스택 포인터, SP (0x81): 서브루틴 호출 및 반환 명령어에 사용되는 8비트 레지스터. 스택은 위로 성장하며, 푸시하기 전에 SP가 증가하고 팝한 후 감소한다.
- 데이터 포인터, DP (0x82–83): PMEM 및 XRAM에 액세스하는 데 사용되는 16비트 레지스터.
- 프로그램 상태 워드, PSW (0xD0): 중요한 상태 플래그를 포함하며, 비트 번호별로 다음과 같다:
- 패리티, P: 누산기 A의 패리티(XOR 비트)를 제공한다.
- 사용자 정의, UD: 소프트웨어에 의해 읽고 쓸 수 있으며, 하드웨어에 의해 영향을 받지 않는다.
- 오버플로우 플래그, OV: 덧셈이 부호 오버플로우를 생성할 때 설정된다.
- 레지스터 선택 0, RS0: 레지스터 뱅크의 하위 비트. 0x08 또는 0x18의 뱅크가 사용 중일 때 설정된다.
- 레지스터 선택 1, RS1: 레지스터 뱅크의 상위 비트. 0x10 또는 0x18의 뱅크가 사용 중일 때 설정된다.
- 플래그 0, F0: 소프트웨어에 의해 읽고 쓸 수 있으며, 하드웨어에 의해 영향을 받지 않는다.
- 보조 캐리, AC: 덧셈이 비트 3에서 비트 4로 캐리를 생성할 때 설정된다.
- 캐리 비트, C: 비트 연산 또는 "불리언 누산기"로 자주 사용된다.
- 누산기, A (0xE0): 대부분의 명령어에서 사용되는 레지스터.
- B 레지스터 (0xF0): 곱셈 및 나눗셈 명령어에서 누산기의 확장으로 사용된다.

256개의 단일 비트는 직접 주소 지정 가능하다. 이는 0x20–0x2F의 16 IRAM 위치와 16개의 특수 기능 레지스터 0x80, 0x88, 0x90, ..., 0xF8을 포함한다. 이러한 바이트의 모든 비트는 다양한 논리 연산 및 조건 분기 명령어로 직접 액세스할 수 있다.

PSW에는 일반적인 음수(N) 또는 제로(Z) 플래그가 포함되지 않는다. 전자는 비트 주소 지정 가능한 SFR로서 누산기의 최상위 비트를 직접 주소 지정할 수 있으며, 후자는 누산기가 0인지 여부에 따라 점프하는 명령어가 있다. 또한 두 개의 피연산자를 비교하고 점프하는 명령어도 있다.

패리티(P) 비트는 종종 패리티를 포함하는 직렬 모드를 구현하는 데 사용된다. 이를 지원하기 위해 표준 MCS51 UART는 9비트를 전송할 수 있다.

마이크로아키텍처
인텔 MCS8051의 마이크로아키텍처는 독점적이지만, 공개된 기능은 작동 방식을 시사한다. 이는 다중 사이클 프로세서이다. MCS8051은 대부분의 명령어에 대해 12 클록 사이클을 사용했다. 많은 명령어는 누산기를 사용한다. 대부분의 호환 컴퓨터는 곱셈 및 나눗셈 명령어를 제외하고는 1~3 사이클 내에 명령어를 실행한다. 훨씬 높은 속도는 이러한 컴퓨터가 대부분의 응용 프로그램에서 MCS8051을 대체한 주요 이유이다.

각 인터럽트에는 네 가지 우선 순위가 있다. 각 우선 순위 내에서 장치의 인터럽트는 고정된 우선 순위에 있다.

 

명령어 세트
명령어는 모두 1~3바이트 길이로, 초기 opcode 바이트와 최대 2바이트의 피연산자로 구성된다.

opcode 바이트의 1/4은 불규칙한 opcode에 사용된다.

opcode 바이트의 3/4은 12개의 가능한 피연산자를 가진 16개의 기본 ALU 명령어에 할당된다. opcode의 가장 낮은 니블은 기본 피연산자를 다음과 같이 선택한다:

- x8–xF: 레지스터 직접, R0–R7.
- x6–x7: 레지스터 간접, @R0 또는 @R1.
- x5: 메모리 직접, 다음 바이트가 IRAM 또는 SFR 위치를 지정한다.
- x4: 즉시, 다음 바이트가 8비트 상수를 지정한다. 피연산자가 대상일 때(예: INC 피연산자, DEC 피연산자) 또는 연산이 이미 즉시 소스를 포함할 때(MOV 피연산자,#data, CJNE 피연산자,#data,offset), 이는 대신 누산기가 사용됨을 지정한다.

가장 높은 니블은 연산을 다음과 같이 지정한다. 모든 주소 지정 모드를 지원하지는 않는다. 특히 즉시 모드는 기본 피연산자가 기록될 때 사용할 수 없다. 명령어 니모닉은 대상, 소스 피연산자 순서를 사용한다.

- 0y: INC 피연산자: 지정된 피연산자를 증가시킨다. 즉시 모드(opcode 0x04)는 누산기, INC A를 지정한다.
- 1y: DEC 피연산자: 지정된 피연산자를 감소시킨다. 즉시 모드(opcode 0x14)는 누산기, DEC A를 지정한다.
- 2y: ADD A,피연산자: 피연산자를 누산기 A에 더한다. opcode 0x23(RL A, "왼쪽으로 회전"이지만 실제로는 왼쪽으로 시프트)은 ADD A,A로 생각할 수 있다.
- 3y: ADDC A,피연산자: 피연산자와 C 비트를 누산기에 더한다. opcode 0x33(RLC A, 캐리를 통해 왼쪽으로 회전)은 ADDC A,A로 생각할 수 있다.
- 4y: ORL A,피연산자: 피연산자를 누산기에 논리 OR한다. 이 연산의 두 가지 메모리 대상 형식, ORL 주소```
@DPTR,A를 사용하여 액세스할 수 있다. 16비트 주소는 프로그래머가 16비트 인덱스 레지스터를 로드해야 하므로, 16비트 주소를 사용하는 RAM 액세스는 상당히 느리다.

일부 CPU는 8비트 간접 주소가 모든 8비트 범용 레지스터를 사용할 수 있도록 허용한다.

이 기능을 사용하기 위해, 내부 RAM이 256바이트보다 크거나 외부 RAM에 액세스할 수 없는 일부 8051 호환 마이크로컨트롤러는 내부 RAM을 외부 RAM처럼 액세스하며, 256바이트 페이지의 상위 주소를 설정할 수 있는 특수 기능 레지스터(e.g. PDATA)를 가지고 있다. 이는 일반적인 I/O 핀을 설정하여 RAM 주소의 상위 바이트를 페이지로 설정할 수 있는 MCS8051 모드를 에뮬레이트한다.

64KB 이상의 RAM이 필요한 경우, 일반적인 시스템은 RAM 뱅크를 전환하여 상위 주소 비트를 선택하는 범용 I/O를 사용한다. 일부 8051 컴파일러는 페이지 데이터를 자동으로 액세스할 수 있는 기능을 제공한다.

레지스터
8051에서 메모리 매핑되지 않은 유일한 레지스터는 16비트 프로그램 카운터(PC)이다. 이는 다음에 실행할 명령어의 주소를 지정한다. 상대 분기 명령어는 8비트 부호 오프셋을 제공하며, 이는 PC에 더해진다.

여덟 개의 범용 레지스터 R0–R7은 다른 명령어보다 한 바이트 짧은 명령어로 액세스할 수 있다. 이들은 0x00에서 0x1F 사이의 IRAM에 매핑된다. 현재 사용 중인 범위는 PSW의 두 뱅크 선택 비트에 의해 결정된다.

다음은 특수 기능 레지스터 공간에 메모리 매핑된 8051의 레지스터 목록이다:

- 스택 포인터, SP (0x81): 서브루틴 호출 및 반환 명령어에 사용되는 8비트 레지스터. 스택은 위로 성장하며, 푸시하기 전에 SP가 증가하고 팝한 후 감소한다.
- 데이터 포인터, DP (0x82–83): PMEM 및 XRAM에 액세스하는 데 사용되는 16비트 레지스터.
- 프로그램 상태 워드, PSW (0xD0): 중요한 상태 플래그를 포함하며, 비트 번호별로 다음과 같다:
- 패리티, P: 누산기 A의 패리티(XOR 비트)를 제공한다.
- 사용자 정의, UD: 소프트웨어에 의해 읽고 쓸 수 있으며, 하드웨어에 의해 영향을 받지 않는다.
- 오버플로우 플래그, OV: 덧셈이 부호 오버플로우를 생성할 때 설정된다.
- 레지스터 선택 0, RS0: 레지스터 뱅크의 하위 비트. 0x08 또는 0x18의 뱅크가 사용 중일 때 설정된다.
- 레지스터 선택 1, RS1: 레지스터 뱅크의 상위 비트. 0x10 또는 0x18의 뱅크가 사용 중일 때 설정된다.
- 플래그 0, F0: 소프트웨어에 의해 읽고 쓸 수 있으며, 하드웨어에 의해 영향을 받지 않는다.
- 보조 캐리, AC: 덧셈이 비트 3에서 비트 4로 캐리를 생성할 때 설정된다.
- 캐리 비트, C: 비트 연산 또는 "불리언 누산기"로 자주 사용된다.
- 누산기, A (0xE0): 대부분의 명령어에서 사용되는 레지스터.
- B 레지스터 (0xF0): 곱셈 및 나눗셈 명령어에서 누산기의 확장으로 사용된다.

256개의 단일 비트는 직접 주소 지정 가능하다. 이는 0x20–0x2F의 16 IRAM 위치와 16개의 특수 기능 레지스터 0x80, 0x88, 0x90, ..., 0xF8을 포함한다. 이러한 바이트의 모든 비트는 다양한 논리 연산 및 조건 분기 명령어로 직접 액세스할 수 있다.

PSW에는 일반적인 음수(N) 또는 제로(Z) 플래그가 포함되지 않는다. 전자는 비트 주소 지정 가능한 SFR로서 누산기의 최상위 비트를 직접 주소 지정할 수 있으며, 후자는 누산기가 0인지 여부에 따라 점프하는 명령어가 있다. 또한 두 개의 피연산자를 비교하고 점프하는 명령어도 있다.

패리티(P) 비트는 종종 패리티를 포함하는 직렬 모드를 구현하는 데 사용된다. 이를 지원하기 위해 표준 MCS51 UART는 9비트를 전송할 수 있다.

마이크로아키텍처
인텔 MCS8051의 마이크로아키텍처는 독점적이지만, 공개된 기능은 작동 방식을 시사한다. 이는 다중 사이클 프로세서이다. MCS8051은 대부분의 명령어에 대해 12 클록 사이클을 사용했다. 많은 명령어는 누산기를 사용한다. 대부분의 호환 컴퓨터는 곱셈 및 나눗셈 명령어를 제외하고는 1~3 사이클 내에 명령어를 실행한다. 훨씬 높은 속도는 이러한 컴퓨터가 대부분의 응용 프로그램에서 MCS8051을 대체한 주요 이유이다.

각 인터럽트에는 네 가지 우선 순위가 있다. 각 우선 순위 내에서 장치의 인터럽트는 고정된 우선 순위에 있다.

명령어 세트
명령어는 모두 1~3바이트 길이로, 초기 opcode 바이트와 최대 2바이트의 피연산자로 구성된다.

opcode 바이트의 1/4은 불규칙한 opcode에 사용된다.

opcode 바이트의 3/4은 12개의 가능한 피연산자를 가진 16개의 기본 ALU 명령어에 할당된다. opcode의 가장 낮은 니블은 기본 피연산자를 다음과 같이 선택한다:

- x8–xF: 레지스터 직접, R0–R7.
- x6–x7: 레지스터 간접, @R0 또는 @R1.
- x5: 메모리 직접, 다음 바이트가 IRAM 또는 SFR 위치를 지정한다.
- x4: 즉시, 다음 바이트가 8비트 상수를 지정한다. 피연산자가 대상일 때(예: INC 피연산자, DEC 피연산자) 또는 연산이 이미 즉시 소스를 포함할 때(MOV 피연산자,#data, CJNE 피연산자,#data,offset), 이는 대신 누산기가 사용됨을 지정한다.

가장 높은 니블은 연산을 다음과 같이 지정한다. 모든 주소 지정 모드를 지원하지는 않는다. 특히 즉시 모드는 기본 피연산자가 기록될 때 사용할 수 없다. 명령어 니모닉은 대상, 소스 피연산자 순서를 사용한다.

- 0y: INC 피연산자: 지정된 피연산자를 증가시킨다. 즉시 모드(opcode 0x04)는 누산기, INC A를 지정한다.
- 1y: DEC 피연산자: 지정된 피연산자를 감소시킨다. 즉시 모드(opcode 0x14)는 누산기, DEC A를 지정한다.
- 2y: ADD A,피연산자: 피연산자를 누산기 A에 더한다. opcode 0x23(RL A, "왼쪽으로 회전"이지만 실제로는 왼쪽으로 시프트)은 ADD A,A로 생각할 수 있다.
- 3y: ADDC A,피연산자: 피연산자와 C 비트를 누산기에 더한다. opcode 0x33(RLC A, 캐리를 통해 왼쪽으로 회전)은 ADDC A,A로 생각할 수 있다.
- 4y: ORL A,피연산자: 피연산자를 누산기에 논리 OR한다. 이 연산의 두 가지 메모리 대상 형식, ORL 주소,#data 및 ORL 주소,A는 opcode 0x43 및 0x42로 지정된다.
- 5y: ANL A,피연산자: 피연산자를 누산기에 논리 AND한다. 이 연산의 두 가지 메모리 대상 형식, ANL 주소,#data 및 ANL 주소,A는 opcode 0x53 및 0x52로 지정된다.
- 6y: XRL A,피연산자: 피연산자를 누산기에 논리 XOR한다. 이 연산의 두 가지 메모리 대상 형식, XRL 주소,#data 및 XRL 주소,A는 opcode 0x63 및 0x62로 지정된다.
- 7y: MOV 피연산자,#data: 즉시 피연산자로 이동한다. 즉시 모드(opcode 0x74)는 누산기, MOV A,#data를 지정한다.
- 8y: MOV 주소,피연산자: 값을 IRAM 또는 SFR 레지스터로 이동한다. 즉시 모드(opcode 0x84)는 이 연산에 사용되지 않으며, opcode 0x75를 중복한다.
- 9y: SUBB A,피연산자: 피연산자를 누산기에서 뺀다. 이 연산은 빌림을 사용하며, 빌림 없는 뺄셈은 없다.
- Ay: MOV 피연산자,주소: 값을 IRAM 또는 SFR 레지스터에서 이동한다. 즉시 모드(opcode 0xA4)는 사용되지 않으며, 즉시는 소스로만 사용된다. 메모리 직접 모드(opcode 0xA5)는 사용되지 않으며, 0x85를 중복한다.
- By: CJNE 피연산자,#data,offset: 피연산자를 즉시 #data와 비교하고, 같지 않으면 PC + offset으로 점프한다. 즉시 및 메모리 직접 모드(opcode 0xB4 및 0xB5)는 피연산자를 누산기와 비교하며, CJNE A,피연산자,offset을 지정한다. 동일한 경우 점프하는 명령어, CJE는 없다.
- Cy: XCH A,피연산자: 누산기와 피연산자를 교환한다. 즉시 모드(opcode 0xC4)는 이 연산에 사용되지 않는다.
- Dy: DJNZ 피연산자,offset: 피연산자를 감소시키고, 결과가 0이 아니면 PC + offset으로 점프한다. 즉시 모드(opcode 0xD4) 및 레지스터 간접 모드(0xD6, 0xD7)는 사용되지 않는다.
- Ey: MOV A,피연산자: 피연산자를 누산기로 이동한다. 즉시 모드는 이 연산에 사용되지 않으며(opcode 0xE4), opcode 0x74를 중복한다.
- Fy: MOV 피연산자,A: 누산기를 피연산자로 이동한다. 즉시 모드(opcode 0xF4)는 사용되지 않으며, 효과가 없다.

ADD, ADDC 및 SUBB 명령어만 PSW 플래그를 설정한다. INC, DEC 및 논리 명령어는 설정하지 않는다. CJNE 명령어는 C 비트만 수정하며, 이는 피연산자1 - 피연산자2에서 발생하는 빌림이다.

불규칙한 명령어는 64개의 opcode로 구성되며, 더 제한된 주소 지정 모드를 가지며, 정규 명령어의 비적용 모드에서 몇 가지 opcode를 가져온다.

8051/8052 불규칙한 명령어
| Opcode | x0 | x1 | x2 | x3 | x4 |
|--------|----|----|----|----|----|
| 0y     | NOP | AJMP addr11, ACALL addr11 | LJMP addr16 | RR A (rotate right) | INC A |
| 1y     | JBC bit,offset (jump if bit set with clear) | LCALL addr16 | RRC A (rotate right through carry) | DEC A |
| 2y     | JB bit,offset (jump if bit set) | RET | RL A (rotate left) | ADD A,#data |
| 3y     | JNB bit,offset (jump if bit clear) | RETI | RLC A (rotate left through carry) | ADDC A,#data |
| 4y     | JC offset (jump if carry set) | ORL address,A | ORL address,#data | ORL A,#data |
| 5y     | JNC offset (jump if carry clear) | ANL address,A | ANL address,#data | ANL A,#data |
| 6y     | JZ offset (jump if zero) | XRL address,A | XRL address,#data | XRL A,#data |
| 7y     | JNZ offset (jump if non-zero) | ORL C,bit | JMP @A+DPTR | MOV A,#data |
| 8y     | SJMP offset (short jump) | 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 (decimal adjust) |
| Ey     | MOVX A,@DPTR | MOVX A,@R0 | MOVX A,@R1 | CLR A |
| Fy     | MOVX @DPTR,A | MOVX @R0,A | MOVX @R1,A | CPL A |

- 85: MOV address,address: 두 IRAM 또는 SFR 레지스터 간 직접 이동.
- A5: 사용되지 않음.
- B5: CJNE A,address,offset: 누산기를 IRAM 또는 SFR 레지스터와 비교하고, 같지 않으면 PC + offset으로 점프.
- D6–7: XCHD A,@R0–1: 피연산자의 하위 니블 교환.

SJMP(짧은 점프) opcode는 부호가 있는 상대 오프셋 바이트 피연산자를 사용하며, 다음 명령어의 주소를 기준으로 상대적으로 제어를 전환한다. AJMP/ACALL opcode는 opcode 바이트의 세 개의 최상위 비트와 다음 바이트를 결합하여 11비트 목적지를 지정하며, 이는 PC 레지스터의 하위 11비트를 대체하는 데 사용된다(PC 레지스터의 상위 5비트는 그대로 유지). 더 큰 주소의 경우, LJMP 및 LCALL 명령어는 16비트 목적지를 허용한다.

8051의 인기는 단일 비트에 대한 다양한 연산 때문이기도 하다. 비트는 항상 절대 주소로 지정되며, 레지스터 간접 또는 인덱스 주소 지정은 없다. 단일 비트에 작동하는 명령어는 다음과 같다:

- SETB bit, CLR bit, CPL bit: 지정된 비트를 설정, 지우기 또는 보완.
- JB bit,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 컴파일러는 프로그래머가 각 변수가 저장될 메모리 유형을 지정할 수 있도록 하며, 8051의 특정 하드웨어 기능(예: 여러 레지스터 뱅크 및 비트 조작 명령어)에 액세스할 수 있다. 상용 C 컴파일러가 많이 있다. Small Device C Compiler(SDCC)는 인기 있는 오픈 소스 C 컴파일러이다. C++, Forth, BASIC, Object Pascal, Pascal, PL/M 및 Modula-2와 같은 다른 고급 언어도 8051용으로 제공되지만, C 및 어셈블리어보다 덜 널리 사용된다.

IRAM, XRAM 및 PMEM(읽기 전용)은 모두 주소 0을 가지므로, 8051 아키텍처용 C 컴파일러는 특정 데이터가 저장될 위치를 나타내기 위해 컴파일러별 프라그마 또는 기타 확장을 제공하며, 포인터가 참조하는 메모리를 결정할 수 있는 메커니즘을 제공한다.

관련 프로세서
인텔은 2007년 3월에 MCS-51 제품 라인을 중단했지만, 다른 공급업체에서 정기적으로 향상된 8051 제품 또는 실리콘 지적 재산을 추가하고 있다.

8051의 전신인 8048은 최초의 IBM PC 키보드에서 사용되었으며, 키 입력을 컴퓨터 본체로 전송되는 직렬 데이터였으며, 키 입력을 컴퓨터 본체로 전송되는 직렬 데이터 스트림으로 변환했다. 인텔 8049는 Sinclair QL에서도 유사한 역할을 했다. 8048 및 파생 제품은 오늘날에도 기본 모델 키보드에 사용된다.

8031은 내부 프로그램 메모리(ROM)가 없는 원래 8051의 축소 버전이었다. 이 칩을 사용하려면 8031이 가져와 실행했으며, 키 입력을 컴퓨터 본체로 전송되는 직렬 데이터 스트림으로 변환했다. 인텔 8049는 Sinclair QL에서도 유사한 역할을 했다. 8048 및 파생 제품은 오늘날에도 기본 모델 키보드에 사용된다.

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, 4KB 대신 8KB의 ROM, 세 번째 16비트 타이머를 특징으로 했다. 대부분의 현대 8051 호환 마이크로컨트롤러는 이러한 기능을 포함한다.

8032는 내부 ROM 프로그램 메모리가 없는 것을 제외하고는 8052와 동일한 기능을 가지고 있었다.

8751은 4KB EPROM 대신 4KB ROM을 가진 8051이었다. 이 부품은 EPROM을 지우기 위해 UV 광선을 사용할 수 있도록 다이 상단에 투명한 석영 창이 있는 세라믹 패키지로 제공되었다. 관련 부품으로는 8KB EPROM을 가진 8752, 16KB EPROM을 가진 8754, 32KB EPROM을 가진 8758이 있다.

80C537(ROM 없음) 및 80C517(8KB ROM)는 CMOS 버전으로, 자동차 산업을 위해 설계되었다. 향상된 기능은 주로 새로운 및 향상된 주변 장치를 포함한다. 80C5x7은 고장 안전 메커니즘, 아날로그 신호 처리 기능, 향상된 타이머 기능 및 32비트 산술 주변 장치를 가지고 있다. 

 

 

기타 기능은 다음과 같다:
- 256바이트 온칩 RAM
- 256개의 직접 주소 지정 가능한 비트
- 최대 64KB로 확장 가능한 외부 프로그램 및 데이터 메모리
- 12개의 다중화된 입력을 가진 8비트 A/D 변환기
- 16×16→32비트 곱셈, 32/16→16비트 나눗셈, 32비트 시프트 및 32비트 정규화 연산을 수행할 수 있는 산술 주변 장치
- 프로그램 및 외부 데이터 메모리의 간접 주소 지정용 8개의 데이터 포인터
- 확장된 감시견 기능
- 9개의 I/O 포트
- 개별 보드레이트 생성기가 있는 두 개의 전이중 직렬 인터페이스
- 네 가지 우선 순위 레벨 인터럽트 시스템, 14개의 인터럽트 벡터
- 세 가지 절전 모드

인텔 MCS-51의 두 번째 소스
- AMD D87C51
- Fujitsu MBL8031AH
- MHS S-80C31
- OKI M80C31
- Philips PCB80C31
- Signetics SCN8031
- Temic TS80C32X2

파생 공급업체
20개 이상의 독립 제조업체가 MCS-51 호환 프로세서를 생산한다.

인텔 MCS-51 파생 마이크로컨트롤러
- Atmel AT89C2051
- Infineon SAB-C515
- Philips S87C654
- Siemens SAB-C501
- STC Micro STC89C52

MCS-51과 호환되는 기타 IC 또는 IP는 Analog Devices, Integral Minsk, Kristall Kyiv 및 NIIET Voronezh에서 개발되었다.

지적 재산으로서의 사용

 

오늘날 8051은 개별 부품으로 여전히 사용 가능하지만, 대부분은 실리콘 지적 재산 코어로 사용된다. VHDL 또는 Verilog와 같은 하드웨어 설명 언어 소스 코드 또는 FPGA 넷리스트 형태로 제공되는 이러한 코어는 일반적으로 USB 플래시 드라이브에서 세탁기, 복잡한 무선 통신 시스템 온칩에 이르기까지 다양한 제품의 임베디드 시스템 내에 통합된다. 디자이너는 32비트 프로세서(예: ARM Cortex-M 시리즈, MIPS 및 BA22)보다 크기가 작고 전력 소비가 적기 때문에 8051 실리콘 IP 코어를 사용한다.

현대의 8051 코어는 초기 패키지 버전보다 빠르다. 설계 개선으로 인해 원래 MCS 51 명령어 세트와의 호환성을 유지하면서 8051 성능이 향상되었다. 원래 인텔 8051은 기계 주기당 12 클록 사이클에서 실행되었으며, 대부분의 명령어는 하나 또는 두 개의 기계 주기에서 실행되었다. 일반적인 최대 클록 주파수가 12MHz인 경우, 이러한 오래된 8051은 초당 100만 개의 단일 사이클 명령어 또는 초당 500,000개의 두 사이클 명령어를 실행할 수 있었다. 대조적으로, 향상된 8051 실리콘 IP 코어는 이제 기계 주기당 한 클록 사이클에서 실행되며, 클록 주파수는 최대 450MHz에 이른다. 이는 8051 호환 프로세서가 이제 초당 4억 5천만 개의 명령어를 실행할 수 있음을 의미한다.


 

インテルMCS-51(一般的に8051と呼ばれる)は、1980年にインテルが組み込みシステム用に開発したシングルチップマイクロコントローラ(MCU)シリーズです。インテルMCS-51命令セットの設計者はジョン・H・ウォートンです。インテルの初期バージョンは1980年代から1990年代初頭にかけて人気があり、改良されたバイナリ互換の派生製品は今日でも人気があります。このマイクロコントローラは複雑な命令セットコンピュータ(CISC)ですが、大型レジスタセットやレジスタウィンドウなどのRISCアーキテクチャの一部機能も備えており、プログラム命令とデータのための別々のメモリ空間を持っています。

インテルの初期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(アプリケーション固有集積回路)設計に使用できるMCS-51派生製品をIPコアとして提供しています。

 重要な機能および応用

 i8051マイクロアーキテクチャ
8051アーキテクチャは、1つのパッケージに多くの機能(CPU、RAM、ROM、I/Oポート、シリアルポート、割り込み制御、タイマー)を提供します:

- 8ビット算術論理ユニット(ALU)およびアキュムレータ、8ビットレジスタ(特別な移動命令を持つ16ビットレジスタ1つ)、8ビットデータバスおよび2×16ビットアドレスバス、プログラムカウンタ、データポインタおよび関連する8/11/16ビット操作;したがって主に8ビットマイクロコントローラです。
- 17の命令を持つブールプロセッサ、1ビットアキュムレータ、32のレジスタ(4×8ビット、ビットアドレス指定可能)および最大144の特別な1ビットアドレス指定可能RAM変数(18×8ビット)
- 乗算、除算および比較命令
- 8つのレジスタを持つ4つの高速切り替え可能なレジスタバンク(メモリマッピング)
- 選択的レジスタバンク切り替えが可能な高速割り込み
- 選択可能な優先順位を持つ割り込みおよびスレッド
- 128または256バイトのオンチップRAM(IRAM)
- デュアル16ビットアドレスバス;ハーバードアーキテクチャで2つのメモリバスを使用して2×216メモリ位置:それぞれ64KB(65,536位置)のROM(PMEM)および外部RAM(XRAM)にアクセス可能
- オンチップROM(803xバリエーションには含まれません)
- 4つの(3つ全体)8ビット双方向入出力ポート、ビットアドレス指定可能
- UART(シリアルポート)
- 2つの16ビットカウンタ/タイマー
- 省電力モード(一部の派生製品で使用可能)

8051コアの特徴の1つは、ブール処理エンジンが含まれており、選択された内部レジスタ、ポートおよび選択されたRAM位置でビットレベルのブール論理演算を直接効率的に実行できることです。もう1つの特徴は、4つのバンク選択可能な作業レジスタセットが含まれており、割り込みサービスルーチンに入るおよび出る際のコンテキスト切り替えに必要な時間を大幅に短縮することです。8051は1つの命令でレジスタバンクを切り替えることができ、重要なレジスタをRAMに転送する時間のかかる作業を避けることができます。

UARTおよび必要に応じてタイマーが構成されると、プログラマはUARTによって最後のビットが送信シフトレジスタから移動されるたびに送信シフトレジスタを再度充填するか(データを他の場所にコピーする)受信シフトレジスタを空にする簡単な割り込みルーチンを作成するだけで済みます。その後、メインプログラムはスタックに8ビットデータを読み書きする方法でシリアル読み取りおよび書き込みを実行します。

 派生機能
2013年現在、多くの主要チップメーカーが新しい派生製品を継続的に開発しており、IAR Systems、KeilおよびAltium Taskingなどの主要コンパイラサプライヤーは継続的に更新をリリースしています。

MCS-51ベースのマイクロコントローラは通常、1つまたは2つのUART、2つまたは3つのタイマー、128または256バイトの内部データRAM(そのうち16バイトはビットアドレス指定可能)、最大128バイトのI/O、512バイトから64KBの内部プログラムメモリおよび時には外部データ空間に位置する拡張データRAM(ERAM)の量を含みます。外部RAMおよびROMはデータおよびアドレスバスを共有します。元の8051コアは機械サイクルあたり12クロックサイクルで実行され、ほとんどの命令は1または2つの機械サイクルで実行されました。12MHzクロック周波数で8051は毎秒100万個の1サイクル命令または毎秒500,000個の2サイクル命令を実行できました。改良された8051コアは現在、通常6、4、2または1クロックあたりの機械サイクル(1Tと表示)で実行され、クロック周波数は最大100MHzに達し、したがって毎秒より多くの命令を実行できます。Silicon Labsのすべてのデバイス、一部のDallas(現在Maxim Integratedの一部)および一部のAtmel(現在Microchipの一部)デバイスは単一サイクルコアを持っています。

8051の派生には、ブラウンアウト検出機能を持つ内蔵リセットタイマー、オンチップオシレータ、自己プログラム可能なフラッシュROMプログラムメモリ、内蔵外部RAM、追加の内部プログラムストレージ、ROMのブートローダーコード、EEPROM不揮発性データストレージ、I2C、SPIおよびUSBホストインターフェース、CANまたはLINバス、ZigbeeまたはBluetoothラジオモジュール、PWMジェネレータ、アナログコンパレータ、アナログ-デジタルおよびデジタル-アナログ変換器、RTC、追加のカウンタおよびタイマー、回路内デバッグ機能、より多くの割り込みソース、追加の省電力モード、より多くまたは少ない並列ポートなどが含まれることがあります。インテルはROMにBASICインタープリタが含まれるマスクプログラムバージョンである8052AH-BASICを製造しており、RAMにロードされたユーザープログラムを実行できます。

MCS-51ベースのマイクロコントローラは極限環境に適応されました。高温バリエーションの例としては、-40°Cから+250°CのTekmos TK8H51製品群や-55°Cから+225°CのHoneywell HT83C51(最大+300°Cで1年間動作可能)があります。宇宙船で使用するための放射線硬化MCS-51マイクロコントローラも提供されています。例えば、Cobham(以前のAeroflex)のUT69RH051やNIIETの1830VE32(ロシア語:1830ВЕ32)などがあります。

一部の工学学校では、8051マイクロコントローラを紹介するマイクロコントローラコースで使用しています。

 ファミリ命名規則
インテルの最初のMCS-51マイクロコントローラは4KBのROMと128バイトのRAMを持つ8051でした。87で始まるバリエーションはユーザープログラム可能なEPROMを持ち、時にはUVで消去可能です。名前の3番目の文字がCであるバリエーションはCMOSの一種です。8031および8032はROMがないバージョンで、それぞれ128および256バイトのRAMを持っています。最後の数字はメモリサイズを示すことがあります。例えば、8KBのROMを持つ8052、16KBのEPROMを持つ87C54、32KBのEPROMを持つ87C58はすべて256バイトのRAMを持っています。

 メモリアーキテクチャ
MCS-51には内部RAM、特殊機能レジスタ、プログラムメモリおよび外部データメモリの4種類のメモリがあります。これらに効率的にアクセスするために、一部のコンパイラは最大7種類のメモリ定義を使用します:内部RAM、内部RAMへの単一ビットアクセス、特殊機能レジスタ、選択された(8で割り切れる)特殊機能レジスタへの単一ビットアクセス、プログラムRAM、レジスタ間接アクセスを使用してアクセスされる外部RAM、標準8ビットレジスタの1つを使用してレジスタ間接外部RAMアクセスを含みます。

8051の命令セットは分離されたメモリ(データおよび命令)で設計されたハーバードアーキテクチャで、プログラムメモリから取得されたコードのみを実行でき、プログラムメモリに書き込むための命令はありません。しかし、ICを離れるバスは単一のアドレスおよびデータパスを持ち、フォン・ノイマンアーキテクチャバスと非常に似ています。

ほとんどの8051システムは命令セットに準拠しており、フラッシュメモリに新しい実行プログラムをダウンロードするためのカスタム機能が必要です。

 内部RAM
内部RAM(IRAM)はアドレス0から0xFFまでの8ビットアドレス空間を持っています。0x00から0x7FまでのIRAMは128の直接アドレス指定可能な1バイトレジスタを含み、これは命令の一部である8ビット絶対アドレスを使用してアクセスできます。代わりに、IRAMは間接的にアクセスできます:アドレスはR0またはR1にロードされ、メモリは@R0または@R1構文を使用してアクセスされるか、スタックポインタSPを介してスタックメモリとしてアクセスされ、PUSHおよびPOP操作と*CALLおよびRET操作を介してアクセスされます。

元の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)、I/OポートP0(80)、P1(90)、P2(A0)、P3(B0)、シリアルI/O制御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バイトは4つの8バイトレジスタウィンドウのためのスペースを含み、ここに8つのレジスタR0–R7がマッピングされます。現在アクティブなウィンドウはプログラム状態ワードに含まれる2ビットアドレスによって決定されます。

 ビットレジスタ
0x20–0x2FのIRAM位置にある16バイト(128ビット)は128の1ビットレジスタのためのスペースを含み、これは別々にビットレジスタ00–7Fとしてアドレス指定できます。

残りのビットレジスタは80–FFとしてアドレス指定され、16の特殊機能レジスタ80、88、90、98、...、F0およびF8(アドレスが8の倍数のもの)にマッピングされるため、アキュムレータA、Bおよびプログラム状態ワードPSWを構成するビットを含みます。レジスタウィンドウアドレスはPSWのビット3および4で、それぞれビットレジスタD3およびD4としてアドレス指定できます。キャリービットC(またはCY)はPSWのビット7にあり、ビットレジスタD7としてアドレス指定できます。

 プログラムメモリ
プログラムメモリ(PMEM、IRAMおよびXRAMよりも一般的に使用されません)は別々のアドレス空間でアドレス0から始まる最大64KBの読み取り専用メモリです。使用中の特定のチップモデルに応じてオンチップまたはオフチップである可能性があります。プログラムメモリは読み取り専用ですが、一部の8051バ```markdown
ます。プログラムメモリは読み取り専用ですが、一部の8051バリエーションはオンチップフラッシュメモリを使用しており、システム内またはアプリケーション内でメモリを再プログラムする方法を提供します。

コードに加えて、プログラムメモリにはルックアップテーブルなどの読み取り専用データを保存でき、MOVC A,@A+DPTRまたはMOVC A,@A+PC命令で取得できます。アドレスは8ビットアキュムレータと16ビットレジスタ(PCまたはDPTR)の合計で計算されます。

特別なジャンプおよびコール命令(AJMPおよびACALL)は、同じ2KB内のプログラムメモリにアクセスするコードをわずかに削減します。

64KB以上のコードが必要な場合、一般的なシステムはコードバンクを切り替えて上位アドレスビットを選択するために汎用I/Oを使用します。一部の8051コンパイラはページコードに自動的にアクセスする機能を提供します。このようなシステムでは、割り込みベクタとページングテーブルがコードの最初の32Kに配置され、常に常駐します。

 外部データメモリ
外部データメモリ(XRAM)はアドレス0から始まる3番目のアドレス空間で、16ビットアドレス空間を許可します。オンチップまたはオフチップである可能性があり、「外部」と見なされる理由はMOVX(外部移動)命令を使用してアクセスする必要があるためです。多くの8051バリエーションは標準の256バイトのIRAMと数キロバイトのXRAMをチップに含んでいます。

XRAMの最初の256バイトはMOVX A,@R0、MOVX A,@R1、MOVX @R0,AおよびMOVX @R1,A命令を使用してアクセスできます。全64KBはMOVX A,@DPTRおよびMOVX @DPTR,Aを使用してアクセスできます。16ビットアドレスはプログラマが16ビットインデックスレジスタをロードする必要があるため、16ビットアドレスを使用するRAMアクセスはかなり遅いです。

一部のCPUは、8ビット間接アドレスがすべての8ビット汎用レジスタを使用できるように許可します。

この機能を使用するために、内部RAMが256バイトより大きいか、外部RAMにアクセスできない一部の8051互換マイクロコントローラは、内部RAMを外部RAMのようにアクセスし、256バイトページの上位アドレスを設定できる特殊機能レジスタ(例:PDATA)を持っています。これは一般的なI/Oピンを設定してRAMアドレスの上位バイトをページとして設定できるMCS8051モードをエミュレートします。

64KB以上のRAMが必要な場合、一般的なシステムはRAMバンクを切り替えて上位アドレスビットを選択するために汎用I/Oを使用します。一部の8051コンパイラはページデータに自動的にアクセスする機能を提供します。

 レジスタ
8051でメモリマッピングされていない唯一のレジスタは16ビットプログラムカウンタ(PC)です。これは次に実行する命令のアドレスを指定します。相対分岐命令は8ビット符号オフセットを提供し、これはPCに加算されます。

8つの汎用レジスタR0–R7は他の命令よりも1バイト短い命令でアクセスできます。これらは0x00から0x1FのIRAMにマッピングされます。現在使用中の範囲はPSWの2つのバンク選択ビットによって決定されます。

次に、特殊機能レジスタ空間にメモリマッピングされた8051のレジスタの一覧を示します:

- スタックポインタ、SP(0x81):サブルーチン呼び出しおよび戻り命令に使用される8ビットレジスタ。スタックは上に成長し、プッシュする前にSPが増加し、ポップした後に減少します。
- データポインタ、DP(0x82–83):PMEMおよびXRAMにアクセスするために使用される16ビットレジスタ。
- プログラム状態ワード、PSW(0xD0):重要な状態フラグを含み、ビット番号ごとに次のように構成されます:
  - パリティ、P:アキュムレータAのパリティ(XORビット)を提供します。
  - ユーザー定義、UD:ソフトウェアによって読み書き可能で、ハードウェアによって影響を受けません。
  - オーバーフローフラグ、OV:加算が符号オーバーフローを生成したときに設定されます。
  - レジスタ選択0、RS0:レジスタバンクの下位ビット。0x08または0x18のバンクが使用中のときに設定されます。
  - レジスタ選択1、RS1:レジスタバンクの上位ビット。0x10または0x18のバンクが使用中のときに設定されます。
  - フラグ0、F0:ソフトウェアによって読み書き可能で、ハードウェアによって影響を受けません。
  - 補助キャリ、AC:加算がビット3からビット4にキャリを生成したときに設定されます。
  - キャリビット、C:ビット演算または「ブールアキュムレータ」として頻繁に使用されます。
- アキュムレータ、A(0xE0):ほとんどの命令で使用されるレジスタ。
- Bレジスタ(0xF0):乗算および除算命令でアキュムレータの拡張として使用されます。

256の単一ビットは直接アドレス指定可能です。これは0x20–0x2Fの16IRAM位置と16の特殊機能レジスタ0x80、0x88、0x90、...、0xF8を含みます。これらのバイトのすべてのビットはさまざまな論理演算および条件分岐命令で直接アクセスできます。

PSWには一般的な負(N)またはゼロ(Z)フラグが含まれていません。前者はビットアドレス指定可能なSFRとしてアキュムレータの最上位ビットを直接アドレス指定でき、後者はアキュムレータが0かどうかに基づいてジャンプする命令があります。また、2つのオペランドを比較してジャンプする命令もあります。

パリティ(P)ビットは、しばしばパリティを含むシリアルモードを実装するために使用されます。これをサポートするために、標準のMCS51 UARTは9ビットを送信できます。

 マイクロアーキテクチャ
インテルMCS8051のマイクロアーキテクチャは独自のものですが、公開された機能は動作方法を示唆しています。これはマルチサイクルプロセッサです。MCS8051はほとんどの命令に対して12クロックサイクルを使用しました。多くの命令はアキュムレータを使用します。ほとんどの互換コンピュータは乗算および除算命令を除いて1〜3サイクル内に命令を実行します。はるかに高い速度は、これらのコンピュータがほとんどのアプリケーションでMCS8051を置き換えた主な理由です。

各割り込みには4つの優先順位があります。各優先順位内でデバイスの割り込みは固定された優先順位にあります。

 命令セット
命令はすべて1〜3バイトの長さで、最初のオペコードバイトと最大2バイトのオペランドで構成されます。

オペコードバイトの1/4は不規則なオペコードに使用されます。

オペコードバイトの3/4は12の可能なオペランドを持つ16の基本ALU命令に割り当てられます。オペコードの最下位ニブルは基本オペランドを次のように選択します:

- x8–xF:レジスタ直接、R0–R7。
- x6–x7:レジスタ間接、@R0または@R1。
- x5:メモリ直接、次のバイトがIRAMまたはSFR位置を指定します。
- x4:即時、次のバイトが8ビット定数を指定します。オペランドがターゲットの場合(例:INCオペランド、DECオペランド)または操作がすでに即時ソースを含む場合(MOVオペランド、data、CJNEオペランド、data、offset)、これは代わりにアキュムレータが使用されることを指定します。

最上位ニブルは操作を次のように指定します。すべてのアドレス指定モードをサポートしているわけではありません。特に即時モードは基本オペランドが書き込まれるときに使用できません。命令ニーモニックはターゲット、ソースオペランドの順序を使用します。

- 0y:INCオペランド:指定されたオペランドを増加させます。即時モード(オペコード0x04)はアキュムレータ、INC Aを指定します。
- 1y:DECオペランド:指定されたオペランドを減少させます。即時モード(オペコード0x14)はアキュムレータ、DEC Aを指定します。
- 2y:ADD A、オペランド:オペランドをアキュムレータAに加算します。オペコード0x23(RL A、「左回転」ですが実際には左シフト)はADD A、Aと考えることができます。
- 3y:ADDC A、オペランド:オペランドとCビットをアキュムレータに加算します。オペコード0x33(RLC A、キャリを通して左回転)はADDC A、Aと考えることができます。
- 4y:ORL A、オペランド:オペランドをアキュムレータに論理ORします。この操作の2つのメモリターゲット形式、ORLアドレス、dataおよびORLアドレス、Aはオペコード0x43および0x42で指定されます。
- 5y:ANL A、オペランド:オペランドをアキュムレータに論理ANDします。この操作の2つのメモリターゲット形式、ANLアドレス、dataおよびANLアドレス、Aはオペコード0x53および0x52で指定されます。
- 6y:XRL A、オペランド:オペランドをアキュムレータに論理XORします。この操作の2つのメモリターゲット形式、XRLアドレス、dataおよびXRLアドレス、Aはオペコード0x63および0x62で指定されます。
- 7y:MOVオペランド、data:即時オペランドに移動します。即時モード(オペコード0x74)はアキュムレータ、MOV A、dataを指定します。
- 8y:MOVアドレス、オペランド:値をIRAMまたはSFRレジスタに移動します。即時モード(オペコード0x84)はこの操作に使用されず、オペコード0x75を重複します。
- 9y:SUBB A、オペランド:オペランドをアキュムレータから引きます。この操作は借用を使用し、借用なしの減算はありません。
- Ay:MOVオペランド、アドレス:値をIRAMまたはSFRレジスタから移動します。即時モード(オペコード0xA4)は使用されず、即時はソースとしてのみ使用されます。メモリ直接モード(オペコード0xA5)は使用されず、0x85を重複します。
- By:CJNEオペランド、data、offset:オペランドを即時dataと比較し、等しくない場合はPC + offsetにジャンプします。即時およびメモリ直接モード(オペコード0xB4および0xB5)はオペランドをアキュムレータと比較し、CJNE A、オペランド、offsetを指定します。同じ場合にジャンプする命令、CJEはありません。
- Cy:XCH A、オペランド:アキュムレータとオペランドを交換します。即時モード(オペコード0xC4)はこの操作に使用されません。
- Dy:DJNZオペランド、offset:オペランドを減少させ、結果が0でない場合はPC + offsetにジャンプします。即時モード(オペコード0xD4)およびレジスタ間接モード(0xD6、0xD7)は使用されません。
- Ey:MOV A、オペランド:オペランドをアキュムレータに移動します。即時モードはこの操作に使用されず(オペコード0xE4)、オペコード0x74を重複します。
- Fy:MOVオペランド、A:アキュムレータをオペランドに移動します。即時モード(オペコード0xF4)は使用されず、効果がありません。

ADD、ADDCおよびSUBB命令のみがPSWフラグを設定します。INC、DECおよび論理命令は設定しません。CJNE命令はCビットのみを修正し、これはオペランド1 - オペランド2で発生する借用です。

不規則な命令は64のオペコードで構成され、より制限されたアドレス指定モードを持ち、正規命令の非適用モードからいくつかのオペコードを取得します。

8051/8052不規則な命令
| オペコード | x0 | x1 | x2 | x3 | x4 |
|--------|----|----|----|----|----|
| 0y     | NOP | AJMP addr11, ACALL addr11 | 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 (ゼロの場合ジャンプ) | XRL address,A | XRL address,data | XRL A,data |
| 7y     | JNZ offset (ゼロでない場合ジャンプ) | 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 |

- 85:MOV address,address:2つのIRAMまたはSFRレジスタ間の直接移動。
- A5:使用されていません。
-```markdown
Rレジスタ間の直接移動。
- A5:使用されていません。
- B5:CJNE A,address,offset:アキュムレータをIRAMまたはSFRレジスタと比較し、等しくない場合はPC + offsetにジャンプ。
- D6–7:XCHD A,@R0–1:オペランドの下位ニブルを交換。

SJMP(短いジャンプ)オペコードは符号付き相対オフセットバイトオペランドを使用し、次の命令のアドレスを基準に相対的に制御を転送します。AJMP/ACALLオペコードはオペコードバイトの上位3ビットと次のバイトを組み合わせて11ビットの目的地を指定し、これはPCレジスタの下位11ビットを置き換えるために使用されます(PCレジスタの上位5ビットはそのまま保持されます)。より大きなアドレスの場合、LJMPおよびLCALL命令は16ビットの目的地を許可します。

8051の人気は単一ビットに対するさまざまな操作によるものでもあります。ビットは常に絶対アドレスで指定され、レジスタ間接またはインデックスアドレス指定はありません。単一ビットに対して動作する命令は次のとおりです:

- SETB bit、CLR bit、CPL bit:指定されたビットを設定、クリアまたは補完。
- JB bit,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コンパイラはプログラマが各変数が保存されるメモリタイプを指定できるようにし、8051の特定のハードウェア機能(例:複数のレジスタバンクおよびビット操作命令)にアクセスできます。商用Cコンパイラが多く存在します。Small Device C Compiler(SDCC)は人気のあるオープンソースCコンパイラです。C++、Forth、BASIC、Object Pascal、Pascal、PL/MおよびModula-2などの他の高級言語も8051用に提供されていますが、Cおよびアセンブリ言語ほど広く使用されていません。

IRAM、XRAMおよびPMEM(読み取り専用)はすべてアドレス0を持つため、8051アーキテクチャ用Cコンパイラは特定のデータが保存される場所を示すためにコンパイラ固有のプラグマまたはその他の拡張を提供し、ポインタが参照するメモリを決定するメカニズムを提供します。

 関連プロセッサ
インテルは2007年3月にMCS-51製品ラインを中止しましたが、他のサプライヤーは定期的に改良された8051製品またはシリコン知的財産を追加しています。

8051の前身である8048は最初のIBM PCキーボードで使用され、キー入力をコンピュータ本体に送信されるシリアルデータストリームに変換しました。インテル8049はSinclair QLでも同様の役割を果たしました。8048および派生製品は今日でも基本モデルのキーボードに使用されています。

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、4KBの代わりに8KBのROM、3番目の16ビットタイマーを特徴としていました。ほとんどの現代の8051互換マイクロコントローラはこれらの機能を含んでいます。

8032は内部ROMプログラムメモリがないことを除いて8052と同じ機能を持っていました。

8751は4KBのEPROMの代わりに4KBのROMを持つ8051でした。この部品はEPROMを消去するためにUV光を使用できるようにダイの上部に透明な石英窓があるセラミックパッケージで提供されました。関連部品には8KBのEPROMを持つ8752、16KBのEPROMを持つ87C54、32KBのEPROMを持つ87C58が含まれます。

80C537(ROMなし)および80C517(8KBのROM)はCMOSバージョンで、自動車産業向けに設計されました。改良された機能は主に新しいおよび改良された周辺機器を含みます。80C5x7は故障安全メカニズム、アナログ信号処理機能、改良されたタイマー機能および32ビット算術周辺機器を持っています。その他の機能は次のとおりです:

- 256バイトのオンチップRAM
- 256の直接アドレス指定可能なビット
- 最大64KBに拡張可能な外部プログラムおよびデータメモリ
- 12の多重化された入力を持つ8ビットA/D変換器
- 16×16→32ビット乗算、32/16→16ビット除算、32ビットシフトおよび32ビット正規化操作を実行できる算術周辺機器
- プログラムおよび外部データメモリの間接アドレス指定用の8つのデータポインタ
- 拡張されたウォッチドッグ機能
- 9つのI/Oポート
...(about 5 lines omitted)...
- MHS S-80C31
- OKI M80C31
- Philips PCB80C31
- Signetics SCN8031
- Temic TS80C32X2

 派生サプライヤー
20以上の独立した製造業者がMCS-51互換プロセッサを生産しています。

 インテルMCS-51派生マイクロコントローラ
- Atmel AT89C2051
- Infineon SAB-C515
- Philips S87C654
- Siemens SAB-C501
- STC Micro STC89C52

MCS-51と互換性のあるその他のICまたはIPはAnalog Devices、Integral Minsk、Kristall KyivおよびNIIET Voronezhによって開発されました。

 知的財産としての使用
今日、8051は個別の部品として依然として利用可能ですが、ほとんどはシリコン知的財産コアとして使用されています。VHDLまたはVerilogなどのハードウェア記述言語ソースコードまたはFPGAネットリストの形で提供されるこれらのコアは、一般的にUSBフラッシュドライブから洗濯機、複雑な無線通信システムオンチップに至るまでさまざまな製品の組み込みシステム内に統合されます。設計者は32ビットプロセッサ(例:ARM Cortex-Mシリーズ、MIPSおよびBA22)よりもサイズが小さく、電力消費が少ないため、8051シリコンIPコアを使用します。

現代の8051コアは初期のパッケージバージョンよりも高速です。設計の改善により、元のMCS 51命令セットとの互換性を維持しながら8051の性能が向上しました。元のインテル8051は機械サイクルあたり12クロックサイクルで実行され、ほとんどの命令は1または2の機械サイクルで実行されました。一般的な最大クロック周波数が12MHzの場合、これらの古い8051は毎秒100万の単一サイクル命令または毎秒500,000の2サイクル命令を実行できました。対照的に、改良された8051シリコンIPコアは現在、機械サイクルあたり1クロックサイクルで実行され、クロック周波数は最大450MHzに達します。これは8051互換プロセッサが現在毎秒4億5千万の命令を実行できることを意味します。

반응형

'Computer > CPU' 카테고리의 다른 글

Intel 8086 [Intel / 1978]  (0) 2024.09.25
Intel MCS-96 [Intel / 1982]  (0) 2024.09.24
Intel MCS-48 [Intel / 1976]  (0) 2024.09.22
Intel 8085 [Intel / March 1976]  (0) 2024.09.21
INTEL 8080 [INTEL / 1974]  (0) 2024.09.20