软件复位

/***************************************************
 *作    者 :温子祺
 *联系方式:[email protected]
 *说    明 :软件复位的研究   
 ***************************************************/  

 ISP_CONTR:ISP/IAP控制寄存器

 

D7

D6

D5

D4

D3

D2

D1

D0

复位值

ISPEN

SWBS

SWRST

-

-

WT2

WT1

WT0

000x,0000

 

  • SWBS当设置为0时,软件复位后从用户应用程序区启动;当设置为1时,软件复位从ISP程序区启动,。要与SWRST直接配合才可以实现。 

 

  • SWRST当设置为0时,不执行软件复位;当设置为1时,产生软件系统复位,硬件自动清零。

 

    该复位是整个系统复位,所有的特殊功能寄存器都会复位到初始值,I/O口也会初始化。

 

【例子】通过按键中断来使MCU软件复位,复位后闪烁LED灯一段时间,然后MCU保持当前状态,空转。若要继续使LED重新闪烁,要求MCU复位来进行。

 

软件复位代码:

 

  
    
1 #include " stc.h "
2
3   #define LED_PORT P2 // 定义LED控制端口为P2口
4
5   /* *******************************************
6 *函数名称:Delay
7 *输 入:无
8 *输 出:无
9 *说 明:延时一段时间
10 ******************************************* */
11   void Delay( void )
12 {
13 unsigned char i,j;
14
15 for (i = 0 ;i < 130 ;i ++ )
16 for (j = 0 ;j < 255 ;j ++ );
17 }
18   /* *******************************************
19 *函数名称:SoftReset
20 *输 入:无
21 *输 出:无
22 *说 明:软件复位MCU
23 ******************************************* */
24   void SoftReset( void )
25 {
26 ISP_CONTR = 0x20 ;
27 }
28   /* *******************************************
29 *函数名称:EXTInit
30 *输 入:无
31 *输 出:无
32 *说 明:外部中断初始化
33 ******************************************* */
34   void EXTInit( void )
35 {
36 EX1 = 1 ; // 允许外部中断1中断
37   IT1 = 0 ; // 低电平触发
38   EA = 1 ; // 允许所有中断
39   }
40   /* *******************************************
41 *函数名称:main
42 *输 入:无
43 *输 出:无
44 *说 明:函数
45 ******************************************* */
46 void main( void )
47 {
48 unsigned char i;
49
50 EXTInit(); // 外部中断初始化
51
52 for (i = 0 ;i < 20 ;i ++ ) // 循环闪烁LED灯
53 {
54 LED_PORT =~ LED_PORT;
55 Delay();
56 }
57
58 while ( 1 )
59 {
60 ; // 空操作
61 }
62 }
63 /* *******************************************
64 *函数名称:EXT1IRQ
65 *输 入:无
66 *输 出:无
67 *说 明:外部中断1中断服务函数 复位操作
68 ******************************************* */
69 void EXT1IRQ( void )interrupt 2
70 {
71 SoftReset();
72 }
73

 

代码分析:

SoftReset是复位操作函数,对ISP/IAP控制寄存器ISP_CONTR赋值位0x20,即将ISP_CONTR

中“SWRST”置1来进行软件复位。要说明的是这里的软件复位是真正意义上的复位,同硬件复位的效果一模一样。

在main函数中,初始化外部中断后进行LED灯闪烁一阵时间,然后进入while(1)死循环进行空操作。

软件复位操作放在外部中断1中断服务函数函数当中,只要外部中断1被触发,单片机就进行复位。

你可能感兴趣的:(软件)