930电子网

 找回密码
 立即注册
艾克姆科技推出最新产品STC32G12K128开发板
查看: 10955|回复: 0

STC15W4K32S4系列看门狗外设之程序设计

[复制链接]

101

主题

333

帖子

7428

积分

版主

Rank: 7Rank: 7Rank: 7

积分
7428
发表于 2019-8-13 09:15:50 | 显示全部楼层 |阅读模式
    1、STC15W4K32S4系列单片机的看门狗一旦开启,CPU必须在看门狗计数器没有溢出前喂狗,否则计数器一旦溢出,则系统重启。
    2、STC15W4K32S4系列单片机看门狗初始化函数及喂狗函数如下:
  • /***************************************************************************
  • * 描  述 : 看门狗初始化
  • * 入  参 : 无
  • * 返回值 : 无
  • **************************************************************************/  
  • void WDT_Init(void)  
  • {     
  •     WDT_CONTR &= 0xF7;          //IDLE_WDT位置0,看门狗定时器在空闲模式下不计数  
  •     WDT_CONTR &= 0xFB;          //PS2位置0,设置看门狗定时器预分频值  
  •     WDT_CONTR |= 0x03;          //PS1、PS0位置1,设置看门狗定时器预分频值  
  •     WDT_CONTR &= 0x7F;          //WDT_FLAG位置0,看门狗溢出标志位清零  
  •     WDT_CONTR |= 0x20;          //EN_WDT位置1,开启看门狗定时器  
  • }  
  • /***************************************************************************
  • * 描  述 : 喂狗
  • * 入  参 : 无
  • * 返回值 : 无
  • **************************************************************************/  
  • void WDG_Feed(void)  
  • {     
  •     WDT_CONTR |= 0x10;          //CLR_WDT位置1,看门狗定时器重新计数  
  • }

    注:看门狗溢出时间设置为约568.8ms。(下载时钟选择11.0592MHZ)
    3、下面分及时喂狗和没有及时喂狗两种情况介绍实验。
    1)及时喂狗时main函数设计。
  • int main()  
  • {  
  • /////////////////////////////////////////////////  
  • //注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为  
  • //      高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用  
  • //相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2  
  • //        P2.3/P2.7/P3.7/P4.2/P4.4/P4.5  
  • /////////////////////////////////////////////////  
  •       P0M1 &= 0x3F; P0M0 &= 0x3F;     //设置P0.6~P0.7为准双向口  
  •       
  •       leds_off();             //熄灭开发板上的2个指示灯(DS1和DS2)  
  •       WDT_Init();             //看门狗初始化,看门狗溢出时间约568.8ms(11.0592MHZ)  
  •       delay_ms(200);     
  •       led_on(LED_1);            //点亮蓝色指示灯DS1  
  •     while(1)  
  •     {      
  •           //软件延时200ms,该延时是模拟喂狗前实际执行用户应用代码所用时长  
  •             delay_ms(200);   
  •           //喂狗  
  •             WDG_Feed();     
  •             led_off(LED_1);          //熄灭蓝色指示灯DS1  
  •             led_toggle(LED_2);         //翻转红色指示灯DS2  
  •           //软件延时200ms,该延时是模拟喂狗后实际执行用户应用代码所用时长  
  •             delay_ms(200);               
  •     }  
  • }

    2)未及时喂狗时main函数设计。
  • int main()  
  • {  
  • /////////////////////////////////////////////////  
  • //注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为  
  • //      高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用  
  • //相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2  
  • //        P2.3/P2.7/P3.7/P4.2/P4.4/P4.5  
  • /////////////////////////////////////////////////  
  •       P0M1 &= 0x3F; P0M0 &= 0x3F;     //设置P0.6~P0.7为准双向口  
  •       
  •       leds_off();             //熄灭开发板上的2个指示灯(DS1和DS2)  
  •       WDT_Init();             //看门狗初始化,看门狗溢出时间约568.8ms(11.0592MHZ)  
  •       delay_ms(200);     
  •       led_on(LED_1);            //点亮蓝色指示灯DS1  
  •     while(1)  
  •     {      
  •           //软件延时200ms,该延时是模拟喂狗前实际执行用户应用代码所用时长  
  •             delay_ms(200);   
  •           //喂狗  
  •             WDG_Feed();     
  •             led_off(LED_1);          //熄灭蓝色指示灯DS1  
  •             led_toggle(LED_2);         //翻转红色指示灯DS2  
  •           //软件延时500ms,该延时是模拟喂狗后实际执行用户应用代码所用时长  
  •             delay_ms(500);               
  •     }  
  • }







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|官方淘宝店|930电子网 ( 皖ICP备16000695号-2 )

Copyright © 合肥艾克姆电子科技有限公司
快速回复 返回顶部 返回列表