引导程序的运转D程序计数器
一般来说,程序便是计算机将所要进行的处理按次序排列的指令集。在单片机中,将程序保存在地址空间(存储器空间)中(上期曾介绍过),并由CPU来履行(处理)指令。假定地址空间中的一个地址保存一条指令,先履行某个地址中的指令(如“将值置位到CPU中”处理),接着履行下一个地址中的指令,接下来再履行下一个地址中的指令……,像这样经过接连履行指令,便可履行程序。
那么,CPU是怎么判别履行指令的次序呢?在单片机中,程序被履行的时分“程序计数器(PC)”的值也一起被更新。寄存在CPU内的指令地址中,程序计数器存储有下一条CPU行将履行的指令地点的地址。履行了某个地址的指令后,下一个该履行哪个地址中的指令呢?这个答案由程序计数器来告知你。
一般来说,程序被保存在接连的地址中,再由CPU按次序履行寄存在各个地址中的指令。图1为程序计数器的示意图。图中,假定(1)履行地址1000h 中的指令,(2)履行地址1000h中的指令后,程序计数器的主动添加一个量并显现出下一个地址1001h,接下来,(3)CPU履行地址1001h中的指令。
那么,CPU履行开端的指令时是一种什么情况呢?单片机在接通电源或是复位时,如上期所阐明的,保存在向量表的复位地址中的(程序的开端地址)将被搬运到程序计数器中,该地址中的指令便得到履行(请参照上期的图2)。
⇒关于地址空间及向量表的内容,请参照本系列的第五期《单片机与程序设计(上)》。
改动程序的运转途径D搬运指令
编写程序时,在履行完某个指令的处理后有时有必要先履行保存“(非接连)的下一个地址”中的指令。此刻,程序计数器的值将被改写,而所用的指令被称为“搬运指令”。
图2所示是搬运指令的示意图。图2示例中,(1)地址1000h中寄存有搬运指令,行将(2)程序计数器的值改写为下一个应履行的地址(1100h)的指令。即CPU履行完1000h地址的指令(搬运指令)后,接下来不是履行1001h地址的指令,而是履行(3)1100h地址的指令。
别的,在搬运指令中,可以运用“从当时的程序计数器的值向前(更大的地址)/向后(更小的地址)移动”的方法来设定程序计数器的值。
信息的暂时寄存处D仓库
履行程序时,在运算过程中只是依托CPU内的数据保存方位(CPU内部寄存器)是不行的,有时需在主存储器中暂时寄存信息。这种信息的暂时寄存方位被称为“仓库”,而寄存“下一个(暂时)寄存的信息地址”的便是“仓库指针(SP)”。假如一开端就设定好仓库的地址,那么仓库指针将主动更新,且总是指示 “下一个(暂时)寄存的信息地址”。
⇒CPU内部寄存器等单片机的结构请参照《单片机入门(1)》。
假如履行“将该信息寄存(有时也用“堆积”)在仓库”的指令,那么被指定的信息将会被写入仓库指针所指定的地址中,且仓库指针的值也将被更新为新的地址(一般为一个小地址)。该景象如图3所示。假如(1)CPU将信息寄存在仓库指针所指的地址中,则(2)仓库指针的将被更新,然后(3)仓库指针指向下一个寄存信息的方位。
将寄存在仓库中的信息回来CPU时,也将用到仓库指针。图4所示的是将信息回来时的景象。(1)更新仓库指针的(更新为一个大的地址),(2)将暂时寄存在仓库中的信息返送回CPU。此刻,(3)仓库指针指向下一个写入地址(从前将信息回来CPU后空出的地址)。
可是仓库中并非可无约束地保存信息。因为仓库能运用的规模仅限于可改写的被称为RAM的存储器。假如信息寄存量过多而导致仓库超出了RAM的区域,程序将无法正常运转。
了解中止处理
本期是本系列的最终一期。下面咱们将曾经介绍过的内容进行一个总结,并以此来了解单片机是怎么运转(处理)的。
咱们将以发生中止时的处理为例来进行考虑(图5)。中止处理便是指在履行某个程序的过程中,因为某种原因(发生中止)而导致开端履行彻底不同的程序。咱们以来自外设功用之一的独立的看门狗计时器(WDT、所谓的Watch Dog即看门狗的意思)的中止为例来进行剖析。在程序正常运转时独立的看门狗定时器将什么也不做,可是在程序失掉操控,且没有按必要的过程进行处理时就会发生中止。使失掉操控的程序停下并让体系安稳中止的处理是由经过中止开端的程序来履行的。中止处理的流程请参照本系列《中止功用》的图2。
⇒关于中止的结构和处理流程请参照本系列《中止功用》的内容。
⇒关于看门狗定时器请参照本系列的《定时器》的内容。
(1)首要,在发生中止时,有必要使运转中的程序入栈。
(2)在中止处理 “入栈”时,将信息寄存在仓库指针指向的地址(仓库)中。进行中止处理时寄存在仓库中的信息便是正在履行的原先的程序(被中止的程序)时的程序计数器的值,即原先的程序履行到哪一步的信息(地址)。别的,显现CPU内部状况的信息和暂时保存的值也寄存在仓库中。
(3)假如CPU内部的信息寄存在仓库中且完结“交给”预备(入栈)后,将履行中止程序。中止程序与正在履行的程序不同且所保存的地址空间也不同,所以程序计数器的值与原先程序也彻底不同。中止程序的开端方位将被写入向量表中。开端方位该写在向量表中的哪一项取决于所发生的中止。