×
嵌入式 > 嵌入式开发 > 详情

PIC的程序计数器PC

发布时间:2020-08-25 发布时间:
|
程序计数器PC用来控制指令的执行顺序。它的宽度决定了能够直接寻址的范围,在PIC单片机内核设计时,PC宽度有12/13/14/16位,最常用的一般是13位,故理论上能执行的指令代码最多为8K字。如果实际没有8K则从最高位开始的若干位无效。

通过指令的执行可以强制更改PC的值,从而控制程序的分支或者跳转。

程序执行时,针对所有操作数的算术或逻辑运算都将在其ALU逻辑运算单元上实现。操作后的标志结果将会在状态寄存器STATUS中描述。W寄存器等同于其他单片机的累加器ACC,在PIC单片机上被叫做工作寄存器。它是一个非常特殊的寄存器(和下面讲述的归属于寄存器文档的数据寄存器相比),可用于操作数的赋值或传递,也可以存放最后的运算结果。

任何针对数据寄存器的操作,其寻址方式分两种:直接寻址和间接寻址。直接寻址是用指令中直接包含的地址信息,配合辅助寄存器STATUS提供的额外地址位,对确定地址的寄存器操作;间接寻址利用指针寄存器FSR和辅助寄存器STATUS提供的全地址信息对目标寄存器操作。

寄存器文档概念:PIC单片机内的寄存器可分为两种。其一是工作寄存器,只有一个W寄存器;其它是全部归属于寄存器文档的数据寄存器。寄存器文档(register file)概念,实际上是指其它内部结构将所有的用户寄存器(即用户可用的RAM)、所有的输入/输出端口、所有的特殊功能控制寄存器看作是完全相同的数据寄存器。在算术逻辑单元ALU中任何运算,其操作的数据有两个来源:一个是W寄存器,另一个就来自于任何其它数据寄存器,不管是RAM,还是I/O口,或者是特殊寄存器,其操作方式完全相同。而且其结果存放目的寄存器也有两个:一个是W寄存器,还有一个就是数据寄存器本身。这个和熟悉的51单片机不同:它们的操作结果一定是放在累加器内的。

基于“哈佛”结构,其取指令总线和取数据总线是完全独立分开的,它不同于“冯.诺漫”结构的统一编址。因此PIC单片机的内读取程序的总线宽度和数据总线宽度可以不一样,中档PIC单片机的所有指令都描述成一个字,其长度为14位。在这一个指令中包含两个部分:一部分为操作码,它告诉单片机这是一条什么样的指令,它要实现什么样的任务,操作数在哪里等等;另一部分就是具体的操作数,已经内含在指令中间。所以对程序的空间只需进行一次读取操作即可同时得到指令的操作码和操作数,指令执行效率得到提高。由于指令是单字节的存放,所以不管程序计数器PC的值多少,从程序空间取出的指令都是一条完整的指令。为了防止在干扰场合出现程序跑飞的情形,只需要简单的在程序的空间的相关位置插入陷阱代码,就可以捕捉非法程序跳转,便可使程序恢复正常。而且其它单片机家族有很多是基于多字节指令体系,如51,moto公司的Freescale单片机完成同样的立即数赋值时的指令组成情况。正常情况下单片机在执行指令时总是首先读取操作码,译码后根据不同的指令的具体任务要求继续从程序的空间读取若干个字节的操作数。如此的读取指令方式,在碰到干扰使程序指针PC跑飞时,有可能使PC值落在某一条指令操作码后的操作数位置上,单片机就会把该操作数当作操作码读取并译码,此时的情形就无法控制,因为不知道此操作数代表的是什么操作码,所以后面的连续一大串的指令操作都可能是非法指令,根本无法预测。


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

热门文章 更多
五大标准轻松搞定4K超高清电视选购