PIC 마이크로컨트롤러

[섬네일|[이중 직렬 패키지|DIP 및 QFN 패키지의 PIC 마이크로컨트롤러]]
섬네일|측정용 자 옆에 있는 16비트 28핀 PDIP PIC24 마이크로컨트롤러
[섬네일|[마이크로칩 테크놀로지에서 1200 나노미터 공정을 사용하여 제조한 PIC12C508 8비트 완전 정적 EEPROM/EPROM/ROM 기반 CMOS 마이크로컨트롤러의 다이]]
[섬네일|[마이크로칩 테크놀로지에서 1200 나노미터 공정을 사용하여 제조한 PIC16C505 CMOS ROM 기반 8비트 마이크로컨트롤러의 다이]]

**PIC**는 마이크로칩 테크놀로지에서 제조하는 마이크로컨트롤러 제품군으로, 원래 제너럴 인스트루먼트의 마이크로일렉트로닉스 부서에서 개발한 PIC1640에서 파생되었다. PIC라는 이름은 처음에는 Peripheral Interface Controller(주변 장치 인터페이스 컨트롤러)를 의미했지만, 이후 짧은 기간 동안 Programmable Intelligent Computer(프로그래밍 가능 지능형 컴퓨터)를 포함하도록 확장되었다. 그러나 현재는 PIC라는 이름이 어떤 용어의 두문자어로도 사용되지 않는다.

이 제품군의 첫 번째 부품은 1976년에 출시되었다. 2013년까지 회사는 120억 개 이상의 개별 부품을 출하했으며, 이는 다양한 임베디드 시스템에 사용되었다.

PIC는 원래 최초의 상용 단일 칩 16비트 마이크로프로세서인 제너럴 인스트루먼트 CP1600의 주변 장치로 설계되었다. 필요한 핀 수를 제한하기 위해 CP1600은 인터페이스하기 어려운 복잡하고 고도로 다중화된 버스를 가지고 있었다. 따라서 다양한 특수 목적 주변 장치 외에도 제너럴 인스트루먼트는 범용 주변 장치로 프로그래밍 가능한 PIC1640을 만들었다. 자체 소형 RAM, ROM 및 전송을 제어하기 위한 간단한 CPU를 갖춘 이 장치는 CP1600 버스를 거의 모든 기존 8비트 주변 장치에 연결할 수 있었다. 이것이 상당한 성능을 제공했지만, GI의 마케팅은 제한적이었고 CP1600은 성공하지 못했다. 그러나 GI는 CP1600 인터페이스 대신 추가 범용 I/O를 갖춘 독립형 PIC1640인 PIC1650도 만들었다. 1985년 GI가 칩 부서를 분사하여 마이크로칩을 설립했을 때, CP1600의 판매는 거의 전무했지만, PIC1650과 그 후속 제품들은 자체적으로 주요 시장을 형성했으며, 이는 새로운 회사의 주요 제품 중 하나가 되었다.

초기 모델은 코드 저장을 위해 마스크 롬만 사용했지만, 분사 이후 곧 EPROM으로, 그리고 EEPROM으로 업그레이드되어 최종 사용자가 자체 시설에서 장치를 프로그래밍할 수 있게 되었다. 현재 모든 모델은 프로그램 저장을 위해 플래시 메모리를 사용하며, 최신 모델은 PIC가 자체적으로 재프로그래밍할 수 있도록 허용한다. 이후 라인업은 상당한 변화를 겪었다. 메모리는 이제 8비트, 16비트, 최신 모델에서는 32비트 너비로 제공된다. 프로그램 명령어는 PIC 제품군에 따라 비트 수가 다르며, 12, 14, 16 또는 24비트 길이를 가질 수 있다. 명령어 집합도 모델에 따라 다르며, 더 강력한 칩은 디지털 신호 처리 기능을 위한 명령어를 추가한다. PIC 장치의 하드웨어 구현은 6핀 SMD, 8핀 DIP 칩부터 144핀 SMD 칩에 이르기까지 다양하며, 개별 I/O 핀, ADC 및 DAC 모듈, UART, I²C, CAN, 심지어 USB와 같은 통신 포트도 포함된다. 많은 유형에 대해 저전력 및 고속 변형이 존재한다.

제조사는 개발을 위한 컴퓨터 소프트웨어인 MPLAB X, 어셈블러 및 C/C++ 컴파일러, 그리고 MPLAB 및 PICKit 시리즈 하드웨어 프로그래머/디버거를 제공한다. 타사 및 일부 오픈 소스 도구도 사용할 수 있다. 일부 부품은 인-서킷 프로그래밍 기능을 가지고 있다. 저가 개발 프로그래머뿐만 아니라 대량 생산 프로그래머도 사용할 수 있다.

PIC 장치는 저렴한 비용, 광범위한 가용성, 큰 사용자 기반, 광범위한 애플리케이션 노트 모음, 저렴하거나 무료 개발 도구의 가용성, 직렬 프로그래밍, 재프로그래밍 가능한 플래시 메모리 기능으로 인해 산업 개발자와 아마추어 모두에게 인기가 많다.

## 역사
### 원래 개념
섬네일|다양한 구형 (EPROM) PIC 마이크로컨트롤러
원래 PIC는 제너럴 인스트루먼트의 새로운 CP1600 16비트 중앙 처리 장치(CPU)와 함께 사용하기 위한 것이었다. 당시 표준 40핀 이중 직렬 패키지(DIP) 칩에 16비트 데이터 및 주소 버스를 모두 넣기 위해 두 버스가 동일한 16개의 연결 핀을 공유했다. CPU와 통신하기 위해 장치는 버스에 있는 정보가 주소인지 데이터인지를 결정하기 위해 CPU의 다른 핀을 주시해야 했다. 한 번에 하나만 제시되었기 때문에 장치는 주소 모드로 전환되기를 기다렸다가 해당 주소가 메모리 맵 입출력 범위의 일부인지 확인하고 해당 주소를 "래치"한 다음 데이터 모드가 켜지기를 기다렸다가 값을 읽어야 했다. 또한 CP1600은 여러 외부 핀을 사용하여 통신하려는 장치를 선택하여 인터페이스를 더욱 복잡하게 만들었다.

CP1600에 장치를 인터페이스하는 것이 복잡할 수 있었기 때문에 GI는 필요한 모든 회로가 내장된 164x 시리즈 지원 칩도 출시했다. 여기에는 키보드 드라이버, 저장 장치용 카세트 데크 인터페이스, 그리고 유사한 시스템이 포함되었다. 더 복잡한 시스템을 위해 GI는 1975년에 1640 "프로그래밍 가능 인터페이스 컨트롤러"를 도입했다. 아이디어는 장치가 PIC를 사용하여 호스트 컴퓨터의 CP1600과의 모든 인터페이스를 처리하지만, 자체 내부 프로세서를 사용하여 연결된 실제 장치를 처리하는 것이었다. 예를 들어, 플로피 디스크 드라이브는 한쪽에서는 CPU와 통신하고 다른 한쪽에서는 플로피 디스크 컨트롤러와 통신하는 PIC로 구현될 수 있었다. 오늘날의 마이크로컨트롤러와 같은 이 아이디어에 따라 PIC는 사용자 장치 컨트롤러 코드를 작성하는 데 사용되는 소량의 고정 기억 장치(ROM)와 데이터 버퍼링 및 작업을 위한 별도의 랜덤 액세스 메모리(RAM)를 포함했다. 이들은 별도로 연결되어 PIC를 하버드 아키텍처 시스템으로 만들었고, 코드와 데이터가 별도의 내부 경로에 저장되고 관리되도록 했다.

