PIC16C5X单片机概述

时间:2024-02-17 08:27:25
PIC16C5X单片机概述 —深圳市凌雁电子有限公司  


    PIC系列单片机是美国Microchip公司推出的具有精简指令集高性能8位单片机,其优点是引脚少,性能优越,可直接带LED负载,具有低功耗省电模式,可广泛应用于复杂程度较低的场合。十多年来PIC系列单片正以迅猛的速度发展。

    在这一章节里我们将以PIC16C5X系列单片机为例,详细讲解PIC单片机的内部结构及工作原理。

     [1].PIC16C5X单片机概况

    PIC16C5X属CMOS单片机,是一个低价位高性能8位单片机,使用了仅有33条精简指令集、单字节单周期指令,每条指令执行时间最快可达200ns。易于记忆和使用的指令系统可大大减少产品的开发时间。多种时钟振荡电路睡眠低功耗省电模式及WDT(看门狗)带码保护功能,这些特性具有较大优势。PIC16C5X系列单片机可广泛应用于电机控制、汽车电路、家用电器等领域。

     [2].PIC16C5X单片机主要性能

     RISC精简指令集,指令仅有33条,指令长度为12位。
     绝大部分均为单机器周期指令。
     工作速度高,最快可达200ns(20MHz时钟时)。
     数据长度为8位。
     片内程序存储器容量为512-2kbyte。
     片内静态数据存储器(SRAM)为25-73byte
     硬件组成7个专用寄存器
     两级硬件堆栈。
     有直接、间接、相对和位寻址功能。
     12-20条I/O引脚,每条引脚均可设置为输入和输出态。
     多种时钟振荡电路及WDT定时器电路。
     宽工作电压范围和低功耗模式:工作电压为2.5V-6.0V,典型工作电流为2mA,睡眠状态仅为3uA。
     程序保密位,有效地保护用户的产权。

    PIC16C5X系列单片机有多种不同的程序存储器和数据存储、I/O引脚、振荡类型、振荡频率及封装形式。这些器件可为研发实验提供方便,四种振荡方式是RC、XT、HS和LP,所需的振荡器是通过对片内的EPROM编程实现的,未编程状态器件为默认的RC振荡方式。

    下表是PIC16C5X系列单片机一览表:

PIC16C5X系列单片机一览表
型号 EPROM RAM 时钟频率 定时器 工作电压V I/O口数 封装形式
PIC16C52 384x12 25 DC-4MHz 1 2.5-6.0 12 18DIP/SOIC
PIC16C54 512x12 DC-20MHz 1+WDT
PIC16C55 20 28DIP/SOIC
PIC16C56 1024 12 18DIP/SOIC
PIC16C57 2048 72 20 28DIP/SOIC
PIC16C58 73 12 18DIP/SOIC

     [3].PIC16C5X单片机引脚图

PIC16C5X引脚图 PIC16C5X引脚图


    PIC16C5X系列单片机有两种封装形式,一种是双列直插方式,另一种是表面贴装方式。其引脚如上图所示。现对其功能引脚简述如下:

    [1].RA0-RA3 I/O输入输出口A,对应内部的f5,是一个4位I/O端口,可位控。

    [2].RB0-RB7 I/O输入输出口B,对应内部的f6,是一个8位I/O端口,可位控。

    [3].RC0-RC3 I/O输入输出口C,对应内部的f7,是一个8位I/O端口,可位控。只有PIC16C55和PIC16C57才有。

    [4].RTCC 实时时钟/计数器输入端,在此端口输入信号的上升沿或下降沿计数,边沿可通过软件选择。

    [5].MCLR 主复位端,当MCLR为低电平时对单片机复位。

    [6].OSC1 振荡信号输入端。这个端口用于外部振荡信号的输入,用RC振荡时,它接RC电路,用石英振荡电路时,接石英晶体一端。

    [7].OSC2 振荡信号输出端。在用石英晶体振荡器或陶瓷振荡器时通过一个串联电阻R接振荡晶体一端,在RC振荡时常作CLKOUT输出(CLKOUT=1/4fosc)。

    [8].VDD 电源电压。一般为5V,其范围在2.5-6.25V之间。

    [9].Vss 地端。

    [10].NC 空引脚。


