PIC微控制器
PIC是由Microchip Technology制造的微控制器系列,其衍生自最初由“通用仪器”微电子部开发的PIC1650。 PIC最初指的是外围接口控制器,目前已扩展为可编程智能计算机。该家族的第一批成员于1976年面世。到2013年,该公司已售出了超过120亿个单个零件,用于各种嵌入式系统。
PIC微控制器
PIC的早期的型号具有用于程序存储的只读存储器(ROM)或现场可编程EPROM,有些具有擦除存储器的功能。当前所有的型号都使用闪存来存储程序,而较新的型号则允许PIC重新编程,程序存储器和数据存储器分开,数据存储器为8位、16位,在最新型号中为32位宽。程序指令的位计数因PIC系列而异,并且可以是12位、14位、16位或24位长。指令集也因型号而异,更强大的芯片增加了用于数字信号处理功能的指令。
PIC器件的硬件功能范围从6引脚SMD、8引脚DIP芯片到144引脚SMD芯片,带分立I/O引脚、ADC和DAC模块以及诸如UART、I2C、CAN和甚至USB。许多类型都有低功耗和高速版本。
制造商提供用于开发的计算机软件,称为MPLAB X,汇编器和C/C ++编译器,以及MPLAB和PICKit系列下的编程器/调试器硬件。也可以使用第三方和一些开源工具。有些器件具有在线编程功能。
PIC器件因其低成本、广泛可用性、庞大的用户群、广泛的应用笔记集、低成本或免费开发工具的可用性、串行编程以及可重新编程的闪存功能而在工业开发人员和业余爱好者中广受欢迎。
历史
原始概念
最初的PIC打算与通用仪器的新型CP1600 16位中央处理器(CPU)一起使用。 CP1600在当时是功能强大的处理器,它以微型计算机封装实现了大多数PDP-11微型计算机的指令集体系结构。
虽然大多数人认为CP1600是一个好的CPU,但它有一个严重的问题。为了减少其物理DIP封装的引脚数,地址总线和数据总线共享引脚。对于具有单独I/O通道的CPU(例如Intel 8008),这不是问题,但是1600也使用了PDP-11的内存映射输入/输出概念。这意味着与设备通信需要设备在一个机器周期内监视正在访问的关键存储器位置,然后在下一个机器周期读取数据。当总线在地址和数据模式之间交替时,这会使机器上的I/O变慢,并且由于设备必须在多个周期内锁存输入,实现起来的成本更高。在相应的设备驱动程序的CPU端重复了所有这些复杂性。
为了解决1600的这一缺点,于1975年开发了8位PIC。该想法是,系统将使一个或多个低成本PIC执行与设备的实际I/O,然后发送该数据到CPU。 PIC使用存储在ROM中的简单微代码来执行其任务,尽管当时未使用术语RISC,但它与RISC设计具有一些共同的特征。
1600以后
1985年,通用仪器公司出售了其微电子部门,新的所有者取消了几乎所有当时已过时的所有产品。但是,PIC已通过内部EPROM进行了升级,以生产可编程通道控制器。同时,英国的Plessey使用相同的指令集发布了基于GI设计的NMOS处理器,编号为PIC1650和PIC1655,这些指令集可以是用户掩码可编程的,也可以是为自动拨号器和键盘接口预编程的版本。
1998年,Microchip推出了PIC 16F84,这是其成功的串行可编程PIC16C84的闪存可编程和可擦除版本。 Microchip于2001年推出了更多的Flash可编程器件,并于2002年全面投入生产。
如今,各种各样的PIC可与各种板载外设(串行通信模块,UART,电机控制内核等)一起使用,并且程序存储器的大小从256字到64K字不等(“字”是一种汇编语言指令) ,长度从8位到16位不等,具体取决于特定的PIC微型系列)。
PIC和PICmicro现在是Microchip Technology的注册商标。人们普遍认为PIC代表外设接口控制器,尽管通用仪器公司最初的PIC1640和PIC1650器件的原始缩写是“可编程接口控制器”。该缩写词很快被“可编程智能计算机”所取代。
1993年推出的Microchip 16C84(PIC16x84)是第一个具有片上EEPROM存储器的Microchip CPU。
到2013年,Microchip每年出货的PIC微控制器超过10亿。
器件系列
PIC微型芯片采用哈佛架构设计,并提供各种器件系列。基础和中档系列使用8位宽的数据存储器,高端系列使用16位数据存储。最新系列PIC32MZ是基于32位MIPS的单片机。指令字的大小为12位(PIC10和PIC12)、14位(PIC16)和24位(PIC24和dsPIC)。机器指令的二进制表示形式因系列而异,并在PIC指令列表中显示。
在这些系列中,器件可以指定为PICnnCxxx(CMOS)或PICnnFxxx(Flash)。 “ C”器件通常被分类为“不适合新开发”(Microchip不积极推广)。 “ C”设备的程序存储器被不同地描述为OTP,ROM或EEPROM。截至2016年10月,唯一被分类为“生产中”的OTP产品是pic16HV540。带石英窗口(用于擦除)的“ C”设备通常不再可用。
PIC10和PIC12
这些器件具有12位宽的代码存储器、32字节的寄存器文件和微小的两级深度调用堆栈。它们由PIC10系列以及某些PIC12和PIC16器件代表。基线器件提供6引脚至40引脚封装。
通常,寄存器文件的前7至9个字节是专用寄存器,其余字节是通用RAM。指针是通过寄存器对实现的:将地址写入FSR(文件选择寄存器)后,INDF(间接f)寄存器将成为所寻址寄存器的别名。如果实现了存储区RAM,则存储区号由FSR的高3位选择。这会影响寄存器编号16–31;寄存器0-15是全局寄存器,不受存储区选择位的影响。
由于非常有限的寄存器空间(5位),没有分配4个很少读取的寄存器地址,而是通过特殊指令(OPTION和TRIS)进行写入。
ROM地址空间为512个字(每个12位),可通过存储扩展为2048个字。 CALL和GOTO指令指定新代码位置的低9位。其他高阶位则取自状态寄存器。请注意,CALL指令仅包含8位地址,并且只能在每个512字页面的前半部分中指定地址。
查找表是通过将计算出的GOTO(分配给PCL寄存器)实施到RETLW指令表中而实现的。
此“基准核心”不支持中断;所有I / O必须被轮询。有一些带有中断支持和“四级调用栈”的“增强基线”变体。
PIC10F32x器件具有256或512个字的中档14位宽代码存储,64字节SRAM寄存器文件和8级深度硬件堆栈。这些器件采用6引脚SMD和8引脚DIP封装(未使用两个引脚)。仅一个输入和三个I / O引脚可用。提供了一组复杂的中断。时钟是一个内部校准的16 MHz高频振荡器,可通过软件和31 kHz低功耗源选择速度。
PIC16
这些器件具有14位宽的代码存储器和改进的8级深度调用堆栈。指令集与基准设备的差别很小,但是两个附加的操作码位允许直接寻址128个寄存器和2048个字的代码。还有一些其他的杂项指令,还有两个其他的8位立即数指令加法和减法。中档内核可用于大多数标有PIC12和PIC16的器件。
寄存器空间的前32个字节分配给专用寄存器。剩余的96个字节用于通用RAM。如果使用存储区RAM,则高16位寄存器(0x70–0x7F)是全局的,一些最重要的专用寄存器也是如此,其中包括保存RAM存储区选择位的STATUS寄存器。 (其他全局寄存器是FSR和INDF,程序计数器PCL的低8位,PC高预载寄存器PCLATH和主中断控制寄存器INTCON。)
当写PCL寄存器提供的8位或GOTO或CALL指令提供的11位不足以寻址可用ROM空间时,PCLATH寄存器提供高阶指令地址位。
PIC17
17系列从未流行开来,并已被PIC18架构所取代。不建议将17系列用于新设计,并且可用性可能仅限于用户。
对早期内核的改进是16位宽的操作码(允许许多新指令)和16级深度调用堆栈。 PIC17器件采用40至68引脚的封装生产。
17系列介绍了许多重要的新功能:
- 内存映射累加器
- 读取对代码存储器的访问(表读取)
- 直接寄存器到寄存器移动(通过累加器移动寄存器所需的先前内核)
- 外部程序存储器接口以扩展代码空间
- 8位×8位硬件乘法器
- 第二个间接寄存器对
- 由状态寄存器(ALUSTA)中的控制位控制的自动递增/递减寻址
一个明显的限制是RAM空间被限制为256字节(26个字节的特殊功能寄存器和232字节的通用RAM),而在支持更多功能的模型中,组切换很麻烦。
PIC18
关于该系列单片机的更多信息:PIC指令列表§PIC18高端核心器件(16位) 在2000年,Microchip推出了PIC18架构。与17系列不同,它已被证明非常受欢迎,目前在制造中具有大量的设备变体。与较早的设备相比,这些设备通常不是在汇编中进行编程的,相反,C已成为主要的开发语言。
18系列继承了17系列的大多数功能和说明,同时增加了许多重要的新功能:
- 调用栈宽21位,深得多(深31级)
- 可以读写调用堆栈(TOSU:TOSH:TOSL寄存器)
- 条件分支指令
- 索引寻址模式(PLUSW)
- 将FSR寄存器扩展到12位,从而允许它们线性寻址整个数据地址空间
- 添加另一个FSR寄存器(将数字最多增加3)
RAM空间为12位,在每个指令中使用4位存储体选择寄存器和8位偏移量进行寻址。每个指令中的附加“访问”位在存储区0(a = 0)和BSR选择的存储区(a = 1)之间进行选择。
STATUS,WREG和BSR寄存器还可以使用1级堆栈。它们在每次中断时都保存,并且可以在返回时恢复。如果禁止了中断,则也可以通过将s位置1(在指令后附加“,FAST”)将其用于子程序调用/返回。
通过删除控制位并为每个FSR添加四个新的间接寄存器,改进了自动递增/递减功能。根据访问哪个间接文件寄存器,可以对FSR进行递减,后递增或预递增。或通过在FSR中添加W来形成有效地址。
在更高级的PIC18器件中,提供了“扩展模式”,这使寻址方式更适合编译后的代码:
新的偏移寻址模式;现在相对于FSR2寄存器解释了相对于访问存储区的某些地址 增加了一些新的指令,这些指令主要用于操纵FSR寄存器。 PIC18器件仍在开发中(2017),并配备了CIP(独立于内核的外设)
PIC24和dsPIC
关于这些单片机系列的更多信息:PIC指令列表§PIC24和dsPIC 16位单片机 Microchip于2001年推出了dsPIC系列芯片[11],该芯片于2004年底开始批量生产。它们是Microchip第一个固有的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)
- 硬件除法辅助(19个周期用于32/16位除法)
- 桶移位-适用于累加器和通用寄存器
- 位反转
- 硬件支持循环索引
- 外设直接存储器访问
可以使用Microchip的XC16编译器(以前称为C30)在C中对dsPIC进行编程,该编译器是GCC的一种变体。
指令ROM为24位宽。软件可以按16位字访问ROM,偶数字保存每条指令的最低16位,奇数字保存最高的8位。奇数词的高半部分读为零。程序计数器为23位宽,但最低有效位始终为0,因此有22个可修改位。
指令有两种主要形式,最重要的操作(加,异或,移位等)允许两种形式。
第一个类似于经典PIC指令,在指定的f寄存器(即RAM的第一个8K)和单个累加器W0之间进行操作,并选择目标选择位,并随结果更新。 (W寄存器是内存映射的。因此f操作数可以是任何W寄存器。)
第二种形式更常规,允许三个操作数,可以是16 W寄存器中的任何一个。目标和源之一也支持寻址模式,从而允许操作数在W寄存器指向的存储器中。
基于PIC32M MIPS的产品线
PIC32MX 2007年11月,Microchip推出了基于MIPS32 M4K内核的PIC32MX系列32位微控制器。[13]可以使用适用于PIC32 MCU的Microchip MPLAB C编译器(GCC编译器的一种)对器件进行编程。当前生产的前18个模型(PIC32MX3xx和PIC32MX4xx)与引脚兼容,并与PIC24FxxGA0xx系列(16位)器件共享相同的外设,从而允许使用通用库,软件和硬件工具。今天,从小型QFN封装的28引脚开始,到具有以太网,CAN和USB OTG的高性能设备,都提供了全系列的中档32位微控制器。
PIC32架构为Microchip产品组合带来了许多新功能,其中包括:
最高执行速度80 MIPS(80 MHz时为120+ [14] Dhrystone MIPS) 最大闪存:512 kB 每个时钟周期执行一条指令 第一个缓存的处理器 允许从RAM执行 全速主机/双重角色和OTG USB功能 完整的JTAG和2线编程和调试 实时追踪
PIC32MZ
2013年11月,Microchip推出了基于MIPS M14K内核的PIC32MZ系列单片机。 PIC32MZ系列包括
- 核心速度252 MHz,415 DMIPS
- 高达2 MB闪存和512KB RAM
- 新的外围设备,包括高速USB,加密引擎和SQI
2015年,Microchip使用更新的MIPS M5150 Warrior M级处理器发布了PIC32MZ EF系列。
2017年,Microchip推出了PIC32MZ DA系列,具有集成的图形控制器,图形处理器和32MB DDR2 DRAM。
PIC32MM 2016年6月,Microchip推出了专用于低功耗和低成本应用的PIC32MM系列。PIC32MM具有独立于内核的外设,低至500 nA的睡眠模式以及4 x 4 mm封装。PIC32MM单片机使用32位MIPS32处理器MIPS Technologies M4K。它们旨在实现极低的功耗,并限制在25MHz。它们的主要优势是支持MIPS的16位指令,使程序大小更紧凑(约40%)
PIC32MK Microchip在2017年推出了PIC32MK系列,专门用于电机控制,工业控制,工业物联网(IIoT)和多通道CAN应用。
核心架构
PIC体系结构的特点是具有多个属性:
- 分开的代码和数据空间(哈佛体系结构)。
- PIC32除外:MIPS M4K架构的独立数据和指令路径已通过系统总线矩阵模块有效地合并到单个公共地址空间中。
- 少量定长指令
- 大多数指令是单周期的(2个时钟周期,或者在8位模型中为4个时钟周期),在分支和跳转上有一个延迟周期
- 隐含一个累加器(W0)(作为源操作数)(即未在操作码中编码)
- 所有RAM位置均用作寄存器,作为数学和其他功能的源和/或目标。[24]
- 用于存储返回地址的硬件堆栈
- 通过银行扩展了少量的可寻址数据空间(32、128或256字节,具体取决于系列)
- 数据空间映射的CPU,端口和外设寄存器
- ALU状态标志映射到数据空间
- 程序计数器也映射到数据空间且可写(用于实现间接跳转)。 内存空间和寄存器空间之间没有区别,因为RAM既充当存储器又充当寄存器的工作,并且RAM通常仅被称为寄存器文件或简称为寄存器。
数据空间(RAM) PIC具有一组用作通用RAM的寄存器。片上硬件资源的专用控制寄存器也映射到数据空间。存储器的可寻址性取决于设备系列,并且所有PIC器件都有某种存储区机制可将寻址扩展到附加存储器。后来的一系列设备都具有移动指令,该指令可以覆盖整个可寻址空间,而与所选存储区无关。在较早的设备中,任何寄存器移动都必须通过累加器来实现。
为了实现间接寻址,使用了“文件选择寄存器”(FSR)和“间接寄存器”(INDF)。寄存器号被写入FSR,然后从INDF读取或写入INDF实际上将是FSR指向的寄存器。后来的设备通过前后递增/递减/扩展来扩展此概念,以提高访问顺序存储的数据的效率。这也使FSR几乎像堆栈指针(SP)一样被对待。
外部数据存储器不可直接寻址,除非在某些具有高引脚数的PIC18器件中。
代码空间 代码空间通常实现为片上ROM,EPROM或Flash ROM。通常,由于缺少外部存储器接口,因此没有规定将代码存储在外部存储器中。 PIC17和高引脚数PIC18器件除外。[25]
字数 所有PIC以8位块的形式处理(和地址)数据。但是,代码空间的可寻址单元通常与数据空间不同。例如,基准系列(PIC12)和中档系列(PIC16)的PIC具有可与指令宽度相同的字长寻址的程序存储器,即分别为12位或14位。相反,在PIC18系列中,程序存储器以8位增量(字节)寻址,这不同于16位的指令宽度。
为了清楚起见,程序存储容量通常以(单字)指令数而不是字节数表示。
堆栈 PIC具有硬件调用堆栈,该堆栈用于保存返回地址。在较早的设备上无法通过软件访问硬件堆栈,但是18系列设备对此进行了更改。
早期的系列中缺少对通用参数堆栈的硬件支持,但是18系列中的硬件支持大大改善了,这使得18系列体系结构对高级语言编译器更加友好。
指令系统 更多信息:PIC指令清单 PIC的指令从低端PIC的约35条指令到高端PIC的80多种指令不等。该指令集包括直接在寄存器,累加器和文字常量或累加器和寄存器上执行各种操作的指令,以及用于条件执行和程序分支的指令。
可以在任何编号的寄存器上执行某些操作,例如位设置和测试,但是双操作数算术运算始终涉及W(累加器),将结果写回W或另一个操作数寄存器。要加载一个常数,必须先将其加载到W中,然后才能将其移动到另一个寄存器中。在较早的内核上,所有寄存器移动都需要通过W,但是在“高端”内核上却有所改变。
PIC内核具有跳过指令,这些指令用于条件执行和分支。跳过指令为“如果置位则跳过”和“如果未置位则跳过”。由于PIC18之前的内核仅具有无条件分支指令,因此条件跳转通过条件跳转(条件相反)和无条件分支来实现。跳过对于有条件地执行任何紧跟的单个指令也很有用。可以跳过跳过指令。例如,如果A为true或B为false,则指令序列“如果A,则跳过;如果B; C,则跳过”将执行C。
18系列实现了影子寄存器,这些寄存器在中断期间保存了几个重要的寄存器,为硬件提供了支持,以便在服务中断时自动保存处理器状态。
通常,PIC指令分为五类:
使用8位立即数(“文字”)操作数对工作寄存器(WREG)进行操作。例如。 movlw(将文字移至WREG)和lw(AND文字与WREG)。 PIC特有的一条指令是retlw,立即将其加载到WREG中并返回,该指令与计算分支一起使用以生成查找表。 使用WREG和索引寄存器进行操作。结果可以写入任何一个工作寄存器(例如addwf reg,w)。或所选的寄存器(例如addwf reg,f)。 位操作。它们采用一个寄存器号和一个位数,并执行以下四个操作之一:设置或清除一位,并测试并跳过设置/清除。后者用于执行条件分支。通常的ALU状态标志可在编号寄存器中使用,因此可以进行诸如“分叉进位清除”之类的操作。 控制转移。除了前面提到的跳过指令外,只有两个:goto和call。 一些其他零操作数指令,例如从子例程返回,以及进入低功耗模式的睡眠。
表现 架构决策是针对速度成本比的最大化。 PIC体系结构是最早的标量CPU设计之一,仍然是最简单和最便宜的。哈佛架构的指令和数据来自不同的来源,大大简化了时序和微电路设计,这有利于时钟速度,价格和功耗。
PIC指令集适合在程序空间中实现快速查找表。这样的查找需要一个指令和两个指令周期。许多功能可以通过这种方式建模。 PIC相对较大的程序空间(例如16F690上的4096×14位字)和指令集的设计(可允许嵌入常数)有助于优化。例如,一条分支指令的目标可能被W索引,并执行一个“ RETLW”,其名称与之相同–在W中返回原义。
中断等待时间在三个指令周期内是恒定的。外部中断必须与四时钟指令周期同步,否则可能会有一个指令周期抖动。内部中断已经同步。恒定的中断等待时间使PIC可以实现中断驱动的低抖动时序。一个例子是视频同步脉冲发生器。在最新的PIC模型中,这不再是正确的,因为它们具有三个或四个周期的同步中断等待时间。
好处 小指令集学习 RISC架构 内置振荡器,速度可选 入门级容易,在线编程以及在线调试PICkit单元,价格不到50美元 廉价的微控制器 广泛的接口,包括I²C,SPI,USB,USART,A / D,可编程比较器,PWM,LIN,CAN,PSP和以太网[26] DIL封装的处理器的可用性使它们易于处理,便于业余使用。
局限性
一个蓄能器 需要寄存器组切换才能访问许多设备的整个RAM 操作和寄存器不正交;一些指令可以寻址RAM和/或立即数,而另一些指令只能使用累加器。 PIC18系列解决了以下堆栈限制,但仍适用于较早的内核:
硬件调用堆栈不可寻址,因此无法实现抢占式任务切换 软件实现的堆栈效率不高,因此很难生成可重入的代码并支持局部变量 使用分页程序存储器时,有两种页面大小值得担心:一种用于CALL和GOTO,另一种用于计算的GOTO(通常用于表查找)。例如,在PIC16上,CALL和GOTO具有11位寻址,因此页面大小为2048个指令字。对于添加到PCL的已计算GOTO,页面大小为256个指令字。在这两种情况下,高位地址位均由PCLATH寄存器提供。每次控件在页面之间转移时,都必须更改此寄存器。 PCLATH也必须由任何中断处理程序保留。
编译器开发 尽管有几种商用编译器可用,但Microchip在2008年针对18F 24F和30 / 33F处理器系列发布了自己的C编译器C18和C30。
从2013年起,Microchip提供了其XC系列编译器,可与MPLAB X一起使用。Microchip最终将淘汰其较早的编译器,例如C18,并建议将其XC系列编译器用于新设计。
PIC汇编语言代码的RISC指令集可能会使整体流程难以理解。明智地使用简单宏可以提高PIC汇编语言的可读性。例如,原始的Parallax PIC汇编器(“ SPASM”)具有宏,这些宏隐藏W,并使PIC看起来像一个两地址的机器。它具有宏指令,例如mov b,a(将数据从地址a移动到地址b)和add b,a(将数据从地址a添加到地址b中的数据)。它还通过提供三操作数分支宏指令(例如cjne a,b,dest)(将a与b进行比较,如果不相等则跳转到dest)来隐藏跳过指令。
硬件功能
PIC器件通常具有以下特点:
- 闪存(程序存储器,使用MPLAB器件编程)
- SRAM(数据存储器)
- EEPROM存储器(在运行时可编程)
- 睡眠模式(省电)
- 看门狗定时器
- 各种晶体或RC振荡器配置,或外部时钟
变体 在一系列产品中,根据芯片所具有的硬件资源,仍然会有许多设备变型:
- 通用I / O引脚
- 内部时钟振荡器
- 8/16/32位定时器
- 同步/异步串行接口USART
- 用于I²C和SPI通信的MSSP外围设备
- 捕获/比较和PWM模块
- 模数转换器(最高〜1.0 Msps)
- USB,以太网,CAN接口支持
- 外部存储器接口
- 集成模拟RF前端(PIC16F639和rfPIC)。
- KEELOQ滚动码加密外设(编码/解码)
- 还有很多
发展趋势 具有EPROM存储的第一代PIC几乎完全被具有闪存的芯片所取代。同样,PIC1650的原始12位指令集及其直接后代已被14位和16位指令集取代。 Microchip仍在销售其一些基于EPROM的PIC的OTP(一次性可编程)和窗口化(可紫外线擦除)版本,以用于传统支持或批量订购。 Microchip网站列出了不可作为OTP进行电擦除的PIC。可以订购这些芯片的UV擦除窗口版本。
零件号 PICMicro零件号中的F通常表示PICmicro使用闪存,并且可以电子方式擦除。相反,C通常意味着只能通过将裸片暴露在紫外线下才能将其擦除(这仅在使用开窗封装样式的情况下才可行)。使用EEPROM的PIC16C84是该规则的一个例外,因此可以电擦除。
名称中的L表示该部件将在较低的电压下运行,通常会施加频率限制。在3-3.6伏的严格范围内,专门为低压操作而设计的零件在零件号上标有J。这些部件还具有独特的I/O容限,因为它们可接受高达5V的输入。
开发工具
Microchip提供了一个名为MPLAB X的免费IDE软件包,其中包括汇编器,链接器,软件模拟器和调试器。他们还出售用于PIC10,PIC12,PIC16,PIC18,PIC24,PIC32和dsPIC的C编译器,它们与MPLAB X完全集成。免费的C编译器版本也具有所有功能。但是对于免费版本,优化将在60天后停用。[30]
多个第三方开发了用于PIC的C语言编译器,其中许多集成到MPLAB和/或具有自己的IDE。 meLabs,Inc.提供了用于PICBASIC语言编程PIC的全功能编译器。Mikroelektronika提供C,BASIC和Pascal编程语言的PIC编译器。
存在一种图形化编程语言Flowcode,能够对8位和16位PIC器件进行编程并生成PIC兼容的C代码。它有许多版本,从免费的演示版到更完整的专业版。
Proteus Design Suite能够仿真许多流行的8位和16位PIC器件,以及与原理图上的PIC连接的其他电路。可以在Proteus本身,MPLAB或任何其他开发工具中开发要模拟的程序。
器件编程
传统上,称为“编程器”的设备通常会将程序代码导入目标PIC。 Microchip当前销售的大多数PIC具有ICSP(在线串行编程)和/或LVP(低电压编程)功能,从而允许在目标电路中放置PIC时对其进行编程。
Microchip提供了MPLAB和PICKit系列的编程器/调试器。 MPLAB ICD4和MPLAB REAL ICE是当前用于专业工程的编程器和调试器,而PICKit 3是面向爱好者和学生的低成本编程器/调试器系列。
引导加载 许多基于高端闪存的PIC也可以自编程(写到自己的程序存储器中),这一过程称为引导加载。演示板可通过工厂编程的小型引导加载程序提供,该引导加载程序可用于通过RS-232或USB等接口加载用户程序,从而无需编程器设备。
或者,有可用的引导加载程序固件,用户可以使用ICSP加载到PIC上。将引导加载程序编程到PIC之后,用户可以结合专用计算机软件使用RS232或USB对设备进行重新编程。
引导加载程序相对于ICSP的优势在于更快的编程速度,编程后立即执行程序以及使用同一根电缆进行调试和编程的能力。
第三方 PIC单片机的编程器很多,从极其简单的设计(依赖ICSP允许直接从主机下载代码)到可以在多个电源电压下验证器件的智能编程器,不一而足。这些复杂的编程器中的许多编程器本身都使用预编程的PIC将编程命令发送到要编程的PIC。需要编程器的智能类型来编程不支持在线编程的早期PIC模型(大多数是EPROM类型)。
第三方程序员的范围从构建自己的计划到自组装套件和经过全面测试的即用型单元。有些是简单的设计,需要PC进行低级编程信号(这些通常连接到串行或并行端口,并由一些简单的组件组成),而另一些则内置了编程逻辑(这些通常使用串行)。 USB或USB连接,通常速度更快,并且通常使用PIC本身进行控制)。
调试
在线调试 所有较新的PIC器件均具有内置于CPU内核中的ICD(在线调试)接口,该接口允许与MPLAB IDE一起对程序进行交互式调试。 MPLAB ICD和MPLAB REAL ICE调试器可以使用ICSP接口与此接口进行通信。
但是,此调试系统需要付出一定的代价,即断点数量有限(旧设备上为1,新设备上为3),某些I / O丢失(某些具有专用调试线路的表面贴装44引脚PIC除外)以及某些片上功能的丧失。
由于成本或缺少引脚,某些设备不具有片上调试支持。一些较大的芯片也没有调试模块。要调试这些设备,需要安装在子板上的专用ICD版本的芯片,该芯片提供专用端口。通过使用子板上的可选跳线,这些调试芯片中的某些能够作为一种以上的芯片工作。这允许不具有所有片上外围设备的大致相同的架构被单个-ICD芯片取代。例如:12F690-ICD将用作六个不同部分之一,每个部分都具有五个,片上外围设备中的一个,部分或全部。
在线仿真器 Microchip提供了三种完整的在线仿真器: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。 在板载硬件的限制下,这为微控制器带来了一个熟悉的类Unix操作系统,包括板载开发环境。