/************ STM8S103 看門狗測試 ******/
/*芯片型號:STM8S103F3 */
/*功能描述:STM8S103 看門狗測試 */
/**************************************************/
#include <iostm8s103f3.h>
#define uint unsigned int
#define uchar unsigned char
#define LED PC_ODR_ODR5 //輸出LED控制口
void delayms(unsigned int count);//延時程序
void IO_config(void); //端口配置
/***************延時子程序start****************/
void delayms(unsigned int count)
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}
/*************延時子程序end*****************/
void IO_config(void)
{
CLK_CKDIVR = 0x08; //內部8M
PC_DDR = 0x20; // PC5為輸出,其它全為輸入
PC_CR1 = 0xFF; // 設置PC5推挽輸出,其它輸入IO端口上拉使能
PC_CR2 = 0x00;
}
int main(void)
{
uchar i;
IO_config();//端口初始化
LED=0;
IWDG_KR = 0xCC; //當IWDG_KR被寫入數值0xCC,獨立看門狗被啟動了
IWDG_KR = 0x55; //解除 PR 及 RLR 的寫保護
IWDG_RLR = 0xff; //看門狗計數器重裝載數值
IWDG_PR = 0x06; //分頻系數為256,最長超時時間為:1.02S
IWDG_KR = 0xAA; //恢復 PR 及 RLR 的寫保護狀態
for(i=0;i<10;i++)
{
delayms(500);
IWDG_KR = 0xAA; //刷新IWDG(喂狗)。每當KEY_REFRESH的數值(0xAA)寫入到IWDG_KR寄存器時,
//獨立看門狗將用IWDG_RLR的數值刷新計數器的內容,從而避免了產生看門狗的復位。
}
LED=1;
while(1); //如果沒有喂狗,就復位
}
|