PIC16C5X单片机寄存器文件 —深圳市凌雁电子有限公司  


    PIC16C5X系列单片机是一个低功耗、高速、全静态CMOS单片机,含ROM、RAM、I/O及*处理器单元。这种结构基于寄存器文件概念,有独立的数据和程序存储器总线。数据总线及数据器(RAM)是8位字宽,程序总线及程序存储器(ROM)是12位字宽。这种概念强调位、字节和寄存器操作,CPU能在指令读取和执行过程的重叠中高速工作,即当一条指令执行时,下一条指令已经从程序存储器读出,有效地提高CPU的运算速度,同时,通用寄存器和操作寄存器同属于一个数据存储区,采用相同的寻址方式,这样寄存器的存取就非常简单,这样的结构体系决定了其指令系统相对简单但功能却十分强大。

     数据寄存器文件

    PIC16C5X的8位数据总线连接两个基本的功能部件,由32个或80个可寻址的位寄存器与I/O端口组成的寄存器文件和一个8位字宽的算术逻辑单元(ALU),32字节的RAM可直接用块结构寻址,每个块为16个字节,如下图所示。使用文件选择寄存器(f4),数据可直接寻址或间接寻址。工作寄存器w可执行立即寻址,这种指令结构从程序存储器读取数据送入w寄存器。

    PIC16C5X的寄存器文件分为两个功能组,操作寄存器和通用寄存器,操作寄存器包括实时时钟/计数器RTCC、PC、状态寄存器、I/O寄存器(PORTS)和文件选择寄存器,通用寄存器存放数据及控制数据。

PIC16C5X方框图
PIC16C5X数据RAM和数据寄存器文件
     算术/逻辑运算单元

    8位算术/逻辑运算单元ALU连接一个工作寄存器(w寄存器),它是通过w寄存器对数据进行算术和逻辑运算,也可对w寄存器或任何文件寄存器进行操作。


PIC16C5X单片机程序存储器 —深圳市凌雁电子有限公司  


    PIC16C5X系列单片机内部有一定容量的程序存储器和数据存储器,程序存储器的字节宽度为12位,用于存放用户程序和数据表格。PIC16C52有384字节的程序存储空间,PIC16C54/55的ROM空间为512字节,PIC16C56的地址空间为1024字节,PIC16C57/58则为2048个字节。PIC16C5X单片机采用的是分页寻址方式,每页位512字节,页面地址由状态寄存器f3的PA0、PA1选择。512字节的12位页内可直接寻址,较大的程序存储器可通过选择4个页、每页512字节页面来寻址,如下图所示。

    但当页面之间跳转(GOTO CALL指令)必须先把f3的PA0、PA1设置为相应的页面。需要注意的是:在系统复位时,程序计数器PC将指向程序存储器最后一个页面的最后一个单元。例如PIC16C54/55指向1FFH,PIC16C56指向3FFH,PIC16C57/58则指向7FFH。状态寄存器f3的PA0、PA1指向零页空间,所以程序员在编程时需要在程序存储器底部放置一条跳转指令,跳到程序入口。

    单片机执行程序时,程序计数器(PC)自动加1,程序操作支持直接、间接、相对寻址方式,能由测试、跳转指令、子程序调用指令、转移指令或把算出的地址装入PC来实现程序的跳转。片内两级堆栈为子程序嵌套提供服务。

