单片机在从断电到重新通电再次启动时,称为冷启动。冷启动时,单片机内部所有的寄存器都处于未知状态,需要通过一定的操作使其进入可控状态,才能执行后续代码。
单片机冷启动有两种情况:一种是断电再通电;另一种是系统复位。无论哪种情况,单片机都需要进行冷启动的操作。
在单片机冷启动过程中,有几个关键的寄存器需要被重置:
1、堆栈指针寄存器(SP):用于指向栈顶地址,需要初始化为合适的值;
2、程序计数器寄存器(PC):用于指向下一个将要执行的指令地址,需要初始化为程序的入口地址或复位向量地址;
3、状态寄存器(SR):用于标识进位、溢出、零、负等标志位,需要初始化为默认值;
4、其他相关寄存器:例如中断屏蔽寄存器(IMR)、模式寄存器(MODER)等,都需要原始状态被清零或初始化。
当单片机处于冷启动状态时,大体过程如下:
1、硬件初始化:包括系统时钟、芯片软件保护机制等硬件初始化操作;
2、寄存器初始化:将寄存器赋初值或清零;
3、系统初始化:包括外设初始化、程序初始化、堆栈初始化等操作;
4、进入正常代码流程执行。
有多种方式可以实现单片机的冷启动,常见的几种方式如下:
1、复位:单片机提供硬件复位和软件复位两种方式。硬件复位通过将复位信号拉低来实现,软件复位通过某条特殊指令实现(不同单片机指令不同);
2、掉电检测(PDR):单片机集成了掉电检测模块,当系统掉电后重新上电,该模块会产生一个复位信号;
3、看门狗定时器(WDT):当程序到达一定步骤后,由看门狗定时器进行定时,如果计数器归零,就会发生复位;
4、外部中断:外部信号产生中断机制,当外部信号变化并满足触发条件时,单片机通过中断响应进入中断服务程序,完成各种初始化操作。