이론적으로, CP1600 CPU와 PIC1640 장치 컨트롤러의 조합은 메인프레임 컴퓨터에서 볼 수 있는 채널 I/O 컨트롤러와 성능과 기능이 유사한 고성능 장치 제어 시스템을 제공했다. 예를 들어, 플로피 컨트롤러 예시에서 단일 PIC는 드라이브를 제어하고, 성능 향상을 위해 적절한 양의 버퍼링을 제공하며, 직접 메모리 접근(DMA) 또는 CPU의 비교적 간단한 코드를 통해 호스트 컴퓨터와 데이터를 주고받을 수 있었다. 이 접근 방식의 단점은 비용이었다. PIC는 키보드와 같은 저속 장치에는 필요하지 않았지만, 많은 작업에서 완전한 시스템을 구축하기 위해 하나 이상의 PIC가 필요할 수 있었다.

이 설계 개념은 여러 가지 매력적인 기능을 가지고 있었지만, 제너럴 인스트루먼트는 CP1600을 강력하게 마케팅하지 않고 대규모 고객과의 거래만 선호하며 저가 시장을 무시했다. 이로 인해 시스템 채택이 매우 적었으며, 인텔리비전이 약 3백만 대 가량으로 유일하게 광범위하게 사용되었다. 그러나 GI는 1976년에 CP1600 없이 사용하도록 설계된 독립형 모델 PIC1650을 도입했다. 같은 해에 도입된 인텔 MCS-48만큼 강력하지는 않았지만, 더 저렴했고 시장을 찾았다. 후속 제품으로는 12비트에서 13비트로 확장된 명령어와 두 배의 주소 공간(64바이트 RAM 및 1024워드 ROM)을 제공하는 PIC1670이 포함되었다. GI가 1985년에 칩 부서를 분사하여 마이크로칩 테크놀로지를 설립했을 때 CP1600의 생산은 중단되었다. 그러나 이때까지 PIC1650은 다양한 역할에 사용하는 고객층을 넓게 확보했으며, PIC는 새로운 회사의 주요 제품 중 하나가 되었다.

### CP1600 이후
섬네일|제너럴 인스트루먼트의 PIC1655
1985년, 제너럴 인스트루먼트는 마이크로일렉트로닉스 부서를 매각했고, 새로운 소유주들은 당시 대부분 구식이었던 거의 모든 것을 취소했다. 그러나 PIC는 내부 EPROM으로 업그레이드되어 프로그래밍 가능한 채널 I/O 컨트롤러를 생산했다. 동시에 영국의 플레시는 GI 설계를 기반으로 PIC1650 및 PIC1655라는 NMOS 프로세서를 출시했으며, 동일한 명령어 집합을 사용하고 사용자 마스크 프로그래밍 가능하거나 자동 다이얼러 및 키보드 인터페이스용으로 미리 프로그래밍된 버전을 사용했다.

1998년 마이크로칩은 성공적인 직렬 프로그래밍 가능 PIC16C84의 플래시 프로그래밍 및 지울 수 있는 버전인 PIC16F84를 출시했다. 2001년, 마이크로칩은 더 많은 플래시 프로그래밍 가능 장치를 도입했으며, 2002년에는 본격적인 생산을 시작했다.

오늘날, 다양한 온보드 주변 장치( 직렬 통신 모듈, UART, 모터 제어 커널 등)와 256워드에서 64K 워드 이상의 프로그램 메모리를 갖춘 PIC가 엄청나게 다양하게 제공된다. "워드"는 하나의 어셈블리어 명령어로, 특정 PIC 마이크로컨트롤러 시리즈에 따라 길이가 8비트에서 16비트까지 다양하다.

PIC와 PICmicro는 이제 마이크로칩 테크놀로지의 등록 상표이지만, 접두사 "PIC"는 더 이상 어떤 용어의 두문자어로 사용되지 않는다. 일반적으로 PIC는 "Programmable Intelligent Computer"(프로그래밍 가능한 지능형 컴퓨터)의 약자로 알려져 있는데, 이는 CP1600 마이크로컴퓨터와 함께 작동하도록 특별히 설계된 PIC1640의 1976년 원래 의미인 "Programmable Interface Controller"(프로그래밍 가능한 인터페이스 컨트롤러)를 대체하여 1977년 제너럴 인스트루먼트의 PIC1640 및 PIC1650 마이크로컴퓨터 제품군에 대한 접두사였다. 제너럴 인스트루먼트의 "PIC 시리즈 마이크로컴퓨터"는 ROM, RAM, CPU 및 인터페이스를 위한 8비트 입출력(I/O) 레지스터를 포함하는 금속 산화물 반도체 대규모 집적 회로(MOS/LSI) 8비트 마이크로컴퓨터 시리즈였다. 당시 이 기술은 MOS 회로의 장점과 대규모 집적 회로의 장점을 결합하여 높은 트랜지스터 밀도를 가진 복잡한 집적 회로를 만들 수 있게 했다.

1993년에 출시된 마이크로칩 16C84 (PIC16x84)는 온칩 EEPROM 메모리를 탑재한 최초의 마이크로칩 CPU였다.

2013년까지 마이크로칩은 매년 10억 개 이상의 PIC 마이크로컨트롤러를 출하했다.

## 장치 제품군
PIC 마이크로칩은 하버드 아키텍처로 설계되었으며, 다양한 장치 제품군으로 제공된다. 베이스라인 및 미드레인지 제품군은 8비트 데이터 메모리를 사용하고, 하이엔드 제품군은 16비트 데이터 메모리를 사용한다. 최신 시리즈인 PIC32MZ는 MIPS 기반의 32비트 마이크로컨트롤러이다. 명령어 워드 크기는 12비트 (PIC10 및 PIC12), 14비트 (PIC16), 24비트 (PIC24 및 dsPIC)이다. 기계어 명령어의 이진 표현은 제품군에 따라 다르며 PIC 명령어 목록에 표시되어 있다.

이러한 제품군 내에서 장치는 PICnnCxxx(CMOS) 또는 PICnnFxxx(플래시)로 지정될 수 있다. "C" 장치는 일반적으로 "새로운 개발에 부적합"(마이크로칩에서 적극적으로 홍보하지 않음)으로 분류된다. "C" 장치의 프로그램 메모리는 OTP, ROM 또는 EEPROM으로 다양하게 설명된다. 2016년 10월 현재 "생산 중"으로 분류된 유일한 OTP 제품은 pic16HV540이다. 쿼츠 창(UV 소거용)이 있는 "C" 장치는 일반적으로 더 이상 사용할 수 없다.

### PIC10 및 PIC12

이 장치들은 12비트 폭의 코드 메모리, 32바이트 레지스터 파일, 그리고 2단계 깊이의 작은 콜 스택을 특징으로 한다. 이들은 PIC10 시리즈 뿐만 아니라 일부 PIC12 및 PIC16 장치로 대표된다. 베이스라인 장치는 6핀에서 40핀 패키지로 제공된다.