PIC16C5X方框图
     堆栈

    PIC16C5X系列单片机提供两级堆栈,参考上图。CALL指令把程序计数器加1压入堆栈1,栈1自动压入栈2,当多于两级子程序调用指令执行时,堆栈中只有存储最近两个返回地址,所以主程序中调用的子程序最多只能嵌套一次,当执行一条CALL指令,PIC16C56/57/58的f3之页面选择位PA1、PA0被装入程序计数器的最高两位,第9位清“0”,也就是子程序入口地址必须位于存储页的低半页000-0FF、200-2FF、400-4FF、600-6FF地址。但这里指的是子程序主体的起始位置,而子程序体是可以延伸到下半页面的。

    PIC16C56/57/58,由于程序空间分别为1k和2k,可能存在跨页面子程序调用,所以调用子程序前须先把f3的PA1、PA0设置成该子程序所在页面地址。诚然,如果子程序与调用程序同在一个页面,则无需这个步骤。由于堆栈和PC的宽度是一样的,所以可在程序的任何地方执行CALL指令来调用子程序。当然跨页面的调用还须考虑页面地址PA1、PA0。

    RETLW(子程序返回指令)把栈1内容送到程序计数器PC,同时栈2内容复制到栈1,多于两个RETLW指令运行时,栈1只会装入先前存在栈2的地址,对于PIC16C56/57,程序总是返回调用它的同一页面,不管它是处在哪个页面,也不管f3的页面选择位的设置状态如何。但是执行RETLW指令并不会改变f3中的PA1、PA0的值。w寄存器会被装入RETLW指令中所指向的数值,即立即数。这在程序存储器中实现数据查表时就非常有用。


PIC16C5X单片机数据存储器 —深圳市凌雁电子有限公司  


    数据存储器分为操作寄存器、I/O寄存器、通用寄存器和专用寄存器四种。由于专用寄存器地址对用户不透明,我们将在后面的章节中论述。操作寄存器和I/O寄存器占用的物理地址是01H—07H,通用寄存器从地址08H开始。

    1.操作寄存器文件
    操作寄存器文件是寄存器文件的一种,它是专用的寄存器。它和通用寄存器文件有很大的区别。通用寄存器文件是用于存放数据的,而操作寄存器文件则用于寻址、定时等各种特殊用途。操作寄存器文件包括间接数据寻址寄存器f0、实时时钟/计数器f1(RTCC)、程序计数器f2(PC)、状态寄存器f3(STATUS)、文件选择寄存器f4(FSR)等。下面我们分别介绍这些寄存器。

    [1].间接寻址寄存器f0
    这不是一个物理寄存器,寻址f0则会读出文件选择寄存器f4的内容,并对f4所指定的文件寄存器进行间接寻址操作。f0常用作间接寻址指针。例如指令ADDWF f0,W把f4(FSR)所指的寄存器的内容和W寄存器相加,结果存于w,f0本身不存任何价值。

    [2].实时时钟/计数器f1(RTCC)
    该寄存器和其它寄存器一样,可通过程序写入和读出。它用于对加在RTCC引脚上的脉冲计数(用作计数器)或对内部时钟计数(对fOSC4分频后计数,做定时器用)。RTCC的结构框图如下图所示。

