PIC单片机基础知识之一
PIC16中档系列单片机是精简指令集的单片机,它具有以下特性:
——内部为哈佛结构
——指令流水线操作
——文档寄存器的概念
——单指令周期
——所有指令为单字指令
——长字指令
——指令数很少
——指令实现的功能基本不重复
接下来分别介绍上面各个特性。
1)哈佛结构-介绍哈佛结构通常要和冯.纽曼结构对比来介绍。我们熟悉的8086就是一种典型的冯.纽曼结构,它的程序和数据是共用同一个存储空间,CPU也是使用同一个总线来访问它们。那么,取指令和取数据势必分时来进行,这就限制了数据的流量。和它相对应的哈佛结构,则是不同。哈佛结构的典型特点就是程序和数据是分立的空间,CPU对程序和数据的访问也是使用完全独立的两套总线。所以,相对于冯.纽曼结构,它可以同时从两个空间取指令和取数据,这就增加了数据流量。而且,因为两个总线互不相干,所以,程序总线和数据总线可以做得不一样宽。PIC单片机在设计之初选择了哈佛结构,并基于程序总线的宽度,发展出了12位,14位和16位指令宽度的单片机系列,分别对应的是PIC低档系列,PIC16中档系列,以及PIC18系列单片机。这里要说明的是,数据总线的宽度始终是8位,所以不管它的指令宽度是多少,它仍然还是8位单片机。
2)指令流水线操作-大部分的单片机,取指令和执行的过程是顺序进行的。PIC单片机在设计时引入了指令流水线的设计,使得单片机的取指和执行可以同步进行。我们来看下面的指令取指和执行过程图示。
1.MOVLW 0x55
2.MOVWF PORTB
3.CALL SUB_1
4.BSF PORTA,3
从这个图示上,我们可以看到取指和执行是如何同步进行的,也可以理解到,指令可以在一个指令周期内执行。但是,当有程序分支时(如CALL,GOTO或直接修改PC)是例外的,需要多花一个指令周期。图示上标有*号的地方,你可以看到,在执行CALL SUB_1这条指令时,同时预取了第4条指令BSF PORTA,3,程序是要调用SUB_1子程序,那么这条指令显然是错误预取的。但是不用担心,单片机的硬件会自动在下一个指令周期里刷掉被错误预取的指令4,同时在该指令周期内预取SUB_1标号处的指令,那么接下来的Tcy5就是执行子程序的指令了。从这个过程我们就可以理解,为什么程序分支时,需要两个指令周期了。
3)单字指令,长字指令-因为程序和数据是完全独立存储的,所以指令和数据的宽度可以不一样。PIC单片机的指令宽度有12位,14位和16位几种,分别对应低中高三档的系列。以中档PIC16系列单片机为例,它的指令字长是14位的,我们把它叫做长字指令。如何个“长”法,来看一个例子
PIC单片机
MC68HC05
从图示上,你可以清楚的看到PIC16的一条指令是一个14位的长字,这个长字的前面部分是操作码,后半部分是操作数。和其他单片机比较来看,同样功能操作的指令,会被翻译成操作码字节和操作数字节,两个字节。所以,从这里,你可以得到一个概念,就是,PIC的一条长字指令,大约等于其他单片机的两个字节的指令。反映到程序空间上,就是PIC的1K字的程序空间,大约相当于其他单片机的2K字节的程序空间。当然,这个比例不是绝对的,不同的代码会有不一样的比例结果,但是这个1:2的近似结果有助于你在选择PIC单片机型号时作为参考。对于长字指令,还有着另一个好处,就是:程序指针PC指向的任何地方都是一个指令长字,即使PC跑飞,所指向的也是一条合法的长字指令(因为操作码的设计覆盖了所有的二进制组合),这样你就可以方便地用“陷阱”或“填充”等手段来减小PC跑飞带来的误操作。相对应地,操作码和操作数分为两个字节的单片机,一定程序上,存在PC跑飞后把操作数当成操作码来译码的风险。尽管现在的单片机设计都有一定手段来克服这种PC错位,但是它还是没有PIC单片机这种单字指令来得方便。
4)精简指令集,指令功能不重复
字节操作指令
NOP
MOVWF
CLRW
CLRF
SUBWF
DECF
IORWF
ANDWF
XORWF
PIC单片机基础知 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)