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分频后计数,做定时器用)。
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之间
2.程序计数器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页执行。 |
|
|