• 软件复位


    /***************************************************
     *作    者 :温子祺
     *联系方式:wenziqi@hotmail.com
     *说    明 :软件复位的研究   
     ***************************************************/  

     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被触发,单片机就进行复位。

  • 相关阅读:
    微软面试100 题题解
    二元查找树转变成排序的双向链表(树)
    筆試
    PE注入
    内核网络通信
    哈哈哈
    OpenCV 学习
    第一次研究VM程序中的爆破点笔记
    SE2.3.4各试用限制调试笔记
    破解相关书籍
  • 原文地址:https://www.cnblogs.com/wenziqi/p/1769296.html
Copyright © 2020-2023  润新知