RTCC方框图
    OPTION寄存器的PSA位控制预分频器(prescaler)的分配对象,当PSA位为“0”,8位可编程预分频器分配给RTCC,这时外部或内部信号经过预分频器分频后再输出给RTCC。预分频器的分频比由OPTION寄存器的PS0-PS2位决定。OPTION寄存器不在数据存储器内,是一个可由“OPTION”指令寻址的特别寄存器,如果预分频器被分配给RTCC,则写f1会对预分频器清“0”,但OPTION寄存器内容保持不变,则分配对象、分频比等均不变。

    OPTION寄存器的RTS位决定是对外部还是内部计数,当RTS=1时,对来自RTCC引脚的信号计数,当RTS=0时,对fOSC/4计数。OPTION寄存器的RTE位决定RTCC脚的信号是上升沿(RTE=0)还是下降沿(RTE=1)时增1。当RTS=0,内部时钟(频率为fOSC/4)作为计数对象,RTE位、RTCC引脚与内部电路无关。为减少功耗,RTCC脚必须连接VDD或Vss。

    当预分频器分配给计数器/定时器RTCC后,RTCC将计数到预分频器值后加1,例如,如预分频器值为1:4,则RTCC将计数4次加1。

    无论内部还是外部时钟是否连接预分频器,一旦有时钟供给RTCC,f1将加1。在计数到达FFH时,在下一个计数发生后将自动清零,重新开始计数,一直循环下去。所有令f1(RTCC)加1的脉冲都将延时2个指令周期。例如在写f1后,随后的两个指令周期就不加1。这独立于外部或内部时钟的选取。如预分频器分配给RTCC,预分频器的输出将在f1(RTCC)加1前延时两个指令周期。对于写或读RTCC的指令(例如MOVF RTCC,W或CLRF RTCC)都是一样的,在应用RTCC时,在不影响其计数情况下测试,可用MOVF f1,W指令。

    应注意外部时钟用于RTCC时钟的有关情况。

    当外部时钟用于RTCC时,它与内部时钟同步。所以,外部时钟必须符合一定的要求,同样在外部时钟输入边沿到RTCC加1,存在着延时,在预分频后实现同步。在每个指令周期,PSOUT的输出被采样两次以检测上升或下降沿。因此,这需要PSOUT至少保持2TOSC高电平和至少保持2TOSC低电平。TOSC是振荡周期。

    当不用预分频器时,PSOUT输出与RTCC时钟输入一样,要求如下:

        TRTH=RTCC 高电平时间≥2TOSC+20ns
        TRTL=RTCC 低电平时间≥2TOSC+20ns

        当用预分频器时,RTCC输入被异步脉冲计数器型的预分频器分频,预分频器输出是对称的。

        PSOUT=RTCC 高电平时间=PSOUT低电平时间=N.TRT/2
        当TRT是RTCC输入周期和N是预分频器的值(2,4,8,……256)时,要求:

        N.TRT/2≥2TOSC+20ns
        或
        TRT≥2(TOSC+20ns)/N
    用户不需要确定RTCC高、低电平时间,但是如果RTCC的高、低电平持续时间太小,脉冲有可能不被采集。一般要求最小的高、低电平时间为10ns。RTCC输入要求为:

        TRT=周期≥(4TOSC+40ns)/N
        TRTH=RTCC 高电平时间≥10ns
        TRTL=RTCC 低电平时间≥10ns

    外部时钟的延时,预分频器的输出由内部时钟同步,RTCC在Q4时加1,从外部时钟边沿出现到RTCC实际加1,存在着一个较小的延时,在3TOSC
7TOSC之间。例如,测量两个边沿之间的时间间隔,其精度在±4TOSC之间。


PIC16C5X单片机通用寄存器和专用存储器 —深圳市凌雁电子有限公司  


    通用寄存器文件是用于存放数据的寄存器。一般用于中间数据或结果数据存放。所有的通用寄存器构成了通用寄存器文件。

    专用寄存器是单片机内的物理寄存器,它们与数据存储器无关,专用寄存器用于特殊用途,例如I/O断口控制等。

    1.通用寄存器
    PIC16C52/54/56的通用寄存器地址分配为F07H—F1FH,PIC16C55则为F08H—F1FH,这些地址组成了通用寄存器文件。PIC16C57/58的通用寄存器地址分配如下:

        F08H—F0FH:常用的并与存储器块无关的通用寄存器文件。

        F10H—F1FH:Bank0的通用寄存器文件。

        F20H—F2FH:等同于F00—F0FH。

        F30H—F3FH:Bank1的通用寄存器文件。

        F40H—F4FH:等同于F00—F0FH。

        F50H—F5FH:Bank2的通用寄存器文件。

        F60H—F6FH:等同于F00—F0FH。

        F70H—F7FH:Bank3的通用寄存器文件。

    2.专用寄存器
    [1].W工作寄存器
    在两个操作量的指令中用于存放第二个操作量,同时,也用于内部数据传送。

    [2].TRISA:A口(f5)I/O控制寄存器0-3位有效,对应于I/O(f5)4位宽度。
    [3].TRISB:B口(f6)I/O控制寄存器。
    [4].TRISC:C口(f7)I/O控制寄存器。
    执行TRIS指令时,w寄存器的内容将传送至I/O控制寄存器,以此来定义各I/O口的输入/输出状态。
    I/控制寄存器的某位为“1”,使相应的I/O线置于高阻抗状态,即输入态,某位为“0”,使相应的I/O线置输出态。I/O控制寄存器是只写寄存器,复位时全为“1”。

    [5].OPTION:预分频器/RTCC选择寄存器。
    分配预分频器(prescaler)给RTCC或WDT。预分频器只能分配给RTCC或WDT其中之一使用,不能同时使用。OPTION寄存器是用于定义预分频器的预分频系数,RTCC信号源及作用于RTCC的信号边缘。OPTION寄存器是一个只写6位宽度寄存器。执行OPTION指令时,会把W寄存器内容传送至OPTION寄存器中。在复位时,OPTION寄存器被置为全“1”。

