光学  

   你现在的位置:JUNTRY>>主 页>>              今天是:

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系列单片机是一个低功耗、高速、全静态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之间。

 


 


    3.程序计数器f2(PC)
    程序计数器给出片内2048x12的ROM地址,不同的型号程序计数器与它们的两层堆栈为9-11位寛,如表1所示。

 

  表1 程序计数器PC与堆栈大小

型号

PC宽度/位

堆栈宽度/位

PIC16C54/55

9

9

PIC16C56

10

10

PIC16C57

11

11

    系统复位后,PC为全“1”,程序执行每一条指令PC自动加“1”,除非程序指令本身改变PC的内容(例如程序跳转,中断服务等),下面的指令将改变PC的值。

    [1].“GOTO”指令:允许直接装入程序计数器的低8位,对于PIC16C56/57/58,PC的最高位由PA0、PA1两个页面选择位(也即状态寄存器的5、6位确定),此指令允许跳到任一页的任意位置。

    [2].“CALL”指令:先把当前PC的值压入堆栈,然后使第9位清“0”,并把低8位装入程序计数器PC,对于PIC16C56/57/58,PC的高两位被装入页面选择位PA0、PA1。

    [3].“RETLW”指令:该返回指令直接把栈顶内容重装入PC。

    [4].程序计数器可由某位指令改变(例如MOVWF f2,ADDWF f2或BSF f2,5)计算结果将装入PC低8位,第9位清“0”。对于PIC16C56/57/58,PC的高两位被装入页面选择位PA0、PA1。

    需要注意的是:在执行“CALL”或其它改变PC值指令时,第9位会被清“0”,所有子程序调用指令和需要计算的跳转指令时,要把分支程序放在任何页面(512字节)的前256个单元(地址分别为000-0FFH、200-2FFH、400-4FFH、600-6FFH)。

    多个程序存储器页面选择(对PIC16C56/57/58有效)情况下,当程序计数器指向所在存储页的最后地址时,它仍能加1,并继续执行到下一页面,但PA0,PA1页面选择位不会改变,以后的“GOTO”、“CALL”、“ADDWF f2”、“MOVWFf2”等指令会返回原来的页面,除非页面选择位在程序中被更改。例如NOP指令位于1FFH(0页),PC加1变为200(1页),一条在200的“GOTO XXX”指令将返回0页的XXX地址(若f3的页预选位“0”)。

    RESET状态下,PA0、PA1清“0”,0页会成为预选页。同时程序计数器PC会对最后一页的最后一个单元寻址。因此,在这个位置的“GOTO”指令会自动返回至0页执行。

 

 4.状态寄存器f3
    该寄存器包含有ALU的算术状态位,RESET状态位、大于512字节程序存储器的页面预选位。

    状态寄存器f3可以用作目标寄存器。某些标志位通过相应的写来设定,而另外一些位是不能通过指令来改变的。TO、PD位是不可写的。因此一条指令对状态寄存器执行的结果会有所不同。例如CLR f3被除了TO和PD位之外的所有位清“0”,并把“Z”位置“1”,所以得到的状态寄存器内容为“000UU100”,其中,U表示不变化。

    建议用BCF、BSF或MOVWF指令来改变状态寄存器的内容,这些指令只改变相应的位,而不影响其它状态位。

    其它影响状态位的指令可参考指令系统的说明。

    状态寄存器包含8位数据位,其中低5位是状态标志位,高3位中的最高位PA2未用。PA0和PA1是存储器页面选择位,其结构如下表所示。

 

  表1 状态寄存器的结构

PA2

PA1

PA0

TO

PD

Z

DC

C

D7

D6

D5

D4

D3

D2

D1

D0

    下面我们介绍各位的意义。

    [1].C(D0):进位/借位标志位。在执行ADDWF和SUBWF指令时,最高位产生进位或借位时,C=“1”,在减法采用补码运算。

    [2].DC(D1):辅助进位位。当执行ADDWF和SUBWF指令时,低4位产生进位或借位时,DC=“1”。

    [3].Z(D2):零标志位。当算术操作结果为0时,Z="1"。

    [4].PD(D3):低功耗标志位。上电或执行CLR WDT指令时,PD=“1”。执行SLEEP指令时,PD=“0”。

    [5].TO(D4):WDT溢出标志位。当上电或执行CLR WDT、SLEEP指令时,TO=“1”,WDT溢出时,TO=“0”。

    [6].PA0,PA1(D5,6):程序存储器页面选择位。对于PIC16C56单片机,PA0是程序存储器页面选择位。PA1是通用读写位。在PA=0时,选择0页面,即000H-1FFH。PA0=1时,选中1页,地址为200H-3FFH。

    对于PIC16C57/58单片机,PA0、PA1是程序存储器页面选择位。它们的值从00-11H分别选中0-3页,即地址为000-1FFH、200H-3FFH、400H-5FFH、600H-7FFH。

    [7].PA2(D7):通用读写位,未使用。

    在复位时,PA2,PA1,PA0被清“0”,上电或执行CLR WDT指令时,TO、PD都被置“1”,这两位的变化如表2所示。上电复位时,Z、DC、C标志位状态不定。在其它复位情况下(如WDT溢出)Z、DC、C状态不变。上电复位TO、PD的状态见表3。

  表2 事件对TO、PD标志位的影响

事件

TO

PD

说明

上电

1

1

不影响PD标志位

WDT超时溢出

0

X

SLEEP指令

1

0

CLR WDT指令

1

1

  表3 复位后TO、PD标志位的状态

TO

PD

复位原因

0

0

WDT超时溢出使SLEEP唤醒

0

1

WDT超时溢出(不在SLEEP状态时)

1

0

MCLR加低电平使SLEEP唤醒

1

1

上电时

X

X

MCLR加低电平

    ADDWF指令后,进位位C=1表示产生进位,执行SUBWF指令后,进位位C=0表示借位,执行ADDWF或SUBWF指令也将影响辅助进位位DC状态。DC表示低半字节到高半字节的进位和借位。


 

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

    专用寄存器是单片机内的物理寄存器,它们与数据存储器无关,专用寄存器用于特殊用途,例如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


 


 

以上部分内容转载于网上,如有涉及到版权问题,请即通知本人删除

juntry@126.com