일반적으로 레지스터 파일의 첫 7~9바이트는 특수 목적 레지스터이며, 나머지 바이트는 범용 RAM이다. 포인터는 레지스터 쌍을 사용하여 구현된다. FSR(파일 선택 레지스터)에 주소를 기록한 후 INDF(간접 f) 레지스터는 주소 지정된 레지스터의 별칭이 된다. 뱅크 RAM이 구현된 경우 뱅크 번호는 FSR의 상위 3비트로 선택된다. 이는 레지스터 번호 16~31에 영향을 미친다. 레지스터 0~15는 전역이며 뱅크 선택 비트에 영향을 받지 않는다.

매우 제한적인 레지스터 공간(5비트)으로 인해 거의 읽지 않는 4개의 레지스터는 주소가 할당되지 않고 특수 명령어(OPTION 및 TRIS)로 기록되었다.

ROM 주소 공간은 512이며 각 512워드 페이지의 절반만 주소를 지정할 수 있다. 즉, CALL 명령어는 주소의 하위 9비트를 지정하지만, 해당 주소의 하위 8비트만 명령어의 매개변수이며, 9번째 비트(비트 8)는 CALL 명령어 자체에 의해 암시적으로 0으로 지정된다.

조회 테이블은 RETLW 명령어 테이블에 대한 계산된 GOTO(PCL 레지스터 할당)를 사용하여 구현된다. RETLW는 서브루틴 반환을 수행하고 동시에 W 레지스터에 명령어의 일부인 8비트 즉시 상수를 로드한다.

이 "베이스라인 코어"는 인터럽트를 지원하지 않는다. 모든 I/O는 폴링되어야 한다. 인터럽트 지원 및 4단계 콜 스택을 갖춘 일부 "향상된 베이스라인" 변형이 있다.

PIC10F32x 장치는 256 또는 512워드의 중간 범위 14비트 폭 코드 메모리, 64바이트 SRAM 레지스터 파일, 8단계 깊이의 하드웨어 스택을 특징으로 한다. 이 장치들은 6핀 SMD 및 8핀 DIP 패키지(2핀 미사용)로 제공된다. 입력 전용 1개 및 I/O 핀 3개가 제공된다. 복잡한 인터럽트 세트가 제공된다. 클록은 소프트웨어를 통해 선택 가능한 속도를 선택할 수 있는 16MHz의 내부 보정 고주파 발진기와 31kHz 저전력 소스이다.

### PIC16

섬네일|마이크로칩 PIC16C58A
섬네일|SOIC 소켓의 PIC16LF870
이 장치들은 14비트 폭의 코드 메모리와 향상된 8단계 깊이의 호출 스택을 특징으로 한다. 명령어 집합은 베이스라인 장치와 거의 다르지 않지만, 두 개의 추가 opcode 비트 덕분에 128개의 레지스터와 2048개의 코드 워드를 직접 주소 지정할 수 있다. 몇 가지 추가적인 기타 명령어와 두 개의 추가 8비트 리터럴 명령어(add 및 subtract)가 있다. 미드레인지 코어는 PIC12 및 PIC16으로 분류된 대부분의 장치에서 사용할 수 있다.

레지스터 공간의 첫 32바이트는 특수 목적 레지스터에 할당된다. 나머지 96바이트는 범용 RAM으로 사용된다. 뱅크 RAM이 사용되는 경우 상위 16개 레지스터(0x70–0x7F)는 전역이며, RAM 뱅크 선택 비트를 포함하는 STATUS 레지스터를 포함하여 몇 가지 가장 중요한 특수 목적 레지스터도 전역이다. (다른 전역 레지스터는 FSR 및 INDF, 프로그램 카운터 PCL의 하위 8비트, PC 상위 프리로드 레지스터 PCLATH, 마스터 인터럽트 제어 레지스터 INTCON이다)

PCLATH 레지스터는 PCL 레지스터에 쓰여진 8비트 또는 GOTO 또는 CALL 명령에 의해 제공되는 11비트가 사용 가능한 ROM 공간을 주소 지정하기에 불충분할 때 상위 명령어 주소 비트를 제공한다.

### PIC17
PIC17 시리즈는 인기를 얻지 못했고 PIC18 아키텍처로 대체되었다 (그러나 아래 클론을 참조). PIC17 시리즈는 새로운 디자인에 권장되지 않으며, 사용자에게 가용성이 제한될 수 있다.

이전 코어에 비해 향상된 점은 16비트 폭의 opcode(많은 새로운 명령어를 허용)와 16단계 깊이의 호출 스택이다. PIC17 장치는 40핀에서 68핀 패키지로 생산되었다.

PIC17 시리즈는 여러 가지 중요한 새로운 기능을 도입했다.

* 메모리 맵 누산기
* 코드 메모리 읽기 접근 (테이블 읽기)
* 직접 레지스터-레지스터 이동 (이전 코어는 누산기를 통해 레지스터를 이동해야 했다)
* 코드 공간 확장을 위한 외부 프로그램 메모리 인터페이스
* 8비트 × 8비트 하드웨어 곱셈기
* 두 번째 간접 레지스터 쌍
* 상태 레지스터(ALUSTA)의 제어 비트로 제어되는 자동 증가/자동 감소 주소 지정

중대한 한계점은 RAM 공간이 256바이트(특수 기능 레지스터 26바이트, 범용 RAM 232바이트)로 제한되었으며, 더 많은 RAM을 지원하는 모델에서는 불편한 뱅크 전환이 필요했다.

### PIC18

2000년에 마이크로칩은 PIC18 아키텍처를 출시했다. PIC17 시리즈와 달리 이 아키텍처는 매우 인기가 많았으며, 현재 생산 중인 장치 변형이 많다. 어셈블리어로 프로그래밍되는 경우가 많았던 이전 장치와 달리, C 언어가 주된 개발 언어가 되었다.

PIC18 시리즈는 PIC17 시리즈의 대부분의 기능과 명령어를 계승하면서 다음과 같은 여러 가지 중요한 새 기능을 추가했다.

* 호출 스택은 21비트 폭이며 훨씬 더 깊다 (31단계 깊이)
* 호출 스택을 읽고 쓸 수 있다 (TOSU:TOSH:TOSL 레지스터)
* 조건 분기 명령어
* 인덱스 주소 지정 모드 (PLUSW)
* FSR 레지스터가 12비트로 확장되어 전체 데이터 주소 공간을 선형적으로 주소 지정할 수 있다
* 추가 FSR 레지스터 추가 (총 3개)

RAM 공간은 12비트이며, 4비트 뱅크 선택 레지스터(BSR)와 각 명령어의 8비트 오프셋을 사용하여 주소 지정된다. 각 명령어의 추가 "액세스" 비트는 뱅크 0(a=0)과 BSR에 의해 선택된 뱅크(a=1) 중 하나를 선택한다.

STATUS, WREG, BSR 레지스터에는 1단계 스택도 사용할 수 있다. 이들은 모든 인터럽트 시 저장되며, 복귀 시 복원될 수 있다. 인터럽트가 비활성화된 경우, s 비트를 설정하여 서브루틴 호출/복귀 시에도 사용할 수 있다 (명령어에 ", FAST"를 추가).

