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
ADDWF
MOVF
COMF
INCF
DECFSZ
RRF
RLF
SWAPF
INCFSZ
位操作指令
BCF
BSF
BTFSC
BTFSS
当即数和操控操作指令
SLEEP
CLRWDT
RETLW
RETFIE
RETURN
CALL
GOTO
MOVLW
IORLW
ADDLW
SUBLW
ANDLW
XORLW
注:f = 寄存器, k = 当即数 (8位), b = 位地址 <0,7>, d = 目的地 (1=f, 0=W)
上面便是PIC中档单片机的悉数35条指令,这些指令或许关于初学者,显得很生疏,可是当你去看英文数据手册时,就会了解,这些指令,根本都是一句英文的首字母缩写,比方BTFSC,便是Bit Test File register Skip if Clear(位测验某f寄存器,假如为0则越过一条指令)。总共就这35条指令,就算你一开端不习惯,要不断看指令表,但我想假如你开端写程序,一天下来应该就能记住一切的指令。想想其他单片机一百多条指令,某些日系的8位单片机竟有四百多条指令,不是那么简单背下来吧。
5)文档寄存器 - 英文的原文是file Register。在PIC单片机中只要两类寄存器,一类是W,Working Register作业寄存器,只要一个,相当于51的A累加器,其他的一切寄存器都是F寄存器,也便是文档寄存器。这儿的“文档”,是一个形象的描绘,你能够了解除了W之外的一切通用RAM和特别功用寄存器都是一个个的文档,当需求操作的时分,取出某个文档,和W经过ALU中心运算单元运算后,成果既能够放到W里,也能够放到该文档寄存器里。这儿要着重的是,一切的通用RAM和特别功用寄存器(如端口,操控寄存器等)都是文档寄存器,所以对他们操作的指令都是相同的。象有些单片机,对端口拜访,对一般RAM,对特别功用寄存器的操作都要用不同的指令,比较起来,PIC单片机要便利得多。
PIC单片机的内部结构框图
下图是PIC单片机内部结构框图。当然在学习单片机时,不是有必要要了解芯片内部终究时怎么作业的。可是,大概地看看这个图,能够对PIC的某些特色有个开始的形象。从图上你能够看到程序总线和数据总线是彼此独立的,在图的左下角你能够看到片内现已做好了上电复位,掉电复位,看门狗,振荡器起振延时器等为了增强单片机运转可靠性的模块,在程序指针(Program Counter)下面,你会看到一个和其他单片机不相同的当地,仓库(Stack)。PIC单片机的仓库是硬件仓库,它和PC的宽度是相同的。当产生中止或许程序调用时,当时指令的PC+1(要清楚,前面讲过流水线,履行某条指令时,一起在预取PC+1处的指令)整个压入仓库,回来时整个退栈。硬件仓库和某些单片机在RAM空间里拓荒的仓库比较,有一个优点,便是不必忧虑由于仓库的过错溢出而影响RAM区域,并且,你能够挑选压栈后并不退栈,直接GOTO到其他处理。可是它也有自己的局限性,由于它是硬件的,所以仓库的级数是有限的。关于PIC中档单片机,硬件仓库只要8级,所以CALL的嵌套不要超越7级;关于PIC18系列,硬件中止则有31级。或许,你会忧虑仓库不够用,可是,实际上,一个程序CALL嵌套超越7级的真实很少,并且,彻底能够经过改动程序流程来确保仓库不会溢出的。