×
单片机 > 单片机程序设计 > 详情

PIC16F877A单片机的基本功能模块

发布时间:2020-06-06 发布时间:
|

  PIC16F877A单片机是MicroChip公司的中档产品,它采用14位的RISC指令系统,内部集成了A/D转换器、EEPROM、模拟比较器、带比较和捕捉功能的定时器/计数器、PWM输出,异步串行通信( USART)电路等。

  1).程序存储器和堆栈PIC16F877A单片机内部具有8K×14位的Flash程序存储器,程序存储器具有13位宽的程序计数器PCo程序存储器的地址范围为OOOOH—1FFFH。由程序计数器提供13条地址线进行单元选择,每个单元宽14位(即PIC16F877A的指令字节宽度为14位),能够存放一条PIC单片机系统指令。


  在系统上电或其他复位情况下,程序计数器均从OOOOH地址单元开始工作。如果遇到调用子程序或系统发生事件中断时,将把当前程序断点处的地址送入8级×14位的堆栈区域进行保护。堆栈是一个独立的存储区域,在调用的子程序或中断服务程序执行完后,再恢复断点地址。通过14位程序总线,取出对应程序指令的机器码,送入指令寄存器,将组成的操作码和操作数进行有效分离。如果操作数为地址,则进入地址复用器;如果操作数为数据,则进入数据复用器。而操作码将在指令译码和控制单元中转化为相应的功能操作。

  PIC的多数指令均是顺序执行,即使条件跳转也是隔行间接跳转。具有大范围转移功能的指令只有两条:无条件转移GOTO语句和调用子程序CALL语句。但它们受到2KB范围的约束。所以必须将整个程序存储器以2KB为单位进行分页。如下图所示,8KB程序存储器共分作4页,分别称为页0、页1、页2和页3。

  PIC16F877A单片机的上电复位地址是OOOOH,中断入口地址是0004H,中断产生时PC指针会自动指向该地址。在进行中断应用时,特别是涉及多个中断同时打开时,必须要逐个对中断标志位( XXIF)进行判断。编程时,在0000H~0003H单元内要放置一条GOTO跳转指令,跳转到主程序,以避开0004H存储器单元。

  2).数据存储器PIC单片机的数据存储器与传统的MCS-51单片机一样,在配置结构上可分为通用寄存器和特殊功能寄存器两大类。数据存储器的每个存储单元除具备普通存储器功能之外,还能实现移位、置位、复位和位测试等通常只有寄存器才能完成的操作,功能非常强大。PIC16F877A单片机RAM数据存储器与程序存储器一样,在其51 2个地址空间( 000H—1FFH)进行类似区域划分,分为4个体( Bank),从左到右分别记为体0、体1、体2和体3,每个“体”均为128×8位宽的存储单元。特殊功能寄存器安排在低位地址存储单元,通用寄存器在高位地址存储单元。下图是PIC16F877A的寄存器组映射图,对通用寄存器可以直接进行访问,也可以通过寄存器FSR间接访问。

  通过比较可知,程序存储器的4等分区域采用串接方式排列,而数据存储器的4等分区域采用并接方式排列。

  通用寄存器PIC16F877A单片机的通用寄存器扮演了其他单片机中的通用寄存器和片内RAM存储器的双重角色。

  PIC16F877A单片机的通用寄存器主要分布在数据存储器RAM各体的下半部分区域,包括体O和体I区域各有96个单元(20H—7FH和AOH—FFH)及体2和体3区域各有1 12个单元(110H—17FH和190H~1FFH)。在体1、体2和体3的数据存储器RAM体内,分别存在一个映射的地址区域:FOH—FFH、170H—17FH和1FOH—1FFH。这些单元都是虚拟设计,本身的硬件结构并不存在,但它们的地址信息都可以索引(或映射)到体O中的高地址(70H—7FH)处的16个RAM单元。正是基于这样的数据存储器结构,实际的通用寄存器单元数为368个。

  特殊功能寄存器特殊功能寄存器SFR主要分布在数据存储器RAM各体的上半部分区域。PIC16F87X系列单片机的特殊功能寄存器的布局保持了高度一致,目的是便于PIC单片机之间的相互兼容和调换。

  特殊功能寄存器中,有的专门用于控制CPU内核的性能配置,有的专门用于控制各种外围设备模块的操作,因此又可依用途分为两类:一类是与CPU内核相关的寄存器,另一类是与外围模块相关的寄存器。在此我们仅介绍与CPU内核相关的几个常用特殊功能寄存器,其余的则到讲解各种功能部件和外围模块时再介绍。

  (1).状态寄存器STATUS

  状态寄存器的内容用来记录算术逻辑单元ALU的运算状态和算术特征、CPU的特殊运行状态、以及RAM数据存储器的体间选择等信息。状态寄存器与通用寄存器有着本质的区别,例如功能位/TO和/PD只能读;另一些位的状态将取决于运算结果。

  状态寄存器STATAS(地址03H、83H、103H、183H):

  注意:对于借位,极性相反,执行减法指令时,是通过加上第二操作数的补码实现的;对于移位指令( RRF、RLF),是把源寄存器的最高位或最低位放入进位位C实现的。

  (2).选择寄存器OPTION    选择寄存器OPTION是一个可读/写寄存器,它含有用于设置定时器TMRO前分频器/监视定时器WDT后分频器、外部INT中断、TMRO和B口的弱上拉等各种控制位。

  注意:如果需要定时器TMRO得到1:1的前分频值,可以把前分频器分配给监视定时器WDT(即PSA=1)。

 

  Bit2—Bit0( PS2—PSO)前分频器倍率选择位。

  注意:当使用低电压编程LVP并且PORTB引脚弱上拉使能时,TRISB的Bit3清O以关闭RB3的弱上拉才能确保芯片的正确运行。

  (3).间接寻址寄存器INDF和文件选择寄存器FSR

  间接寻址寄存器INDF位于数据存储器各体的最低位单元,即OOH、80H、100H和180Ho它们是互相映射,只具有地址编码,但物理上并不真正存在的虚拟寄存器。INDF必须与文件选择寄存器FSR配合,才能实现间接寻址。当访问INDF地址时,实际是访问以FSR内容为地址所指向的数据存储器RAM单元。PIC系列单片机采用这种独特而巧妙的构想,实现对数据存储器的循环访问,也使PIC指令集系统得到很大的精简。

  在PIC单片机指令系统中,直接寻址和间接寻址是很重要的数据访问方式,主要是借助于状态寄存器相关位的补充实现数据存储器的选择。直接寻址/间接寻址方式示意图如上图所示。在直接寻址中,体选码来自状态寄存器STATUS的RP1和RPO位,体内的单元地址直接来自指令机器码;而在间接寻址中,体选码由STATUS的IRP位和FSR寄存器的Bit7组成,体内单元地址来自FSR的低7位。

  (4).与PC相关的寄存器PCL和PCLATH

  PIC16F877A单片机程序计数器PC指针宽13位,它总是指向CPU下一条指令所在程序存储器单元的地址。为了与其它8位宽的寄存器进行数据交换,将PC指针分成PCL和PCH两部分:低8位PCL有自己的专用地址,数据信息可读写:而高5位PCH没有自己的地址,是根本不存在的,也就不能直接写入,只能借用寄存器PCLATH进行间接装载。PCLATH实现对高5位PCH的装载分两种情况:一种情况是当执行以PCL为目标的写操作指令时,PC的低8位来自算术逻辑单元ALU的运算结果,PC的高5位来自PCLATH的低5位;另一种情况是执行跳转指令GOTO或调用子程序指令CALL时,PC的低11位直接来自指令码所携带的1 1位地址信息,而PC的高2位由PCLATH的第4位、第3位装载。具体如下图所示。

  (5).电源控制寄存器PCON

  电源控制寄存器只有两个有效位,其中一位用来记录和区分是否发生了上电复位和外部引脚/MCLR输入低电平时引起的手动复位或看门狗超时溢出复位;另一位用来记录和鉴别是否发生了掉电复位。

  电源控制寄存器两个有效位的含义如下。

  BitO/BOR:电源上电复位标志,被动参数。

  0:发生了上电复位。当发生上电复位之后,系统自动清零。应该用软件及时将其置位,以便下次利用该位来判断是否发生了电源上电复位:

  1:未发生上电复位。

  Bitl/POR:掉电锁定复位标志,被动参数。

  0:发生了掉电锁定复位。当发生掉电锁定复位之后,系统自动清零。应该用软件及时将其置位,以便下次利用该位来判断是否发生了电源掉电锁定复位:

  1:未发生掉电锁定复位。

  3).EEPROM数据存储器

  PIC16F877A单片机内含一个256×8位EEPROM数据存储器模块。它可在线擦/写,用于掉电时数据的保留。

  对EEPROM数据存储器进行写入操作时,不会影响PIC单片机其他指令的执行。PIC16F877A单片机EEPROM数据存储器的单元空间为256X8位,对应地址的范围是OOH—FFH。其中的数据信息并不直接映射在文件寄存器中,只能通过特殊功能寄存器的间接寻址来访问。

  涉及到EEPROM数据存储器读/写操作的共有4个特殊功能寄存器。

  (1).EEDATA:

  是一个专用数据读/写寄存器,用于临时存放对EEPROM数据存储器进行读/写操作的数据。

  (2). EEADR:

  是一个专用地址读/写寄存器,用于临时存放对EEPROM数据存储器进行读/写访问的单元地址。

  (3).EECON1:

  EEPROM数据存储器读/写控制第一寄存器,主要用于读/写方式的设定和初始化寻址控制。EECON1寄存器中有3位是无效定义。

  其各位的含义如下:

  BitO/RD:EEPROM数据存储器数据读出方式控制位。

  O:不处于EEPROM读操作过程,或在一个读操作周期后由硬件自动清零:    1:启动E'PROM读操作,软件主动置位。

  Bit1/WR:写操作控制位,复合参数。

  0:不处于EEPROM写操作过程,或在一个写操作周朔后由硬件自动清零;

  1:启动EEPROM写操作,软件主动置位。

  Bit2/WREN:EEPROM写使能位。

  0:使能对EEPROM写操作:

 

  1:禁止对EEPROM写操作。

  Bit3/WRERR:EEPROM错误标志位。

  O:已完成EEPROM写操作,硬件自动清零:

  1:未完成EEPROM写操作。

  Bit4~ Bit6:未使用,读出为无效数据。

  Bit7/EEPGD:Flash程序存储器/EEPROM数据存储器选择位。

  O:选择EEPROM数据存储器:

  1:选择Flash程序存储器。

  (4).EECON2:

  EEPROM数据存储器读/写控制第二寄存器,是一个虚拟寄存器,专门用于EEPROM数据存储器写操作的次序控制。

  4).算术逻辑区域

  算术逻辑单元ALU是PIC16F877A单片机中实现算术运算和逻辑运算的核心。与算术逻辑区域相关的特殊功能寄存器主要有以下3种:

  1.工作寄存器W:相当于MCS-51单片机中的“累加器A,是数据传送的桥梁,是最为繁忙的工作单元。在运算前,W可以暂存准备参加运算的一个操作数(称为源操作数),在运算之后,W可以暂存运算的结果(称为目标操作数)。

  2.状态寄存器STATUS:反映最近一次算术逻辑运算结果的状态特征,如是否产生进位、借位、结果是否为零等,共涉及3个标志位(Z、DC和C)。状态寄存器还包括数据寄存器区域的选择信息(IRP、RP1和RPO)。该寄存器在MCS-51单片机中称为程序状态字( PSW)寄存器。

  3.文件选择寄存器FSR;是与INDF完成间接寻址的专用寄存器,用于存放间接地址,即预先将要访问单元的地址存入该寄存器。

  5).输入/输出端口模块

  PIC16F877A单片机共设置有5个输入/输出端口,分别为RA(6位)、RB(8位)、RC(8位)、RD(8位)和RE(3位),合计共有33个引脚。大多数引脚除了基本I/O功能外,还配置有第2甚至第3功能,例如模拟量输入通道、串/并行通信线和MPLAB-ICD2专用控制线等。这些端口引脚在使用中存在着差异,特别是RA(6位)和RE(3位)中所涉及的输入/输出通道,只有当对ADCON1进行设置后才能用作为数字量输入/输出引脚。另外,RB端口的高4位具有特殊的电平变化中断功能,为实时监控提供了很大方便。RC端口拥有各类串行通信功能,包括主控同步串行通信MSSP( SPI、IIC)和通用同步/异步收发器US-ART。

  6).定时器模块

  PIC16F877A单片机配置有3个功能较强的多功能定时器模块:TMRO(8位)、TMR1(16位)和TMR2(8位)。它们都具有不同位宽的可编程定时器,除TMR2以外都可作为计数器使用。每个定时器/计数器模块都配有不同比例的预分频器或后分频器。另外,还有两个重要的专门用途:当设置在同步计数方式下,TMR1可与捕捉/比较/脉宽调制CCP模块配合实现捕捉和比较功能:TMR2可以与捕捉/比较/脉宽调制CCP模块配合实现脉宽调制输出功能。

  7).复位功能模块

  (1).上电复位:当系统芯片加电后,电源电压VDD会有一个逐渐上升的过程,当达到1.5~,I.8V后,上电复位电路将自动产生一个复位脉冲,使单片机复位。

  (2).欠压复位:当VDD掉电跌落到VBOR(大约4V)的时间大于TBOR(大约100微秒)时,如果欠压复位功能处于使能方式,将自动产生一个复位信号并使芯片保持在复位状态;而此时如果VDD掉电跌落到VBOR以下的时间小于TBOR,则系统就不会产生复位。直到VDD恢复到正常范围,上电延时电路再提供一个固定的72毫秒延时,才使CPU从复位状态返回到原正常运行状态。

  另外,PIC16F877A还带有两种特殊的延时电路:上电延时和起振延时电路。在芯片加电时,上电延时定时器PWRT提供一个固定的72毫秒正常上电延时。上电延时电路采用RC振荡器方式工作。当PWRT处于延时过程时,芯片就能一直保持在复位状态,以确保电源电压在这个固定延时内达到合适的芯片工作电压;在上电延时电路提供一个72ms延时后,起振定时器OST将提供1 024个振荡周期的延迟时间,以保证晶体或陶瓷谐振器能够有合适的时间起振并产生稳定的时序波形。

  (3).看门狗复位:PIC16F877A单片机嵌入了一个具有较强功能的看门狗定时器WDT,能够有效防止因环境干扰而引起系统程序“跑飞”。WDT的定时/计数脉冲是由芯片内专用的RC振荡器产生的。它的工作既不需要任何外部器件,也与单片机的时钟电路无关。看门狗的基本定时为18mS,我们可以在18mS基本定时的基础上加入1:1—1:128的预分频比例,从而达到18—2304毫秒的定时。

  (4).人工复位:无论单片机在正常运行还是处在睡眠状态,只要在复位端/MCLR人工加入低电平,单片机就会立即复位。

  4.PIC16F877单片机的专用功能模块

  PIC16F877A单片机片上集成了多个专用功能模块,因此PIC单片机无论用于工业控制还是家电产品都显得得心应手、应付自如。

  1).通用同步/异步串行收发器USART模块    在RC端口汇集有多种串行数据传送方式,其中包括同步/异步收发器USART,用于实现二线方式的串行通信。可以定义为全双工异步和半双工同步两种工作方式。

  2).并行从动端口PSP模块

  用于与其它具有开放总线的单片机、DSP进行数据总线连接,进行高速的数据传输与交换。

  3).主同步串行端口MSSP

  具有SPI和IIC两种数据传送的工作方式,可实现多机或外接专用器件进行特殊通信。

  4).捕捉/比较/脉宽调制模块

  PIC16F877A单片机配置有两个功能很强的模块CCP1和CCP2,分别能与TMR1和TMR2配合实现对信号的输入捕捉、输出比较和脉宽调制PWM输出功能。

  输入捕捉功能:主要通过TMR1定时器,及时捕捉外加信号的边沿触发,用来间接测量信号周期、频率、脉宽等。

  输出比较功能:主要通过TMR1定时器和比较电路,输出宽度可调的方波信号,以驱动那些工作于脉冲型的电气部件。

  脉宽调制PWM输出功能:主要通过TMR2定时器、PR2周期寄存器和比较电路,输出周期和脉宽可调的周期性方波信号,以控制可控硅的导通状态、步进电机转动角度或调整发光器件亮度等。

  5).模/数转换器(ADC)模块

  PIC16F877A单片机上嵌入了一个8路10位分辨率的模/数( A/D)转换器,用来将外部的模拟量变换成单片机可以接受和处理的数字量。A/D转换器采用常规的逐次比较法,参考电压既可使用标准的VDD和VSS信号,也可使用外加参考电压的方式。A/D转换器内部配置有独立的时钟信号,即使PIC单片机处于睡眠的情况下,也可以进行A/D转换。

  5.PIC16F877A单片机的引脚配置

  PIC16F877A的封装为双列直插式40引脚及表面贴装式44引脚等几种形式。上图是双列直插式40引脚功能图。

  PIC16F877A单片机的所有接口引脚除具有基本输入/输出功能以外,一般都设计有第2功能,甚至第3功能。它采用引脚复用技术,以便即使增加功能但却不增大体积及引脚数量。

  1).系统配置引脚

  (1).电源和接地引脚(均配置2组)

  VDD:正电源端。VSS:接地端。

  (2).时钟、复位引脚

  OSCI/CLKIN:时钟振荡器晶体连接端1/外部时钟源输入端。

  OSC2/CLKOUT:时钟振荡器晶体连接端2外部时钟源输出端。

  (3).主复位引脚

  MCLRNPP:人工复位输入端(低电平有效)/编程电压输入端。2).输入/输出引脚的其它功能





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何为单片机选择合适的负载电容