자동 증가/감소 기능은 제어 비트를 제거하고 FSR당 4개의 새로운 간접 레지스터를 추가하여 향상되었다. 어떤 간접 파일 레지스터에 접근하는지에 따라 FSR을 후감소, 후증가 또는 사전 증가시키거나, W를 FSR에 추가하여 유효 주소를 형성할 수 있다.

더 고급 PIC18 장치에서는 "확장 모드"를 사용할 수 있어 컴파일된 코드에 더욱 유리한 주소 지정을 제공한다.

* 새로운 오프셋 주소 지정 모드; 액세스 뱅크에 상대적이던 일부 주소가 이제 FSR2 레지스터에 상대적으로 해석된다.
* 특히 FSR 레지스터를 조작하기 위한 여러 새로운 명령어 추가.

PIC18 장치는 여전히 개발 중이며 (2021년) CIP (코어 독립형 주변 장치)가 장착되어 있다.

### PIC24 및 dsPIC

2001년, 마이크로칩은 dsPIC 시리즈 칩을 출시했으며, 2004년 말부터 대량 생산에 들어갔다. 이들은 마이크로칩의 첫 번째 본질적으로 16비트 마이크로컨트롤러이다. PIC24 장치는 범용 마이크로컨트롤러로 설계되었다. dsPIC 장치는 추가로 디지털 신호 처리 기능을 포함한다.

이전 PIC 아키텍처와 여전히 유사하지만, 상당한 개선 사항이 있다.

* 모든 레지스터는 16비트 폭이다.
* 프로그램 카운터는 22비트이다 (비트 22:1; 비트 0은 항상 0).
* 명령어는 24비트 폭이다.
* 데이터 주소 공간이 64 KiB로 확장되었다.
* 첫 2 KiB는 주변 장치 제어 레지스터를 위해 예약되어 있다.
* RAM이 62 KiB를 초과하지 않는 한 데이터 뱅크 전환은 필요하지 않다.
* "f 피연산자" 직접 주소 지정이 13비트 (8 KiB)로 확장되었다.
* 레지스터-레지스터 작업에 사용할 수 있는 16개의 W 레지스터.(그러나 f 피연산자에 대한 작업은 항상 W0을 참조한다.)
* 명령어는 바이트 및 (16비트) 워드 형식으로 제공된다.
* 스택은 RAM에 있다 (W15가 스택 포인터). 하드웨어 스택은 없다.
* W14는 프레임 포인터이다.
* ROM에 저장된 데이터는 직접 접근할 수 있다 ("프로그램 공간 가시성").
* 서로 다른 인터럽트 소스에 대한 벡터 인터럽트

일부 기능은 다음과 같다:

* (16×16)-비트 단일 사이클 곱셈 및 기타 디지털 신호 처리 연산
* 하드웨어 곱셈-누적 (MAC)
* 하드웨어 나누기 보조 (32/16비트 나누기에 19 사이클)
* 배럴 시프터 - 누산기와 범용 레지스터 모두
* 비트 반전
* 루프 인덱싱을 위한 하드웨어 지원
* 주변 장치 직접 메모리 접근

dsPIC는 마이크로칩의 XC16 컴파일러(이전에는 C30으로 불림)를 사용하여 C로 프로그래밍할 수 있으며, 이는 GCC의 변형이다.

명령어 ROM은 24비트 폭이다. 소프트웨어는 ROM에 16비트 워드로 접근할 수 있으며, 짝수 워드에는 각 명령어의 최하위 16비트가, 홀수 워드에는 최상위 8비트가 저장된다. 홀수 워드의 상위 절반은 0으로 읽힌다. 프로그램 카운터는 23비트 폭이지만, 최하위 비트는 항상 0이므로 수정 가능한 비트는 22개이다.

명령어는 두 가지 주요 유형으로 제공되며, 가장 중요한 연산(더하기, XOR, 시프트 등)은 두 가지 형식을 모두 허용한다.

* 첫 번째는 지정된 f 레지스터(즉, RAM의 처음 8K)와 단일 누산기 W0 사이의 연산을 클래식 PIC 명령어와 유사하게 수행하며, 결과가 어느 쪽에 업데이트될지 선택하는 대상 선택 비트를 사용한다. (W 레지스터는 메모리 맵이므로 f 피연산자는 어떤 W 레지스터도 될 수 있다.)
* 두 번째 형식은 더 일반적인 방식으로, 16개의 W 레지스터 중 임의의 3개의 피연산자를 허용한다. 대상과 소스 중 하나도 주소 지정 모드를 지원하여 W 레지스터가 가리키는 메모리에 피연산자가 있을 수 있다.

### PIC32M MIPS 기반 라인
마이크로칩의 PIC32M 제품은 PIC 상표를 사용하지만, 완전히 다른 아키텍처를 가지고 있으며, 여기서는 간단히 설명한다.

#### PIC32MX
2007년 11월, 마이크로칩은 MIPS32 M4K 코어를 기반으로 하는 32비트 마이크로컨트롤러 제품군인 PIC32MX를 출시했다. 이 장치는 GCC 컴파일러의 변형인 PIC32 MCU용 마이크로칩 MPLAB C 컴파일러를 사용하여 프로그래밍할 수 있다. 현재 생산 중인 첫 18개 모델(PIC32MX3xx 및 PIC32MX4xx)은 핀-투-핀 호환되며 PIC24FxxGA0xx 제품군(16비트) 장치와 동일한 주변 장치 세트를 공유하여 공통 라이브러리, 소프트웨어 및 하드웨어 도구를 사용할 수 있다. 오늘날, 작은 QFN 패키지의 28핀부터 이더넷, CAN 및 USB OTG를 갖춘 고성능 장치에 이르기까지 모든 중간 범위 32비트 마이크로컨트롤러 제품군이 제공된다.

PIC32 아키텍처는 마이크로칩 포트폴리오에 다음과 같은 여러 가지 새로운 기능을 도입했다.

* 최고 실행 속도 80 MIPS (120+ 드라이스톤 )
* 가장 큰 플래시 메모리: 512 kB
* 클록 사이클당 1개 명령어 실행
* 최초의 캐시 처리기
* RAM에서 실행 허용
* 풀 스피드 호스트/듀얼 역할 및 OTG USB 기능
* 전체 JTAG 및 2선 프로그래밍 및 디버깅
* 실시간 추적

#### PIC32MZ
2013년 11월, 마이크로칩은 MIPS M14K 코어를 기반으로 하는 PIC32MZ 시리즈 마이크로컨트롤러를 출시했다. PIC32MZ 시리즈에는 다음이 포함된다.

* 252 MHz 코어 속도, 415 DMIPS
* 최대 2 MB 플래시 및 512 KB RAM
* 고속 USB, 암호화 엔진 및 SQI를 포함한 새로운 주변 장치

2015년, 마이크로칩은 업데이트된 MIPS M5150 Warrior M-클래스 프로세서를 사용하는 PIC32MZ EF 제품군을 출시했다.

2017년, 마이크로칩은 통합 그래픽 컨트롤러, 그래픽 프로세서 및 32MB DDR2 DRAM을 특징으로 하는 PIC32MZ DA 제품군을 도입했다.

