差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
pic [2021/02/23 21:39] gongyusu [PIC17] |
pic [2021/02/23 22:46] (当前版本) gongyusu [硬件功能] |
||
---|---|---|---|
行 1: | 行 1: | ||
## PIC微控制器 | ## PIC微控制器 | ||
- | PIC(通常发音为“ pick”)是由Microchip Technology制造的微控制器系列,其衍生自最初由通用仪器微电子部开发的PIC1650 [1] [2] [3]。 PIC最初指的是外围接口控制器,[4],目前已扩展为可编程智能计算机。[5]该家族的第一批成员于1976年面世。到2013年,该公司已售出了超过120亿个单个零件,用于各种嵌入式系统。 | + | PIC是由Microchip Technology制造的微控制器系列,其衍生自最初由"通用仪器"微电子部开发的PIC1650。 PIC最初指的是外围接口控制器,目前已扩展为可编程智能计算机。该家族的第一批成员于1976年面世。到2013年,该公司已售出了超过120亿个单个零件,用于各种嵌入式系统。 |
- | PIC的早期模型具有用于程序存储的只读存储器(ROM)或现场可编程EPROM,有些具有擦除存储器的功能。当前所有的型号都使用闪存来存储程序,而较新的型号则允许PIC重新编程。程序存储器和数据存储器分开。数据存储器为8位,16位,在最新型号中为32位宽。程序指令的位计数因PIC系列而异,并且可以是12位,14位,16位或24位长。指令集也因型号而异,更强大的芯片增加了用于数字信号处理功能的指令。 | + | {{ :pic_microcontrollers.jpg?800 |}}<WRAP centeralign>PIC微控制器</WRAP> |
- | PIC器件的硬件功能范围从6引脚SMD,8引脚DIP芯片到144引脚SMD芯片,带离散I / O引脚,ADC和DAC模块以及诸如UART,I2C,CAN和甚至USB。许多类型都存在低功耗和高速变化。 | + | PIC的早期的型号具有用于程序存储的只读存储器(ROM)或现场可编程EPROM,有些具有擦除存储器的功能。当前所有的型号都使用闪存来存储程序,而较新的型号则允许PIC重新编程,程序存储器和数据存储器分开,数据存储器为8位、16位,在最新型号中为32位宽。程序指令的位计数因PIC系列而异,并且可以是12位、14位、16位或24位长。指令集也因型号而异,更强大的芯片增加了用于数字信号处理功能的指令。 |
- | 制造商提供用于开发的计算机软件,称为MPLAB X,汇编器和C / C ++编译器,以及MPLAB和PICKit系列下的编程器/调试器硬件。也可以使用第三方和一些开源工具。有些零件具有在线编程功能;既有低成本的开发程序员,也有高产量的程序员。 | + | PIC器件的硬件功能范围从6引脚SMD、8引脚DIP芯片到144引脚SMD芯片,带分立I/O引脚、ADC和DAC模块以及诸如UART、I2C、CAN和甚至USB。许多类型都有低功耗和高速版本。 |
- | PIC器件因其低成本,广泛可用性,庞大的用户群,广泛的应用笔记集,低成本或免费开发工具的可用性,串行编程以及可重新编程的闪存功能而在工业开发人员和业余爱好者中广受欢迎。 | + | 制造商提供用于开发的计算机软件,称为MPLAB X,汇编器和C/C ++编译器,以及MPLAB和PICKit系列下的编程器/调试器硬件。也可以使用第三方和一些开源工具。有些器件具有在线编程功能。 |
- | ### 原始概念 | + | PIC器件因其低成本、广泛可用性、庞大的用户群、广泛的应用笔记集、低成本或免费开发工具的可用性、串行编程以及可重新编程的闪存功能而在工业开发人员和业余爱好者中广受欢迎。 |
+ | |||
+ | ### 历史 | ||
+ | |||
+ | #### 原始概念 | ||
最初的PIC打算与通用仪器的新型CP1600 16位中央处理器(CPU)一起使用。 CP1600在当时是功能强大的处理器,它以微型计算机封装实现了大多数PDP-11微型计算机的指令集体系结构。 | 最初的PIC打算与通用仪器的新型CP1600 16位中央处理器(CPU)一起使用。 CP1600在当时是功能强大的处理器,它以微型计算机封装实现了大多数PDP-11微型计算机的指令集体系结构。 | ||
- | 虽然大多数人认为CP1600是一个好的CPU,但它有一个严重的问题。为了减少其物理DIP封装的引脚数,地址总线和数据总线共享引脚。对于具有单独I / O通道的CPU(例如Intel 8008),这不是问题,但是1600也使用了PDP-11的内存映射输入/输出概念。这意味着与设备通信需要设备在一个机器周期内监视正在访问的关键存储器位置,然后在下一个机器周期读取数据。当总线在地址和数据模式之间交替时,这会使机器上的I / O变慢,并且由于设备必须在多个周期内锁存输入,因此实现起来的成本更高。在相应的设备驱动程序的CPU端重复了所有这些复杂性。 | + | 虽然大多数人认为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的这一缺点,于1975年开发了8位PIC。该想法是,系统将使一个或多个低成本PIC执行与设备的实际I/O,然后发送该数据到CPU。 PIC使用存储在ROM中的简单微代码来执行其任务,尽管当时未使用术语RISC,但它与RISC设计具有一些共同的特征。 |
- | ### 1600以后 | + | #### 1600以后 |
- | 1985年,通用仪器公司出售了其微电子部门,新的所有者取消了几乎所有当时已过时的所有产品。但是,PIC已通过内部EPROM进行了升级,以生产可编程通道控制器。同时,英国的Plessey使用相同的指令集发布了基于GI设计的NMOS处理器,编号为PIC1650和PIC1655,这些指令集可以是用户掩码可编程的,也可以是为自动拨号器和键盘接口预编程的版本。 [6] | + | 1985年,通用仪器公司出售了其微电子部门,新的所有者取消了几乎所有当时已过时的所有产品。但是,PIC已通过内部EPROM进行了升级,以生产可编程通道控制器。同时,英国的Plessey使用相同的指令集发布了基于GI设计的NMOS处理器,编号为PIC1650和PIC1655,这些指令集可以是用户掩码可编程的,也可以是为自动拨号器和键盘接口预编程的版本。 |
- | 1998年,Microchip推出了PIC 16F84,这是其成功的串行可编程PIC16C84的闪存可编程和可擦除版本。 Microchip于2001年推出了更多的Flash可编程器件,并于2002年全面投入生产。[2] | + | 1998年,Microchip推出了PIC 16F84,这是其成功的串行可编程PIC16C84的闪存可编程和可擦除版本。 Microchip于2001年推出了更多的Flash可编程器件,并于2002年全面投入生产。 |
如今,各种各样的PIC可与各种板载外设(串行通信模块,UART,电机控制内核等)一起使用,并且程序存储器的大小从256字到64K字不等(“字”是一种汇编语言指令) ,长度从8位到16位不等,具体取决于特定的PIC微型系列)。 | 如今,各种各样的PIC可与各种板载外设(串行通信模块,UART,电机控制内核等)一起使用,并且程序存储器的大小从256字到64K字不等(“字”是一种汇编语言指令) ,长度从8位到16位不等,具体取决于特定的PIC微型系列)。 | ||
- | PIC和PICmicro现在是Microchip Technology的注册商标。人们普遍认为PIC代表外设接口控制器,尽管通用仪器公司最初的PIC1640和PIC1650器件的原始缩写是“可编程接口控制器”。[4]该缩写词很快被“可编程智能计算机”所取代。[5] | + | PIC和PICmicro现在是Microchip Technology的注册商标。人们普遍认为PIC代表外设接口控制器,尽管通用仪器公司最初的PIC1640和PIC1650器件的原始缩写是“可编程接口控制器”。该缩写词很快被“可编程智能计算机”所取代。 |
- | 1993年推出的Microchip 16C84(PIC16x84)是第一个[7]具有片上EEPROM存储器的Microchip CPU。 | + | 1993年推出的Microchip 16C84(PIC16x84)是第一个具有片上EEPROM存储器的Microchip CPU。 |
到2013年,Microchip每年出货的PIC微控制器超过10亿。 | 到2013年,Microchip每年出货的PIC微控制器超过10亿。 | ||
行 37: | 行 41: | ||
**PIC10和PIC12** | **PIC10和PIC12** | ||
+ | |||
这些器件具有12位宽的代码存储器、32字节的寄存器文件和微小的两级深度调用堆栈。它们由PIC10系列以及某些PIC12和PIC16器件代表。基线器件提供6引脚至40引脚封装。 | 这些器件具有12位宽的代码存储器、32字节的寄存器文件和微小的两级深度调用堆栈。它们由PIC10系列以及某些PIC12和PIC16器件代表。基线器件提供6引脚至40引脚封装。 | ||
行 60: | 行 65: | ||
**PIC17** | **PIC17** | ||
+ | |||
17系列从未流行开来,并已被PIC18架构所取代。不建议将17系列用于新设计,并且可用性可能仅限于用户。 | 17系列从未流行开来,并已被PIC18架构所取代。不建议将17系列用于新设计,并且可用性可能仅限于用户。 | ||
行 74: | 行 80: | ||
一个明显的限制是RAM空间被限制为256字节(26个字节的特殊功能寄存器和232字节的通用RAM),而在支持更多功能的模型中,组切换很麻烦。 | 一个明显的限制是RAM空间被限制为256字节(26个字节的特殊功能寄存器和232字节的通用RAM),而在支持更多功能的模型中,组切换很麻烦。 | ||
- | ### PIC18 | + | **PIC18** |
关于该系列单片机的更多信息:PIC指令列表§PIC18高端核心器件(16位) | 关于该系列单片机的更多信息:PIC指令列表§PIC18高端核心器件(16位) | ||
- | 在2000年,Microchip推出了PIC18架构。与17系列不同,它已被证明非常受欢迎,目前在制造中具有大量的设备变体。与较早的设备相比,这些设备通常不是在汇编中进行编程的,相反,C已成为主要的开发语言。[10] | + | 在2000年,Microchip推出了PIC18架构。与17系列不同,它已被证明非常受欢迎,目前在制造中具有大量的设备变体。与较早的设备相比,这些设备通常不是在汇编中进行编程的,相反,C已成为主要的开发语言。 |
18系列继承了17系列的大多数功能和说明,同时增加了许多重要的新功能: | 18系列继承了17系列的大多数功能和说明,同时增加了许多重要的新功能: | ||
行 98: | 行 105: | ||
PIC18器件仍在开发中(2017),并配备了CIP(独立于内核的外设) | PIC18器件仍在开发中(2017),并配备了CIP(独立于内核的外设) | ||
- | ### PIC24和dsPIC | + | **PIC24和dsPIC** |
关于这些单片机系列的更多信息:PIC指令列表§PIC24和dsPIC 16位单片机 | 关于这些单片机系列的更多信息:PIC指令列表§PIC24和dsPIC 16位单片机 | ||
Microchip于2001年推出了dsPIC系列芯片[11],该芯片于2004年底开始批量生产。它们是Microchip第一个固有的16位微控制器。 PIC24器件被设计为通用单片机。 dsPIC器件还包括数字信号处理功能。 | Microchip于2001年推出了dsPIC系列芯片[11],该芯片于2004年底开始批量生产。它们是Microchip第一个固有的16位微控制器。 PIC24器件被设计为通用单片机。 dsPIC器件还包括数字信号处理功能。 | ||
行 140: | 行 148: | ||
- | ### 基于PIC32M MIPS的产品线 | + | **基于PIC32M MIPS的产品线** |
PIC32MX | 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位微控制器。 | 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位微控制器。 | ||
行 154: | 行 163: | ||
完整的JTAG和2线编程和调试 | 完整的JTAG和2线编程和调试 | ||
实时追踪 | 实时追踪 | ||
+ | |||
PIC32MZ | PIC32MZ | ||
- | 2013年11月,Microchip推出了基于MIPS M14K内核的PIC32MZ系列单片机。 PIC32MZ系列包括:[15] [16] | ||
- | 核心速度252 MHz,415 DMIPS | + | 2013年11月,Microchip推出了基于MIPS M14K内核的PIC32MZ系列单片机。 PIC32MZ系列包括 |
- | 高达2 MB闪存和512KB RAM | + | |
- | 新的外围设备,包括高速USB,加密引擎和SQI | + | * 核心速度252 MHz,415 DMIPS |
- | 2015年,Microchip使用更新的MIPS M5150 Warrior M级处理器发布了PIC32MZ EF系列。[17] [18] | + | * 高达2 MB闪存和512KB RAM |
+ | * 新的外围设备,包括高速USB,加密引擎和SQI | ||
+ | |||
+ | 2015年,Microchip使用更新的MIPS M5150 Warrior M级处理器发布了PIC32MZ EF系列。 | ||
- | 2017年,Microchip推出了PIC32MZ DA系列,具有集成的图形控制器,图形处理器和32MB DDR2 DRAM。[19] [20] | + | 2017年,Microchip推出了PIC32MZ DA系列,具有集成的图形控制器,图形处理器和32MB DDR2 DRAM。 |
PIC32MM | PIC32MM | ||
- | 2016年6月,Microchip推出了专用于低功耗和低成本应用的PIC32MM系列。[21] PIC32MM具有独立于内核的外设,低至500 nA的睡眠模式以及4 x 4 mm封装。[22] PIC32MM单片机使用32位MIPS32处理器MIPS Technologies M4K。它们旨在实现极低的功耗,并限制在25 MHz。它们的主要优势是支持MIPS的16位指令,使程序大小更紧凑(约40%) | + | 2016年6月,Microchip推出了专用于低功耗和低成本应用的PIC32MM系列。PIC32MM具有独立于内核的外设,低至500 nA的睡眠模式以及4 x 4 mm封装。PIC32MM单片机使用32位MIPS32处理器MIPS Technologies M4K。它们旨在实现极低的功耗,并限制在25MHz。它们的主要优势是支持MIPS的16位指令,使程序大小更紧凑(约40%) |
PIC32MK | PIC32MK | ||
- | Microchip在2017年推出了PIC32MK系列,专门用于电机控制,工业控制,工业物联网(IIoT)和多通道CAN应用。[23] | + | Microchip在2017年推出了PIC32MK系列,专门用于电机控制,工业控制,工业物联网(IIoT)和多通道CAN应用。 |
### 核心架构 | ### 核心架构 | ||
行 248: | 行 260: | ||
硬件调用堆栈不可寻址,因此无法实现抢占式任务切换 | 硬件调用堆栈不可寻址,因此无法实现抢占式任务切换 | ||
软件实现的堆栈效率不高,因此很难生成可重入的代码并支持局部变量 | 软件实现的堆栈效率不高,因此很难生成可重入的代码并支持局部变量 | ||
- | 使用分页程序存储器时,有两种页面大小值得担心:一种用于CALL和GOTO,另一种用于计算的GOTO(通常用于表查找)。例如,在PIC16上,CALL和GOTO具有11位寻址,因此页面大小为2048个指令字。对于添加到PCL的已计算GOTO,页面大小为256个指令字。在这两种情况下,高位地址位均由PCLATH寄存器提供。每次控件在页面之间转移时,都必须更改此寄存器。 PCLATH也必须由任何中断处理程序保留。[27] | + | 使用分页程序存储器时,有两种页面大小值得担心:一种用于CALL和GOTO,另一种用于计算的GOTO(通常用于表查找)。例如,在PIC16上,CALL和GOTO具有11位寻址,因此页面大小为2048个指令字。对于添加到PCL的已计算GOTO,页面大小为256个指令字。在这两种情况下,高位地址位均由PCLATH寄存器提供。每次控件在页面之间转移时,都必须更改此寄存器。 PCLATH也必须由任何中断处理程序保留。 |
编译器开发 | 编译器开发 | ||
尽管有几种商用编译器可用,但Microchip在2008年针对18F 24F和30 / 33F处理器系列发布了自己的C编译器C18和C30。 | 尽管有几种商用编译器可用,但Microchip在2008年针对18F 24F和30 / 33F处理器系列发布了自己的C编译器C18和C30。 | ||
- | 从2013年起,Microchip提供了其XC系列编译器,可与MPLAB X一起使用。Microchip最终将淘汰其较早的编译器,例如C18,并建议将其XC系列编译器用于新设计。[28] | + | 从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汇编语言代码的RISC指令集可能会使整体流程难以理解。明智地使用简单宏可以提高PIC汇编语言的可读性。例如,原始的Parallax PIC汇编器(“ SPASM”)具有宏,这些宏隐藏W,并使PIC看起来像一个两地址的机器。它具有宏指令,例如mov b,a(将数据从地址a移动到地址b)和add b,a(将数据从地址a添加到地址b中的数据)。它还通过提供三操作数分支宏指令(例如cjne a,b,dest)(将a与b进行比较,如果不相等则跳转到dest)来隐藏跳过指令。 | ||
行 260: | 行 272: | ||
PIC器件通常具有以下特点: | PIC器件通常具有以下特点: | ||
- | 闪存(程序存储器,使用MPLAB器件编程) | + | * 闪存(程序存储器,使用MPLAB器件编程) |
- | SRAM(数据存储器) | + | * SRAM(数据存储器) |
- | EEPROM存储器(在运行时可编程) | + | * EEPROM存储器(在运行时可编程) |
- | 睡眠模式(省电) | + | * 睡眠模式(省电) |
- | 看门狗定时器 | + | * 看门狗定时器 |
- | 各种晶体或RC振荡器配置,或外部时钟 | + | * 各种晶体或RC振荡器配置,或外部时钟 |
- | 变体 | + | |
+ | **变体** | ||
在一系列产品中,根据芯片所具有的硬件资源,仍然会有许多设备变型: | 在一系列产品中,根据芯片所具有的硬件资源,仍然会有许多设备变型: | ||
+ | * 通用I / O引脚 | ||
+ | * 内部时钟振荡器 | ||
+ | * 8/16/32位定时器 | ||
+ | * 同步/异步串行接口USART | ||
+ | * 用于I²C和SPI通信的MSSP外围设备 | ||
+ | * 捕获/比较和PWM模块 | ||
+ | * 模数转换器(最高〜1.0 Msps) | ||
+ | * USB,以太网,CAN接口支持 | ||
+ | * 外部存储器接口 | ||
+ | * 集成模拟RF前端(PIC16F639和rfPIC)。 | ||
+ | * KEELOQ滚动码加密外设(编码/解码) | ||
+ | * 还有很多 | ||
- | 通用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擦除窗口版本。 | 具有EPROM存储的第一代PIC几乎完全被具有闪存的芯片所取代。同样,PIC1650的原始12位指令集及其直接后代已被14位和16位指令集取代。 Microchip仍在销售其一些基于EPROM的PIC的OTP(一次性可编程)和窗口化(可紫外线擦除)版本,以用于传统支持或批量订购。 Microchip网站列出了不可作为OTP进行电擦除的PIC。可以订购这些芯片的UV擦除窗口版本。 | ||
行 287: | 行 300: | ||
PICMicro零件号中的F通常表示PICmicro使用闪存,并且可以电子方式擦除。相反,C通常意味着只能通过将裸片暴露在紫外线下才能将其擦除(这仅在使用开窗封装样式的情况下才可行)。使用EEPROM的PIC16C84是该规则的一个例外,因此可以电擦除。 | PICMicro零件号中的F通常表示PICmicro使用闪存,并且可以电子方式擦除。相反,C通常意味着只能通过将裸片暴露在紫外线下才能将其擦除(这仅在使用开窗封装样式的情况下才可行)。使用EEPROM的PIC16C84是该规则的一个例外,因此可以电擦除。 | ||
- | 名称中的L表示该部件将在较低的电压下运行,通常会施加频率限制。[29]在3-3.6伏的严格范围内,专门为低压操作而设计的零件在零件号上标有J。这些部件还具有独特的I / O容限,因为它们可接受高达5 V的输入。 | + | 名称中的L表示该部件将在较低的电压下运行,通常会施加频率限制。在3-3.6伏的严格范围内,专门为低压操作而设计的零件在零件号上标有J。这些部件还具有独特的I/O容限,因为它们可接受高达5V的输入。 |
### 开发工具 | ### 开发工具 |