RTS RTE PSA PS2 PS1 PS0
D5 D4 D3 D2 D1 D0
    寄存器OPTION各位定义如下:

    [1]. RTS(D5):RTCC信号选择位,RTS=0时,选中内部指令周期时钟(CLKOUT)为输入信号,在RTS=1时,选中RTCC引脚输入的信号。

    [2]. RTE(D4):RTCC信号边沿选择位,RTE=0时,选中RTCC引脚输入信号的上升沿计数,RTE=1时,RTCC引脚输入信号下降沿触发。

    [3]. RTS(D3):预分频器分配位。PSA=0时,把预分频器分配给RTCC,PSA=1时,把预分频器分配给WDT。

    [4]. PS0-PS2(D2-D0):预分频值,它用于确定分频器的分频比,定义如下表所示。

预分频值 RTCC时分频比 WDT时分频比
0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128


PIC16C5X的I/O口 —深圳市凌雁电子有限公司  


    PIC16C5X系列单片机所有I/O口都可被独立定义为输入或输出口。参见图1。作输入口时,这些端口不锁存,外部输入信号必须保持到读指令读入为止。输出信号被锁存并保持不变,直到被改变为止。要定义一个口为输出,可直接设定对应控制位为“0”,某位端口用于输入,则相应TRIS位须为“1”。

I/O口线方框图
    当“TRIS f”送入“1”时,Q1、Q2都截止,I/O脚成高阻状态,此时为输入态。当执行指令如MOVF 6,W,把当前I/O口的状态读入数据总线。当“TRIS f”送出“0”时,Q1、Q2的导通情况取决于数据锁存器Q(非)的状态。当写入数据为“1”时,Q(非)输出“0”,Q1导通,Q2,截止,I/O口输出高电平。当数据为“0”时,Q(非)输出“1”,Q2导通,Q1截止,I/O口输出低电平。无论I/O脚置成输入或输出,执行指令(如MOVF 6,W)都是将I/O端口的状态读入数据总线。

    一些指令先读后写,如BCF、BSF指令整个端口状态读入CPU,执行位操作后再将结果写回去覆盖原来的内容,即输出结果放在I/O口的数据锁存器上,这点程序员需加以注意。特别当一个端口中一条或几条引脚一会儿作输入,一会儿又作输出而又执行BCF、BSF指令时。举例说明:BSF 6,5指令的目的是要把B口的第5位置为高电平“1”,执行这条指令时,先把整个B口当前的状态读入CPU,把第5位置成“1”后再把结果(8个位)重新输出到B口的数据锁存锁存器。如果B口的某位用作双向I/O口,且它在这时被定义为输入态,则在这条I/O脚上出现的输入信号被再写入这个I/O脚数据锁存器,从而覆盖原来的内容。如果这个I/O脚保留为输入方式,不会出现问题。但如果稍后这个I/O脚改为输出态,则数据锁存器bit1端内容可能和先前的不同了。

    I/O输出电路为CMOS互补推挽电路,有很强的带负载能力,高电平输出时具有20mA的拉电流,低电平输出时允许25mA的灌电流。这种特性可直接用于驱动LED显示器,为了改变某各引脚上的电平,这个引脚有效地输出“0”或“1”时,不应该同时又受到外部设备的驱动,因为由此引起的高输出电流可能损坏芯片。

    I/O操作指令周期的最后写I/O口,如果为读,数据须在指令周期开始前准备好。对于同一个口执行先写后读,必须小心。指令序列应满足要求:在下一条读I/O数据的指令执行之前,应使引脚的电平稳定,否则引脚的先前状态会被读入CPU,而不是新状态。建议最好用NOP指令或其他非I/O操作指令把读写指令隔开。

    在电磁干扰环境恶劣的情况下,如键盘处于静电放电ESD(Electronic Static Discharge)的环境中,由于电磁噪声干扰,寄存器的内容将受影响。若I/O控制寄存器的内容发生改变,即使一只引脚从输入变成输出状态,程序依然继续运行。此时程序从这一引脚读取数据,结果可能是错误的。面对这种情况,我们建议在一定时间间隔内需重新定义I/O口的输入和输出状态。如果程序安排上允许,最好是每次读写数据时设置I/O控制寄存器,虽然对于大多数时候不需要这样做,只是提醒程序员注意电磁噪声干扰问题。