#### PIC32MM
2016년 6월, 마이크로칩은 저전력 및 저비용 애플리케이션에 특화된 PIC32MM 제품군을 출시했다. PIC32MM은 코어 독립형 주변 장치, 500 nA까지의 절전 모드, 4 x 4 mm 패키지를 특징으로 한다. PIC32MM 마이크로컨트롤러는 MIPS 테크놀로지스 M4K, 32비트 MIPS 아키텍처 프로세서를 사용한다. 이들은 매우 낮은 전력 소비를 위해 설계되었으며 25 MHz로 제한된다. 주요 장점은 MIPS의 16비트 명령어를 지원하여 프로그램 크기를 훨씬 더 압축할 수 있다는 것이다 (약 40%).

#### PIC32MK
마이크로칩은 2017년에 모터 제어, 산업 제어, 산업용 사물 인터넷(IIoT) 및 다중 채널 CAN 애플리케이션에 특화된 PIC32MK 제품군을 출시했다.

### PIC32C Arm 기반 라인
마이크로칩의 PIC32C 제품 또한 PIC 상표를 사용하지만, 완전히 다른 마이크로아키텍처를 가지고 있다. PIC32C 제품은 Arm 프로세서 아키텍처를 사용하며, Cortex-M0+, M4, M7, M23, M33 코어를 사용하는 다양한 라인업을 포함한다. 이들은 마이크로칩이 아트멜 인수를 통해 인수한 Arm 기반 SAM 시리즈 MCU에 추가하여 제공된다.

### PIC64
마이크로칩의 PIC64 제품도 PIC 상표를 사용하지만, 완전히 다른 아키텍처를 가지고 있으며, 여기서는 간략하게만 설명한다.

2024년 7월, 마이크로칩은 고성능 멀티 코어 마이크로프로세서인 PIC64 시리즈를 출시했다. 이 시리즈는 초기에는 RISC-V 명령어 집합을 사용할 예정이지만, 마이크로칩은 ARM Cortex-A 코어를 탑재한 버전도 계획하고 있다. PIC64 시리즈에는 지능형 엣지 애플리케이션에 중점을 둔 PIC64GX 라인과 방사선 경화 처리되어 우주 비행 애플리케이션에 중점을 둔 PIC64-HPSC 라인이 포함될 예정이다.

## 코어 아키텍처
PIC 아키텍처(무관한 PIC32 및 PIC64 제외)는 PDP-8 또는 아폴로 가이던스 컴퓨터와 같은 단일 피연산자 누산기 기계이다. 그 특징은 다음과 같다.

* 거의 모든 명령어의 암시적 피연산자인 하나의 누산기 (W0).
* 고정 길이 명령어의 수가 적고, 대부분 고정된 타이밍(8비트 모델에서 2클록 사이클 또는 4클록 사이클).
* 소량의 주소 지정 가능한 데이터 공간 (제품군에 따라 32, 128 또는 256바이트), 뱅킹을 통해 확장됨.
* 별도의 코드 및 데이터 공간 (하버드 아키텍처).
* 명령어 메모리가 데이터 메모리보다 넓어 명령어 내에 즉시 상수를 포함할 수 있음. (이는 위에서 언급된 다른 초기 누산기 기계와의 주요 차이점이다)
* 두 번째 피연산자는 메모리 위치 또는 즉시 상수.
* 간접 레지스터를 사용하여 간접 주소 모드를 에뮬레이션할 수 있지만, 다른 주소 지정 모드는 없음.
* 데이터 공간에 매핑된 CPU, 포트 및 주변 장치 레지스터
** ALU 상태 플래그는 데이터 공간에 매핑된다.
** 프로그램 카운터도 데이터 공간에 매핑되어 쓰기 가능함 (이는 간접 점프를 구현하는 데 사용됨).
* 반환 주소를 저장하기 위한 하드웨어 스택
* 무조건 분기 명령어만 존재
* 조건부 실행은 다음 명령어를 조건부로 무효화하는 조건부 건너뛰기 명령어를 통해 이루어진다.

RAM이 메모리와 레지스터의 역할을 모두 수행하며, RAM은 일반적으로 "레지스터 파일" 또는 단순히 "레지스터"라고 불리기 때문에 메모리 공간과 레지스터 공간 사이에 구별이 없다.

### 데이터 공간(RAM)
PIC는 범용 RAM 역할을 하는 레지스터 세트를 가지고 있다. 온칩 하드웨어 리소스에 대한 특수 목적 제어 레지스터도 데이터 공간에 매핑된다. 메모리의 주소 지정 가능성은 장치 시리즈에 따라 다르며, 모든 PIC 장치 유형은 추가 메모리에 대한 주소 지정을 확장하기 위한 일부 뱅크 전환 메커니즘을 가지고 있다(그러나 일부 장치 모델은 하나의 뱅크만 구현되어 있다). 최신 시리즈의 장치는 선택된 뱅크와 관계없이 전체 주소 지정 가능한 공간을 커버할 수 있는 이동 명령어를 특징으로 한다. 이전 장치에서는 모든 레지스터 이동이 누산기를 통해 이루어져야 했다.

간접 주소 지정을 구현하기 위해 "파일 선택 레지스터"(FSR)와 "간접 레지스터"(INDF)가 사용된다. FSR에 레지스터 번호가 기록되면, INDF에 대한 읽기 또는 쓰기는 실제로 FSR이 가리키는 레지스터에서 이루어진다. 최신 장치는 순차적으로 저장된 데이터에 효율적으로 접근하기 위해 이 개념을 후증가 및 사전 증가/감소 기능으로 확장했다. 이는 FSR을 스택 포인터(SP)처럼 다룰 수 있게 해준다.

일부 PIC18 장치를 제외하고는 외부 데이터 메모리가 직접 주소 지정되지 않는다. 그러나 일반 I/O 포트는 외부 메모리 및 기타 주변 장치에 접근하기 위한 병렬 버스 또는 직렬 인터페이스를 구현하는 데 사용될 수 있다(서브루틴 사용). 단, 이러한 프로그래밍된 메모리 접근은 PIC MCU의 네이티브 메모리 접근보다 훨씬 느리다는 점에 유의해야 한다.

### 코드 공간
코드 공간은 일반적으로 온칩 ROM, EPROM 또는 플래시 ROM으로 구현된다. 일반적으로 외부 메모리 인터페이스가 없기 때문에 외부 메모리에 코드를 저장하는 기능은 제공되지 않는다. 예외는 PIC17 및 일부 고핀 수 PIC18 장치이다.

### 워드 크기
모든 PIC는 데이터를 8비트 단위로 처리(및 주소 지정)한다. 그러나 코드 공간의 주소 지정 단위는 일반적으로 데이터 공간과 동일하지 않다. 예를 들어, 베이스라인(PIC12) 및 미드레인지(PIC16) 제품군에 속하는 PIC는 명령어 너비와 동일한 워드 크기(각각 12비트 또는 14비트)로 프로그램 메모리를 주소 지정한다. 대조적으로, PIC18 시리즈에서는 프로그램 메모리가 8비트 단위(바이트)로 주소 지정되는데, 이는 16비트 명령어 너비와 다르다.

명확성을 위해 프로그램 메모리 용량은 일반적으로 바이트 단위가 아닌 (단일 워드) 명령어 수로 표시된다.

