51单片机(十二)—— 单片机复位

一、复位介绍

        复位为单片机提供了一条从已知初始条件启动处理的途径。复位期间,大部分控制和状态寄存器被迫使用初始值,单片机的外围模块被禁止,单片机用于复位的复位源有加电复位、外部RESET管脚复位、看门狗复位等。

         我们实验对应的硬件复位电路,如下图所示。

         这个图中集成了51单片机和AVR单片机的复位电路,对于51单片机,将J12上的跳线帽跳到左侧,则左侧的电路与单片机的复位引脚相连,正常情况由于R14的下拉作用,单片机的复位引脚为低电平,单片机正常工作,如果按下按键,VCC与单片机复位引脚相连,单片机产生复位。

二、例程测试

1、硬件复位

        这个实验我们来测试硬件复位功能,测试代码的主要部分如下所示,完整代码可以从本文资源中下载。

void main (void)
{
	unsigned char j;
	for(j=0;j<5;j++)       //LED灯闪烁5次
	{
		LED1=0;            //将P00口赋值0,对外输出低电平,灯点亮。
		delay(30000);      //调用延时函数
		LED1=1;            //将P00口赋值1,对外输出高电平,灯熄灭。
		delay(30000);      //调用延时函数
	}
	for(;;);
}

        在这个代码中,LED1闪烁5次,然后进入死循环。将代码烧写到单片机中并运行,LED1闪烁5次,按下复位按键,则LED1重新闪烁5次,说明单片机产生了复位,程序重新从头开始运行。

2、软件复位

        这个实验的代码如下所示

void main (void)
{
	unsigned char j;
	for(j=0;j<5;j++)       //LED灯闪烁5次
	{
		LED1=0;            //将P00口赋值0,对外输出低电平,灯点亮。
		delay(30000);      //调用延时函数
		LED1=1;            //将P00口赋值1,对外输出高电平,灯熄灭。
		delay(30000);      //调用延时函数
	}
	delay(60000);    //延时
	delay(60000); 	 //延时
	delay(60000); 	 //延时
	ISP_CONTR=0x20;  //软件复位
	for(;;);
}

         从代码中可以看到,上电之后LED1闪烁5次,然后延时,之后通过ISP_CONTR=0x20;语句将单片机软件复位。
将代码烧写到单片机中,LED1闪5下之后熄灭。过几秒之后,又闪5下,如此反复。

发布了97 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/bhniunan/article/details/104398965