PIC16C5X的时钟振荡器 —深圳市凌雁电子有限公司  


    PIC16C5X系列有四种振荡选择,标准晶体/陶瓷振荡器(XT)、低频低功耗振荡器(LP)、高速振荡器(HS)和阻容振荡器(RC)。在EPROM型和后缀为RC的单片机中,振荡器电路可由配置位EPROM编程来选择。QTP单片机中振荡器在出厂时已设定,它可通过特定方法测试。

    [1]. 石英晶体振荡器。

    PIC16C5X单片机的XT、HS或LP模式,OSC1和OSC2需要外接石英晶体或陶瓷振荡器,如下图所示,HS振荡器需要串联电阻Rs,Rs的取值范围在100欧至1k欧之间。

石英晶体振荡器
    在单片机采用石英晶体振荡器或陶瓷振荡器时,所采用的电容和产生的频率有所不同,电容取值大有利于振荡稳定,但却延长了起振时间。

    采用陶瓷振荡器时,所选择的电容容量和产生的振荡频率如表1所示。采用石英振荡器时,所选择的电容容量和产生的振荡频率如表2所示。

  表1 陶瓷振荡器和匹配电容
振荡器类型 陶瓷振荡器频率 电容(C1=C2)/pF
XT 455kHz 150-330
2.0MHz 20-330
4.0MHz 20-330
HS 8.0MHz 20-330
    [2]. RC振荡器。

    对于定时不需要很准确的场合,RC振荡器可明显地降低成本。RC振荡器的频率和电源电压VDD、外接电阻REXT、外接电容CEXT和工作温度有关。由于在制造过程中参数的不一致,振荡器的频率对每个单片机可能有所不同。另外,不同封装方式的引线分布电容不同也会影响振荡频率,在外接电容CEXT的值较小时特别明显。用户还需考虑所用的外部电阻REXT和CEXT的误差。

  表2 石英晶体振荡器和匹配电容
振荡器类型 振荡器频率 电容C1/pF 电容C2/pF
LP 32kHz 15-30 15
XT 100kHz 15-30 200-200
200kHz 15-30 100-200
455kHz 15-30 15-100
1MHz 15-30 15-30
2MHz 15 15
4MHz 15 15
HS 4MHz 15 15
8MHz 15 15
20MHz 15 15
    图2为RC振荡电路接线图,在外接电阻REXT的值小于2.2kΩ时,振荡器的工作可能不稳定,甚至不能起振。而电阻REXT太大时(如大于1MΩ),振荡器又容易受噪声、湿度及漏电干扰亦变得不稳定。我们建议REXT的取值范围为5-100kΩ为宜。

    振荡器可以在没有外接电容的情况下工作,但为为了防止干扰和提高稳定性,推荐采用20pF以上的电容。在使用小电容时,由于印刷板和封装引线的分布电容的影响,将使振荡频率发生变化。表3为不同阻容值时的振荡频率。RC振荡时OSC2当作CLKOUT(CLKOUT=fOSC/4)输出。