### 스택
PIC는 반환 주소를 저장하는 데 사용되는 하드웨어 콜 스택을 가지고 있다. 하드웨어 스택은 초기 장치에서는 소프트웨어로 접근할 수 없었지만, PIC18 시리즈 장치에서 변경되었다.

범용 매개변수 스택에 대한 하드웨어 지원은 초기 시리즈에서는 부족했지만, PIC18 시리즈에서 크게 개선되어 PIC18 시리즈 아키텍처가 고급 언어 컴파일러에 더 친화적이게 되었다.

### 명령어 집합

PIC 명령어 집합은 로우엔드 PIC의 약 35개 명령어에서 하이엔드 PIC의 80개 이상 명령어로 다양하다. 명령어 집합에는 레지스터에 직접, 누산기와 리터럴 상수 또는 누산기와 레지스터에 대한 다양한 작업을 수행하는 명령어뿐만 아니라 조건부 실행 및 프로그램 분기를 위한 명령어 등도 포함된다.

비트 설정 및 테스트와 같은 몇 가지 작업은 모든 번호가 지정된 레지스터에서 수행할 수 있지만, 2-입력 산술 연산은 항상 W(누산기)를 포함하며, 결과를 W 또는 다른 피연산자 레지스터에 다시 기록한다. 상수를 로드하려면 다른 레지스터로 이동하기 전에 W에 로드해야 한다. 이전 코어에서는 모든 레지스터 이동이 W를 통해 이루어져야 했지만, "하이엔드" 코어에서는 변경되었다.

PIC 코어는 조건부 실행 및 분기에 사용되는 건너뛰기 명령어를 가지고 있다. 건너뛰기 명령어는 "비트가 설정되어 있으면 건너뛰기" 및 "비트가 설정되어 있지 않으면 건너뛰기"이다. PIC18 이전 코어에는 무조건 분기 명령어만 있었기 때문에 조건부 점프는 조건부 건너뛰기(반대 조건)와 무조건 분기를 연속하여 구현된다. 건너뛰기 명령어는 어떤 단일 후속 명령어를 조건부로 실행하는 데도 유용하다. 건너뛰기 명령어를 건너뛸 수 있다. 예를 들어, "만약 A이면 건너뛰기; 만약 B이면 건너뛰기; C" 명령어 시퀀스는 A가 참이거나 B가 거짓이면 C를 실행한다.

PIC18 시리즈는 섀도우 레지스터를 구현했다. 이들은 인터럽트 중에 여러 중요한 레지스터를 저장하여 인터럽트 서비스 시 프로세서 상태를 자동으로 저장하는 하드웨어 지원을 제공하는 레지스터이다.

일반적으로 PIC 명령어는 다섯 가지 범주로 나뉜다.

* 워킹 레지스터(WREG)와 8비트 즉시("리터럴") 피연산자에 대한 연산. 예: `movlw` (리터럴을 WREG로 이동), `andlw` (WREG와 리터럴을 AND). PIC에 특유한 명령어 중 하나는 `retlw`인데, WREG에 즉시 값을 로드하고 반환하는 것으로, 계산된 분기와 함께 순람표를 생성하는 데 사용된다.
* WREG 및 인덱싱된 레지스터와 함께하는 연산. 결과는 워킹 레지스터(예: `addwf reg,w`) 또는 선택된 레지스터(예: `addwf reg,f`)에 기록될 수 있다.
* 비트 연산. 레지스터 번호와 비트 번호를 취하여 비트 설정 또는 지우기, 설정/지우기 시 테스트 및 건너뛰기 4가지 작업 중 하나를 수행한다. 후자는 조건부 분기를 수행하는 데 사용된다. 일반적인 ALU 상태 플래그는 번호가 지정된 레지스터에서 사용할 수 있으므로 "캐리 클리어 시 분기"와 같은 작업이 가능하다.
* 제어 전송. 이전에 언급된 건너뛰기 명령어 외에는 `goto`와 `call` 두 가지뿐이다.
* 서브루틴에서 반환하거나 저전력 모드로 진입하기 위한 `sleep`과 같은 몇 가지 기타 제로-피연산자 명령어.

### 성능
아키텍처 결정은 속도 대비 비용 비율을 극대화하는 데 중점을 둔다. PIC 아키텍처는 최초의 스칼라 CPU 설계 중 하나였으며 여전히 가장 간단하고 저렴한 아키텍처 중 하나이다. 명령어와 데이터가 별도의 소스에서 오는 하버드 아키텍처는 타이밍과 마이크로회로 설계를 크게 단순화하며, 이는 클록 속도, 가격 및 전력 소비에 이점을 제공한다.

PIC 명령어 집합은 프로그램 공간에서 빠른 조회 테이블을 구현하는 데 적합하다. 이러한 조회는 하나의 명령어와 두 개의 명령어 사이클을 차지한다. 많은 기능을 이러한 방식으로 모델링할 수 있다. PIC의 상대적으로 큰 프로그램 공간(예: 16F690의 4096 × 14비트 워드)과 임베디드 상수를 허용하는 명령어 집합의 설계 덕분에 최적화가 용이하다. 예를 들어, 분기 명령어의 대상은 W로 인덱싱될 수 있으며, 이름 그대로 동작하는 "RETLW"를 실행한다. W에 리터럴을 로드하고 반환한다.

인터럽트 지연 시간은 세 명령어 사이클로 일정하다. 외부 인터럽트는 네 클럭 명령어 사이클과 동기화되어야 한다. 그렇지 않으면 한 명령어 사이클 지터가 발생할 수 있다. 내부 인터럽트는 이미 동기화되어 있다. 일정한 인터럽트 지연 시간은 PIC가 인터럽트 기반 저지터 타이밍 시퀀스를 달성할 수 있도록 한다. 이에 대한 예로는 비디오 동기화 펄스 생성기가 있다. 이는 최신 PIC 모델에서는 더 이상 사실이 아니다. 최신 모델은 3~4사이클의 동기식 인터럽트 지연 시간을 가지기 때문이다.

### 장점
* 학습해야 할 명령어 집합이 작다.
* RISC 아키텍처
* 선택 가능한 속도를 가진 내장 오실레이터
* 쉬운 진입 수준, 50달러 미만으로 제공되는 인-서킷 프로그래밍 및 인-서킷 디버깅 PICKit 장치
* 저렴한 마이크로컨트롤러
* I²C, SPI, USB, UART, A/D, 프로그래밍 가능 비교기, PWM, LIN, CAN, PSP, 이더넷을 포함한 광범위한 인터페이스
* DIL 패키지 프로세서의 가용성으로 취미용으로 쉽게 다룰 수 있다.

### 한계
* 하나의 누산기
* 많은 장치의 전체 RAM에 접근하려면 레지스터 뱅크 전환이 필요하다.
* 연산과 레지스터가 직교적이지 않다. 일부 명령어는 RAM 및 즉시 상수를 주소 지정할 수 있지만, 다른 명령어는 누산기만 사용할 수 있다.

다음 스택 제한 사항은 **PIC18** 시리즈에서는 해결되었지만, 이전 코어에는 여전히 적용된다.

* 하드웨어 호출 스택은 주소 지정할 수 없어 선점형 다중 작업 전환을 구현할 수 없다.
* 소프트웨어로 구현된 스택은 효율적이지 않으므로 재진입 코드를 생성하고 지역 변수를 지원하기 어렵다.

