• 软件复位


    /***************************************************
     *作    者 :温子祺
     *联系方式: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被触发,单片机就进行复位。

  • 相关阅读:
    Beta 冲刺(4/7)
    Beta 冲刺(3/7)
    Beta 冲刺(2/7)
    Beta 冲刺(1/7)
    福大软工 · BETA 版冲刺前准备(团队) [已完成]
    解决Mac外接显示器分辨率不正确问题
    oracle11g客户端如何完全卸载(转)
    【转】VMware设置共享文件夹之后Ubuntu中看不到怎么办?
    解决无法将程序加到默认程序打开列表中的问题(转)
    设置无线上网和本地上网的优先级
  • 原文地址:https://www.cnblogs.com/wenziqi/p/1769296.html
Copyright © 2020-2023  润新知