1.3 PIC16F87X单片机的硬件结构
PIC16F87X是微芯公司于1998年底推出的一款特色明显的MCU子系列单片机,其突出优点是内部集成了一个在线调试器(In-Circuit Debugger),可以实现在线调试和在线编程,这是MCS-51和MCS-96系列单片机所不具备的。另外,微芯公司还专为PIC16F87X系列单片机研制了廉价的开发工具MPLAB-ICD,用户使用低成本即可搭建一个PIC微处理器的开发平台。
PIC16F87X子系列目前共有7款不同型号的单片机,分别是PIC16F870、PIC16F871、PIC16F872、PIC16F873、PIC16F874、PIC16F876和PIC16F877。这7款单片机中,PIC16F877功能最全,它囊括了其他几款单片机的所有功能。其他几款单片机都是在PIC16F877功能的基础上通过部分精简得来的。
1.3.1 PIC16F87X的主要特色
下面分别从PIC16F87X芯片内核的特色和外围特色两个方面对PIC16F87X进行介绍。
1.PIC16F87X内核的特色
主要特色如下:
● 高性能的RISC结构CPU。
● 精简指令集,仅35条单字节指令。
● 除地址分支跳转指令为双周期指令外,其余指令均为单周期指令。
● 执行速度:DC-20MHz时钟输入,DC-200ns指令周期。
● 最大有8K×14字节(对于PIC16F873/4/6/7)/2K×14字节(对于PIC16F870/1/2)的FLASH程序存储器。
● 最大有368×8字节(对于PIC16F873/4/6/7)/128×8字节(对于PIC16F870/1/2)的RAM。
● E2PROM数据存储器。
● 具有多达14种中断源。
● 8级硬件堆栈。
● 4种寻址方式:立即寻址、直接寻址、间接寻址及寄存器间接寻址。
● 上电复位。
● 具有上电延时器,保证VDD稳定建立。
● 具有振荡定时器,保证振荡稳定建立。
● 自带振荡式看门狗,不需要任何外部器件。
● 可编程代码保护。
● 休眠模式。
● 具有下面4种振荡方式可选:
➢ RC:阻容振荡。
➢ XT:标准晶体/陶瓷振荡。
➢ HS:高速晶体/陶瓷振荡。
➢ LP:低功耗振荡。
● 低功耗、高速CMOS技术。
● 全静态设计。
● 在线串行编程技术ICSP(In-Circuit Serial Programming)。
● 在线调试功能。
● 宽范围操作电压:2.0~5.5V。
● I/O端口驱动电流高达25mA。
● 宽工作温度范围,具体为:
➢ 商业级:0℃~70℃。
➢ 工业级:-40℃~85℃。
➢ 军用级:-40℃~125℃。
● 低功耗设计:
➢ 在5V工作电压、4MHz时钟时的典型工作电流小于2mA。
➢ 在3V作电压、32kHz时钟时的典型工作电流小于20μA。
➢ 典型待机电流小于1μA。
2.PIC16F87X微控制器外围特色
● Timer0:8位定时器/计数器,带8位预分频器。
● Timerl:16位定时器/计数器,带预分频器。可在睡眠模式中通过外部时钟来计数。
● Timer2:8位定时器/计数器,带有8位周期寄存器、预分频器和后分频器。
● 具有捕捉(Capture)、比较(Compare)和PWM模式。
● 多通道10位A/D转换器。
● 同步串行口SSP:SPI(主模式)和I2C(主从模式)。
● 通用异步串行口USART。
● 8位宽并行从口,具有外部读、写和片选信号。
● 具有掉电复位检测电路。当VDD低于VBOR一段时间后,芯片自动进入复位状态,所有I/O端口都变成高阻状态。当VDD恢复上升到标准值以上后,芯片恢复正常运行。
1.3.2 PIC16F87X的内部结构
PIC16F87X系列微控制器的内部结构如图1-4和图1-5所示,整个控制器可分为核心区域和外围模块两个部分。其中,核心区域各组成部分是每个微控制器所必不可少的,由其完成数据的运算、指令译码、寄存器的寻址等核心功能;外围模块主要是单片机用于同外部设备“打交道”的,可以根据不同的功能需求进行自由裁减。
图1-4 PIC16F873/876内部结构框图
图1-5 PIC16F874/877内部结构框图
1.3.2.1 PIC16F87X单片机的核心模块
核心区域包含的主要部件及其功能介绍如下:
1.运算器(ALU)和工作寄存器(Wreg)
运算器(ALU)是一个通用算术、逻辑运算单元,使用它可以对工作寄存器(Wreg)和任何通用寄存器中的两个数进行算术运算(如加、减、乘、除等)和逻辑运算(如与、或、异或等)。PIC16F87X是8位单片机,ALU的字长是8位。在有两个操作数的指令中,典型的情况是:一个操作数在工作寄存器中,而另一个操作数是在通用寄存器中(或者是一个立即数)。在只有一个操作数的情况下,该数要么是在工作寄存器中,要么是在通用寄存器中。需要注意的是,工作寄存器是一个专用于ALU操作的寄存器,它是不可寻址的。根据所执行的指令,ALU还可能会影响结构框图中状态寄存器(STATUS)的进位标志(C)和全零标志(Z)等。
2.程序存储器(Program Memory)和程序计数器(Program Counter)
单片机内存放程序指令的存储器称为程序存储器。PIC16F87X的所有指令字长为14位,所以程序存储器的各存储单元是14位宽。一个存储单元存放一条指令。PIC16F87X的程序存储器的存储容量为2K~8K不等,这些程序存储器都是由闪速存储器(FLASH)构成的,程序存储器由程序计数器PC寻址。PIC16F87X的程序计数器为13位宽,可寻址8K的程序存储器空间。
3.状态寄存器(STATUS)
状态寄存器又称标志寄存器,用以反映某一逻辑运算或操作结果的特征,例如是否产生进位或借位以及结果是否为0等,它常常配合跳转指令来使用。
4.数据存储器(RAM File Registers)
数据存储器包括通用寄存器和特殊功能寄存器两种,用于存储CPU运算过程中产生的中间数据,既可以读出也可以写入。除此之外,PIC单片机还提供了功能灵活的各种面向位的操作方法,可直接对数据存储器进行位测试、置位及移位等操作。
5.间接寻址寄存器INDF和FSR
间接寻址寄存器INDF和FSR位于PIC数据存储器的最顶端,地址00单元(地址码最小)的间接寻址寄存器INDF是一个空的寄存器。它只有地址码,在物理上不是一个真正的寄存器。它的功能常常与寄存器FSR(又称选择寄存器)配合工作,实现间接寻址目的。
6.复用器(MUX)
复用器包括数据复用器和地址复用器,数据复用器主要对指令码和数据存储器中的数据进行选择,地址复用器主要对指令码和FSR中的地址进行选择(即一个通路选择器)。
7.堆栈(Stack)
当发生程序中断或跳转等操作时,需要对当前主程序断点的地址进行保存,以便执行完其他程序后返回中断点(即现场保护)。此时开辟一部分先进先出(FIFO)的存储区来存储断点地址,这一存储区就称为堆栈。
除以上7个基本部件外,还有上电延时(Power-Up Timer)、起振延时(Oscillator Start-Up Timer)、上电复位(Power-On Reset)、看门狗(Watchdog Timer)、欠压复位(即掉电锁存复位)(Brown-Out Reset)、在线调试(In-Circuit Debugger)、低压编程(Low-Voltage Programming)等附加电路,它们主要起到电路保护、方便调试、优化运行等作用,以提高运行的可靠性和可操作性。所有的部件通过内部数据总线或程序总线相连,其详细功能在此不再赘述。
1.3.2.2 PIC16F87X单片机的外围模块
PIC16F87X的内部可集成种类丰富的外围模块,开发过程中充分地节省了外围电路。各外围电路的功能和使用方法比较复杂,这里只是列出各模块的基本功能,以便使读者对其有一个整体的认识。
1.基本I/O端口
PIC16F873/876有RA、RB、RC三个基本输入/输出端口,PIC16F874/877有RA、RB、RC、RD、RE五个基本输入/输出端口,其中RB、RC、RD为8位宽,RA为6位宽,RE为3位宽,共33个引脚。输入/输出方式可编程,部分引脚同其他功能复用。
2.定时、计数器
单片机内集成了TMR0、TMR1、TMR2三个可编程定时器。其中TMR0为8位宽,TMR1、TMR2为16位宽,所有的定时器还可作为计数器使用。除此之外,TMR1与CCP模块配合使用可实现捕捉和比较功能,TMR2和CCP模块配合使用可实现脉宽调制输出功能。
3.E2PROM数据存储器
即可电擦除存储器,容量为256字节,其存储的数据掉电之后不会丢失,因此可以用来备份数据,但是其擦写次数是有限制的,不能无限次使用。
4.A/D转换器
A/D转换器具有5个(PIC16F873/876)或8个(PIC16F874/877)10位分辨率的模/数转换通道,用于对外部的模拟量进行采样。
5.捕捉、比较、脉宽调制CCP(Capture Compare PWM)
捕捉功能可捕捉外部输入脉冲的上升沿或下降沿,产生相应中断,从而可用于测量外部信号的周期、频率、脉宽等;比较功能用于从引脚上输出不同宽度的矩形脉冲和延时信号;脉宽调制功能将产生占空比可调的周期性方波信号,可用来实现直流电机的调速、D/A转换以及步进电机的控制等。
6.同步串行端SSP(Synchronous Serial Port)
具有SPI和I2C两种工作模式,主要用于同其他设备进行数字通信。
7.同步、异步收发器(USART)
用于两线制串行通信,可定义为半双工同步方式和全双工异步方式。
8.并行从动端口PSP
用于同其他具有开放总线的微处理器进行高速的数据传输,其数据传输控制权由通信的另一方掌握,故称为从动端口。
1.3.3 PIC16F87X的引脚功能
PIC16F87X系列单片机采用PDIP、SOIC、QFP或PLCC四种封装形式,其外形和引脚如图1-6和图1-7所示。
图1-6 PIC16F87X单片机封装与引脚图(一)
图1-7 PIC16F87X单片机封装与引脚图(二)
根据引脚功能不同可将引脚分为以下几类。
1.供电引脚
PIC单片机的工作电压为2.0~5.5V,VDD接电源“+”端,VSS接电源“-”端,除了28引脚的封装上只有一个VDD引脚外,其他芯片上一般都有两个VDD和Vss引脚。
2.振荡器输入/输出引脚
PIC单片机可采用3种不同的振荡器方式。第一,采用晶振或陶瓷谐振器,将一晶体或陶瓷谐振器连接到单片机的OSC1/CLKIN和OSC2/CLKOUT引脚上,以建立振荡。第二,除了可以使用已集成在片内的振荡器外,亦可使用由TTL门电路构成的简单振荡器电路,当外接振荡器时,外部振荡信号从OSC1端输入,OSC2端开路。第三,还可采用RC振荡器,该方式适合于对时间精度要求不高的低成本应用。RC振荡频率随着电源电压(VDD)、RC值及工作环境温度的变化而变化,同时由于工艺参数的差异,对不同芯片其振荡器频率将不同。
3.硬件复位引脚
PIC单片机除了可以实现软件复位之外,还可以通过MCLR引脚接收外部电路的复位信号产生硬件复位,此时低电平有效。另外,在编程时,其还可以用作编程电压输入端。
4.I/O及功能引脚
PIC16F873/876单片机共3组22个端口,PICl6F874/877单片机共5组33个端口,所有端口都可作为双向的输入输出口,且具有锁存功能。此外,其中大部分端口还具有第二和第三功能,与其I/O功能复用端口。这些第二和第三功能包括AD转换、捕捉、比较、脉宽调制输出和串口通信等,其具体功能如表1-4和表1-5所示。
表1-4 PIC16F873/876引脚功能
注:I:输入;O:输出;P:电源;ST:史密斯触发器输入;—:未连接。
表1-5 PIC16F874/877引脚功能
续表
注:I:输入;O:输出;P:电源;ST:史密斯触发器输入;—:未连接。