石英晶体振荡器
  表3 RC振荡器在不同电阻电容时的振荡频率
CEXT/pF REXT/kΩ 平均振荡频率
fOSC@5V,25℃
20 3.3 4.973MHz ±27%
5 3.82MHz ±21%
10 2.22MHz ±21%
100 262.15kHz ±31%
100 3.3 1.63MHz ±13%
5 1.19MHz ±13%
100 684.64kHz ±18%
100 71.56kHz ±25%
300 3.3 660kHz ±10%
5 484.1kHz ±14%
100 267.63kHz ±15%
100 29.44kHz ±19%
    [3]. 外部振荡。

    在PIC16C5X单片机中也可采用外部振荡源的方法提供时钟源,来自外部的时钟从OSC1端输入单片机,OSC2置空,外部时钟只用于HS、XT和LP型振荡器的单片机。参见图3。


PIC16C5X的复位电路 —深圳市凌雁电子有限公司  


    PIC16C5X的复位电路可以由系统上电,把MCLR输入拉为低电平,或看门狗定时器溢出而产生。振荡启动定时器OST作用或MCLR输入为低电平,单片机将保持复位状态,复位时单片机处于以下状态:

    · 振荡器启动或工作,包括电源上升启动或睡眠唤醒启动。
    · I/O控制寄存器设定为全“1”,使所有I/O引脚(PA0-PA3、PB0-PB7、PC0-PC7)处于高阻状态。
    · 程序计数器PC设为全“1”,对于PIC16C54/55为1FFH,对于PIC16C56为3FFH,对于PIC16C57为7FFH。
    · OPTION寄存器设为全“1”。
    · 看门狗定时器WDT及其分频器清“0”。
    · 状态寄存器f3的程序页面选择位最高位(位3)清“0”。
    · 采用RC振荡器时,OSC2的CLKOUT信号保持为低电平。

    [1]. 内部上电复位电路

    内部上电复位电路是一个专门的电路,俗称POR(power on reset),PIC16C5X片内有POR电路,大多数情况下上电提供片内复位。一般不需要在MCLR端加上复位电路,只需将其接到VDD上即可。

复位电路
    上电复位电路是和振荡器启动定时器电路相结合而工作的。上电复位电路由上电检测电路、三输入或门和复位锁存器组成。振荡启动定时器OST则是由片内RC振荡器、8位异步脉冲计时器、复位锁存器和相应的门电路组成。复位电路简图参见图1所示。

    上电时,上电检测电路对电源电压的上升过程进行检测,当电压到达一定阈值时的时候,上电检测电路输出上电复位信号(POR),上电复位信号会对8位异步脉冲计数器清“0”,同时对复位锁存器置“1”。复位锁存器置“1”则从Q(非)输出单片机的复位信号,让芯片处于RESET状态,8位异步脉冲计数器清“0”,使OST也处于复位状态,从“0”开始计数,在MCLR端到达高电平并打开片内RC振荡器和8位异步脉冲计数器之间的“与”门时,RC振荡信号通过“与”门到8位异步脉冲计数器,启动定时器计时,计时18ms后就会产生超时信号去对复位锁存器清“0”,复位锁存器的Q(非)输出“1”,从而完成复位操作。

    保证上电复位正确的工作条件是:VDD的上升速率不低于0.05V/ms,且要从0V开始上升。在低频振荡器要求长于18ms时间来启动及稳定,片内上电复位电路不能满足要求,此时使用外接RC电路以满足较长时间的上电过程。

    [2]. 外部上电复位电路

    对于从启动到稳定的时间大于18ms的低频振荡器,单片机需要用外接的上电复位电路来延长复位时间,以保证正确复位。一般外接的上电复位电路采用RC电路,其结构如图2所示。

