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端口还是 按照复位时间输出高低电平.
猜是喂狗失败 求 : 正确的喂狗命令.
但是,在while (1);循环中,即使喂狗
while (1)
{
delay(100);
WDT_CONTR |= 0x24; //启动看门狗;喂狗
}
P32端口还是 按照复位时间输出高低电平.
猜是喂狗失败 求 : 正确的喂狗命令.
看手册…… WDT_CONTR |= 0x10; // 软件看门狗清零 直接赋值。 初始化中WDT_CONTR = 0x34.
while (1)//主循环
{
delay(100);//实测100us
WDT_CONTR = 0x34;
}
烧写程序之后,mcu不断复位,屏蔽了看门狗初始化语句,主循环中喂狗语句之后。mcu正常工作。
怪哉! 小李非刀 发表于 2020-8-30 23:09
直接赋值。
手机发帖,请见上一楼回复。 平时都是用stm32系列芯片,很少接触stc到mcu。
莫非isp烧写软件设置有关系?
页:
[1]