페이지화된 프로그램 메모리를 사용하면 CALL 및 GOTO용 페이지 크기와 계산된 GOTO(일반적으로 테이블 조회에 사용됨)용 페이지 크기가 두 가지 있다. 예를 들어, PIC16에서 CALL 및 GOTO는 11비트 주소 지정을 가지므로 페이지 크기는 2048 명령어 워드이다. 계산된 GOTO의 경우, PCL에 추가할 때 페이지 크기는 256 명령어 워드이다. 두 경우 모두 상위 주소 비트는 PCLATH 레지스터에 의해 제공된다. 이 레지스터는 페이지 간에 제어가 전환될 때마다 변경되어야 한다. PCLATH는 또한 모든 인터럽트 핸들러에 의해 보존되어야 한다.

### 컴파일러 개발
여러 상업용 컴파일러가 시중에 나와 있지만, 2008년 마이크로칩은 18F, 24F, 30/33F 프로세서 라인을 위한 자체 C 컴파일러인 C18과 C30을 출시했다.

2013년 현재 마이크로칩은 MPLAB X와 함께 사용할 수 있는 XC 시리즈 컴파일러를 제공한다. 마이크로칩은 결국 C18과 같은 구형 컴파일러를 단계적으로 폐지하고 새로운 설계를 위해 XC 시리즈 컴파일러를 사용할 것을 권장한다.

PIC 어셈블리어 코드의 RISC 명령어 집합은 전체 흐름을 이해하기 어렵게 만들 수 있다. 간단한 매크로를 신중하게 사용하면 PIC 어셈블리어의 가독성을 높일 수 있다. 예를 들어, 원래 패러랙스 PIC 어셈블러("SPASM")는 W를 숨기고 PIC가 두 주소 머신처럼 보이게 하는 매크로를 가지고 있다. 이 매크로에는 `mov b, a` (주소 a의 데이터를 주소 b로 이동) 및 `add b, a` (주소 a의 데이터를 주소 b의 데이터에 추가)와 같은 매크로 명령어가 있다. 또한 `cjne a, b, dest` (a와 b를 비교하고 같지 않으면 dest로 점프)와 같은 3-피연산자 분기 매크로 명령어를 제공하여 건너뛰기 명령어를 숨긴다.

프로테우스 디자인 스위트는 인기 있는 8비트 및 16비트 PIC 장치와 PIC가 연결된 회로도를 시뮬레이션할 수 있다. 시뮬레이션할 프로그램은 프로테우스 자체, MPLAB 또는 기타 개발 도구에서 개발할 수 있다.

## 장치 프로그래머

섬네일|이것은 2003년 당시 마이크로칩 "PIC" 마이크로컨트롤러 제품군을 위한 프로그래머이다. RS 232 케이블을 통해 개발 소프트웨어를 실행하는 PC와 연결된다. 2003년에 이 장치는 캐나다 달러로 300달러(당시 미국 달러로 약 200달러)였다.
"프로그래머"라고 불리는 장치는 전통적으로 프로그램 코드를 대상 PIC에 넣는 데 사용된다. 마이크로칩이 현재 판매하는 대부분의 PIC는 ICSP(인-서킷 직렬 프로그래밍) 및 LVP(저전압 프로그래밍) 기능을 갖추고 있어 PIC가 대상 회로에 장착된 상태에서 프로그래밍될 수 있다.

마이크로칩은 MPLAB 및 PICKit 시리즈의 프로그래머/디버거를 제공한다. MPLAB ICD5 및 MPLAB REAL ICE는 전문 엔지니어링을 위한 현재의 프로그래머 및 디버거이며, PICKit 5는 취미 애호가 및 학생을 위한 저가형 프로그래머/디버거 라인이다.

### 부트 로딩
고급 플래시 기반 PIC 중 다수는 자체 프로그래밍(자체 프로그램 메모리에 기록)할 수 있으며, 이 프로세스를 부트 로딩이라고 한다. RS-232 또는 USB와 같은 인터페이스를 통해 사용자 프로그램을 로드하는 데 사용할 수 있는 작은 공장 프로그래밍된 부트로더가 있는 데모 보드를 사용할 수 있으므로 프로그래머 장치가 필요하지 않다.

또는 사용자가 ICSP를 사용하여 PIC에 로드할 수 있는 부트로더 펌웨어가 있다. PIC에 부트로더를 프로그래밍한 후, 사용자는 특수 컴퓨터 소프트웨어와 함께 RS232 또는 USB를 사용하여 장치를 다시 프로그래밍할 수 있다.

부트로더가 ICSP보다 장점은 더 빠른 프로그래밍 속도, 프로그래밍 후 즉시 프로그램 실행, 그리고 동일한 케이블을 사용하여 디버그 및 프로그래밍을 모두 수행할 수 있다는 점이다.

### 타사
PIC 마이크로컨트롤러용 프로그래머는 매우 간단한 디자인(호스트 컴퓨터에서 코드를 직접 다운로드할 수 있도록 ICSP에 의존)부터 여러 공급 전압에서 장치를 검증할 수 있는 지능형 프로그래머에 이르기까지 다양하다. 이러한 복잡한 프로그래머 중 다수는 미리 프로그래밍된 PIC 자체를 사용하여 프로그래밍될 PIC에 프로그래밍 명령을 보낸다. 지능형 프로그래머는 인-서킷 프로그래밍을 지원하지 않는 초기 PIC 모델(주로 EPROM 유형)을 프로그래밍하는 데 필요하다.

타사 프로그래머는 직접 제작할 계획부터 자가 조립 키트 및 완전히 테스트된 즉시 사용 가능한 장치에 이르기까지 다양하다. 일부는 PC가 저수준 프로그래밍 신호 처리를 수행하도록 요구하는 간단한 디자인(일반적으로 직렬 포트 또는 병렬 포트에 연결되고 몇 가지 간단한 구성 요소로 구성됨)인 반면, 다른 일부는 프로그래밍 로직이 내장되어 있다(이들은 일반적으로 직렬 또는 USB 연결을 사용하며, 일반적으로 더 빠르고, 종종 제어를 위해 PIC 자체를 사용하여 제작됨).

## 디버깅

### 인-서킷 디버깅
모든 최신 PIC 장치에는 CPU 코어에 내장된 ICD(인-서킷 디버깅) 인터페이스가 있어 MPLAB IDE와 함께 프로그램의 대화형 디버깅을 허용한다. MPLAB ICD 및 MPLAB REAL ICE 디버거는 ICSP 인터페이스를 사용하여 이 인터페이스와 통신할 수 있다.

그러나 이 디버깅 시스템은 제한된 브레이크포인트 수(이전 장치는 1개, 최신 장치는 3개), 일부 I/O 손실(디버깅 전용 라인을 가진 일부 표면 실장 44핀 PIC 제외), 그리고 일부 온칩 기능 손실이라는 대가를 치른다.