外部复位电路
    当VDD上电斜率太小或使用低频振荡时器时,需要较长的启动时间,需使用外部上电复位电路,图2中的D是在VDD掉电是迅速地将C上的电能放掉。

    要实现正确复位,要求VDD到达最高电平后开始计算,MCLR到达高电平的时间加上启动定时器OST的计数满18ms时间应大于低频振荡器从启动到稳定所需要的时间。由于OST的周期是18ms,它是固定不能改变的,因此在VDD到达高电平后,MCLR到达高电平的时间长短会影响复位过程。利用外接RC电路就可延长MCLR到达高电平的时间,从而保证复位过程的正确。图2中,VDD达到高电平后通过R对C充电,在此期间,使MCLR有较长低电平时间。

    二极管D使电容在VDD掉电时快速放电,MCLR引线最大漏电流约为5uA,R取值应小于40kΩ,使在其上的压降小于0.2V。否则漏电流在R上的压降会使MCLR上的高电平下降,在MCLR端串联电阻是限流电阻,用于限制放电时从外部电容C流入到MCLR端的电流,以防止损坏单片机。R2一般取值在100Ω-1kΩ之间即可。


PIC16C5X的低功耗模式 —深圳市凌雁电子有限公司  


    [1]. 电源下降保护电路

    在实际应用中,有时需要考虑电源电压VDD的下降情况。电源下降保护电路如图1所示。在这个电路中,当VDD≤VD+0.7V时,则会产生复位,原理为稳压管的稳压值VD和晶体管Q1的e、b正向压降之和大于VDD,稳压管Vz截止,晶体管Q1截止,MCLR端为低电平,单片机处于复位状态。
电源下降保护电路
    图2是另一种保护电路,电路中用电阻代替了稳压管,价格较低,但效果较差,当VDD≤(R1+R2)×0.7/R1时,晶体管截止,MCLR为低电平,单片机复位。

    [2]. 省电SLEEP

    执行SLEEP指令,进入省电模式,此时WDT被清“0”,然后重新开始计数,f3寄存器“PD”位被清“0”,“TO”位被置“1”,振荡驱动器停止工作,所有I/O保持原来状态,这种工作模式功耗最低。

    为使单片机功耗最小,进入SLEEP前,应使所有I/O口处于低电平或高电平状态,处于高阻状态的I/O脚应由外部设置成高或低电平(加上拉或下拉),以避免浮空输入所产生的开关电流。RTCC的输入端同样应处于VDD或VSS,MCLR引脚需处于高电平,以使电流最小,功耗最低。

    从SLEEP模式唤醒的过程如下:单片机可被WDT溢出或MCLR引脚上加一个低电平脉冲唤醒,在两种唤醒方式中,普通程序恢复执行前,单片机停留在RESET状态,持续一个振荡启动定时(OST)周期。标志寄存器STATUS的“PD”位,在上电时置“1”,会被“SLEEP”指令清“0”,此特征可用于检测单片机是上电复位还是从省电方式唤醒复位。标志寄存器的TO位,可用于判断唤醒是由外部MCLR信号还是WDT溢出引起的。

    注意的是在使用外接RC的上电复位电路时,不推荐用WDT唤醒省电模式,因为WDT溢出时产生RESET通常不会使外电容放电,且单片机只会由复位定时器的周期进行复位。

    [3]. 配置位EPROM

    配置位EPROM(configuration EPROM)有4个EPROM熔丝决定,这些位有别于程序存储器的EPROM普通位。

    两个熔丝用于选择振荡器类型,另两个一个是WDT允许位,一个程序保密位。

    · 用户识别码(Customer ID Code)

    PIC16C5X系列有16个特别的EPROM位,它们不是程序存储器单元,这些位用于存储用户识别码、校验码或其它信息数据,这些单元不能在普通程序中访问。

    · 代码保护

    当选择将芯片的程序保密位熔丝烧断(写入0)后,程序存储区ROM中的程序代码(12位宽)的高8位将被保护。此时读出的数据将是“00000000XXXX”形式,高8位全部被“0”取代,无法再解释这些代码的含义,也即不能进行代码复制,但单片机的功能并不受影响,代码程序仍然可正确执行。从而保护自己的著作权。

    当程序被保护时,从040H开始及以上存储单元的内容将受保护而不能编程,程序存储器地址000H—03FH的电源、用户ID码单元和配置位熔丝仍可编程。