英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流
标题:
PICC中断养狗喂狗演示
[打印本页]
作者:
winnie
时间:
2009-4-14 15:13
标题:
PICC中断养狗喂狗演示
#include <pic.h>
/*--------------------------------------------------------
PIC疯狗演示程序
“论据”见菜地里来了一条疯狗(中断养狗喂狗演示)
---------------------------------------------------------*/
persistent unsigned int RamTest;//内存自检标志
void SystemInit(void);
void SystemIoInit(void);
void SystemTmrInit(void);
union {
struct {
unsigned b0: 1;
unsigned b1: 1;
unsigned b2: 1;
unsigned b3: 1;
unsigned b4: 1;
unsigned b5: 1;
unsigned Wdt: 1;//软件疯狗
unsigned Work: 1;
}Bit;
unsigned char Bits;
}SystemFlag;//系统标志
typedef struct Systemstruct{//系统数据结构
unsigned char T0Count;
}SystemData;
SystemData SystemBuffers;//申请系统数据结构
/*-------------------------*/
void SystemInit(void)
{
SystemBuffers.T0Count = 0;
SystemFlag.Bits = 0;
if (RamTest != 0x55aa) {//内存被破坏
/*-------------------------------------
系统上电初始化
--------------------------------------*/
RamTest = 0x55aa;
}
SystemIoInit();
SystemTmrInit();
}
void SystemTimerInit(void)
{
OPTION = 0x08;
}
void SystemIoInit(void)
{
TRISA = 0b11111111;
PORTA = 0b00000000;
}
void SystemTmrInit(void)
{
TMR0 = -80;//为方便演示,随便设个值
T0CS = 0;//TMR0工作于定时器方式
PSA = 1;//TMR0不用分频
}
void main(void)
{
SystemInit();//系统初始化
for (;;) //主循环(不运行任何程序,所有程序都在中断中处理)
{
SystemFlag.Bit.Wdt = 1;//喂软狗(置标志)
T0IE = 1;//开放TMR0中断
ei();//打开总中断开关
}
}
void interrupt ISR(void) //中断服务程序
{
if (T0IE && T0IF) //判TMR0中断
{
T0IF = 0; //清除TMR0 中断标志
TMR0 = -80;//为方便演示,随便设个值
if ((SystemFlag.Bit.Wdt) && (RamTest == 0x55aa)) {
/*-------------------------------------------------------
主循环中若清过软狗定时器或内存没被破坏,才能喂狗
--------------------------------------------------------*/
CLRWDT();//在此喂这条到处挨骂的疯狗!!!
SystemFlag.Bit.Wdt = 0;//清除软狗定时器(清标志)
}
else {
/*-------------------------------------------
程序飞捕捉
--------------------------------------------*/
di();
PCLATH = 0;
PCL = 0;//goto main;
}
/*-------------------------------------------
在此加入TMR0中断服务
--------------------------------------------*/
}
if (TMR1IE && TMR1IF) //判TMR1 中断
{
TMR1IF = 0; //清除TMR1 中断标志
/*-------------------------------------------
在此加入TMR1中断服务
--------------------------------------------*/
}
/*-------------------------------------------
其他任务处理
--------------------------------------------*/
}//中断结束并返回
欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/)
Powered by Discuz! X3.2