일부 장치는 비용이나 핀 부족으로 인해 온칩 디버그를 지원하지 않는다. 일부 더 큰 칩도 디버그 모듈이 없다. 이러한 장치를 디버그하려면 전용 포트를 제공하는 자식 보드에 장착된 특수 -ICD 버전의 칩이 필요하다. 이러한 디버그 칩 중 일부는 자식 보드의 선택 가능한 점퍼를 사용하여 두 가지 이상의 칩 유형으로 작동할 수 있다. 이를 통해 온칩 주변 장치 중 일부 또는 전부를 갖지 않는 광범위하게 동일한 아키텍처를 단일 -ICD 칩으로 대체할 수 있다. 예를 들어, 16F690-ICD는 온칩 주변 장치 중 아무것도, 일부 또는 전부를 갖는 6가지 다른 부품 중 하나로 기능할 것이다.

### 인-서킷 에뮬레이터
마이크로칩은 세 가지 완전한 인-서킷 에뮬레이터를 제공한다. MPLAB ICE2000(병렬 인터페이스, USB 변환기 사용 가능), 최신 MPLAB ICE4000(USB 2.0 연결), 그리고 가장 최근의 REAL ICE(USB 2.0 연결)이다. 이러한 모든 도구는 일반적으로 MPLAB IDE와 함께 사용하여 대상에서 실행되는 코드의 소스 수준 대화형 디버깅을 수행한다.

## 운영 체제
PIC 프로젝트는 FreeRTOS, AVIX RTOS, uRTOS, Salvo RTOS 또는 기타 유사한 라이브러리와 같은 실시간 운영체제를 사용하여 작업 스케줄링 및 우선순위를 지정할 수 있다.

세르주 바쿨렌코(Serge Vakulenko)의 오픈 소스 프로젝트는 2.11BSD를 PIC32 아키텍처에 RetroBSD라는 이름으로 적용한다. 이는 온보드 개발 환경을 포함한 익숙한 유닉스 유사 운영 체제를 온보드 하드웨어의 제약 내에서 마이크로컨트롤러에 제공한다.

## 클론
### 패러랙스

패러랙스는 패러랙스 SX로 알려진 PICmicro 유사 마이크로컨트롤러 시리즈를 생산했다. 현재는 단종되었다. 원래 버전의 BASIC 스탬프에 사용된 PIC 마이크로컨트롤러와 아키텍처적으로 유사하게 설계된 SX 마이크로컨트롤러는 해당 제품의 여러 후속 버전에서 PIC를 대체했다.

패러랙스의 SX는 8비트 RISC 마이크로컨트롤러로, 12비트 명령어 워드를 사용하며 75 MHz(75 MIPS)의 빠른 속도로 작동한다. 이들은 최대 4096개의 12비트 플래시 메모리 워드와 최대 262바이트의 랜덤 액세스 메모리, 8비트 카운터 및 기타 지원 로직을 포함한다. I²C 및 SPI 인터페이스, UART, 주파수 생성기, 측정 카운터 및 PWM 및 시그마-델타 A/D 변환기를 에뮬레이션하는 소프트웨어 라이브러리 모듈이 있다. 다른 인터페이스는 상대적으로 쉽게 작성할 수 있으며, 기존 모듈을 수정하여 새로운 기능을 얻을 수 있다.

### PKK 밀란드로
섬네일|1886VE2U
러시아의 PKK 밀란드로사는 PIC17 아키텍처를 사용하는 1886 시리즈 마이크로컨트롤러를 생산한다. 프로그램 메모리는 1886VE2U()의 최대 64KB 플래시 메모리 또는 1886VE5U(1886ВЕ5У)의 8KB EEPROM으로 구성된다. 1886VE5U(1886ВЕ5У)부터 1886VE7U(1886ВЕ7У)는 -60°C에서 +125°C의 군용 온도 범위에 지정되어 있다. 다양한 부품의 하드웨어 인터페이스에는 USB, CAN, I2C, SPI뿐만 아니라 A/D 및 D/A 컨버터가 포함된다. 1886VE3U(1886ВЕ3У)는 GOST 28147-89에 따른 암호화 기능을 위한 하드웨어 가속기를 포함한다. 방사선 경화 처리된 칩도 있으며, 지정은 1886VE8U(1886ВЕ8У) 및 1886VE10U(1886ВЕ10У)이다.

### ELAN 마이크로일렉트로닉스

타이완의 ELAN 마이크로일렉트로닉스 코퍼레이션은 PIC16 아키텍처를 기반으로 하는 마이크로컨트롤러 라인을 만들고 있으며, 13비트 명령어와 더 작은 (6비트) RAM 주소 공간을 사용한다.

### 홀텍 반도체

홀텍 반도체는 PIC16과 놀랍도록 유사한 14비트 명령어 집합을 가진 매우 저렴한 마이크로컨트롤러를 다수 생산한다 (수량 구매 시 최저 8.5센트).

### 하이콘

하이콘 테크놀로지, 휴대용 전자 제품(멀티미터, 주방 저울 등)용 혼합 신호 칩의 대만 제조업체는 PIC18 제품군과 매우 유사한 16비트 명령어 워드를 가진 독점 H08 마이크로컨트롤러 시리즈를 보유하고 있다. (히타치/르네사스 H8 마이크로컨트롤러와는 관련 없음.) H08A는 PIC18과 가장 유사하며, H08B는 하위 집합이다.

사용 가능한 명령어는 거의 동일하지만, 인코딩은 다르며, 메모리 맵과 주변 장치도 다르다. 예를 들어, PIC18은 8비트 주소를 부호 확장하여 0x000–0x07F의 RAM 또는 0xF80–0xFFF의 특수 기능 레지스터에 직접 접근할 수 있다. H08은 특수 기능 레지스터를 0x000–0x07F에, 전역 RAM을 0x080–0x0FF에 배치하며, 주소를 0으로 확장한다.

### 아시아의 다른 제조업체
저가 소비자 가전제품에서 발견되는 아시아 제조업체의 많은 초저가 OTP 마이크로컨트롤러는 PIC 아키텍처 또는 수정된 형태를 기반으로 한다. 대부분의 클론은 베이스라인 부품(PIC16C5x/PIC12C50x)만 대상으로 한다. 기본 아키텍처에 대한 특허가 만료된 지 오래되었으므로, 마이크로칩은 일부 제조업체를 상대로 저작권 침해를 이유로 소송을 제기하려 했다. 그러나 성공하지 못했다.

## 같이 보기
* PIC16x84
* 아트멜 AVR
* 아두이노
* BASIC 아톰
* BASIC 스탬프
* OOPic
* PICAXE
* TI MSP430
* 맥시마이트

## 각주

## 더 읽어보기
* Microcontroller Theory and Applications, with the PIC18F; 2nd Ed; M. Rafiquzzaman; Wiley; 544 pages; 2018; .
* Microcontroller System Design Using PIC18F Processors; Nicolas K. Haddad; IGI Global; 428 pages; 2017; .
* PIC Microcontroller Projects in C: Basic to Advanced (for PIC18F); 2nd Ed; Dogan Ibrahim; Newnes; 660 pages; 2014; . (1st Ed)
* Microcontroller Programming: Microchip PIC; Sanchez and Canton; CRC Press; 824 pages; 2006; . (1st Ed)
* PIC Microcontroller Project Book; John Iovine; TAB; 272 pages; 2000; . (1st Ed)

## 외부 링크

.* 공식 마이크로칩 웹사이트
* PIC 와이파이 프로젝트 웹사이트

분류:마이크로컨트롤러