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系列单片机有两种封装形式,一种是双列直插方式,另一种是表面贴装方式。其引脚如上图所示。现对其功能引脚简述如下: [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)和文件选择寄存器,通用寄存器存放数据及控制数据。 |
算术/逻辑运算单元 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系列单片机提供两级堆栈,参考上图。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的结构框图如下图所示。 |
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 |
[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”。 |
当“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码单元和配置位熔丝仍可编程。 |