lb0857 发表于 2020-8-30 18:16:35

stc15f系列看门狗喂狗失败,程序哪里出错.请教

本帖最后由 lb0857 于 2020-8-30 18:17 编辑

/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 看门狗溢出复位测试举例------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966-------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.GXWMCU.com --------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序      */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序      */
/*---------------------------------------------------------------------*/

//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//若无特别说明,工作频率一般为11.0592MHz


#include "reg51.h"
#include "intrins.h"

sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;

sfr WDT_CONTR   = 0xc1;   //看门狗控制寄存器
sbit P32      = P3^2;   //测试口

void delay(unsigned int i)
{
    while (i--)
    {
      _nop_();
      _nop_();
      _nop_();
      _nop_();
      _nop_();
    }
}

void main()
{
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
    P6M0 = 0x00;
    P6M1 = 0x00;
    P7M0 = 0x00;
    P7M1 = 0x00;

    P32 = 0;
    delay(10000);         //复位闪灯延时
    P32 = 1;
    WDT_CONTR = 0x04;       //看门狗定时器溢出时间计算公式: (12 * 32768 * PS) / FOSC (秒)
                            //设置看门狗定时器分频数为32,溢出时间如下:
                            //11.0592M : 1.14s
                            //18.432M: 0.68s
                            //20M      : 0.63s
    WDT_CONTR |= 0x20;      //启动看门狗
    while (1);
}



上面的例子,P32端口按照复位时间输出高低电平. 正常

但是,在while (1);循环中,即使喂狗
while (1)
{
delay(100);
WDT_CONTR |= 0x24; //启动看门狗;喂狗
}

P32端口还是 按照复位时间输出高低电平.

猜是喂狗失败   求 : 正确的喂狗命令.



lb0857 发表于 2020-8-30 18:18:02

但是,在while (1);循环中,即使喂狗
while (1)
{
delay(100);
WDT_CONTR |= 0x24; //启动看门狗;喂狗
}

P32端口还是 按照复位时间输出高低电平.

猜是喂狗失败   求 : 正确的喂狗命令.


jyrpxj 发表于 2020-8-30 19:10:39

看手册……

lengqing1309 发表于 2020-8-30 20:17:38

WDT_CONTR |= 0x10;                        // 软件看门狗清零       

小李非刀 发表于 2020-8-30 23:09:16

直接赋值。

lb0857 发表于 2020-8-30 23:18:38

初始化中WDT_CONTR = 0x34.

while (1)//主循环
{
delay(100);//实测100us
WDT_CONTR = 0x34;
}
烧写程序之后,mcu不断复位,屏蔽了看门狗初始化语句,主循环中喂狗语句之后。mcu正常工作。
怪哉!

lb0857 发表于 2020-8-30 23:19:41

小李非刀 发表于 2020-8-30 23:09
直接赋值。

手机发帖,请见上一楼回复。

lb0857 发表于 2020-8-30 23:22:43

平时都是用stm32系列芯片,很少接触stc到mcu。
莫非isp烧写软件设置有关系?
页: [1]
查看完整版本: stc15f系列看门狗喂狗失败,程序哪里出错.请教