Purlvin's private Weblog ‹℘›

through the EyE, through the Life

多功能无线防盗装置_源程序_Baggager端

Baggager端程序:
1。main.h   文件
#ifndef _BAGAGE_MAIN_
#define _BAGAGE_MAIN_ 1
#define  uchar unsigned char
#define  uint unsigned int
#define SLEEP() PCON|=0x01  //进入休眠模式的函数
#define TIME_CONST 0x77   //软机延时的时间常数
sbit pSendSignal=P1^2;   //发送通信信号管脚    1=send
sbit pSendShutDown=P1^3;  //发送关闭信号管脚
sbit pHgDetector=P1^6;   //震动传感器管脚 0=y
#define  pLightDetector  AOUT //光敏传感器管脚 1=y
sbit pLED=P3^7;     //接收显示管脚     0=on
sbit pRecPower=P1^4;   //接收模块电源控制管脚   1=on
sbit pWarning=P1^7;    //报警管脚      1=on
#define TMR_200ms  0x16f4    //定时器工作于方式1,3.579545M  200ms
#define TMR_Send_Sleep_Num 10   //发送通信信号时间间隔常数
#define TMR_RecPower_Sleep_Num 8  //控制开启接受模块电源的时间常数
#define TMR_Watchdog_Sleep_Num  35  //报警监测的时间常数
#endif
2。main.c  文件
#include <AT892051.h>
#include “main.h”
extern bit bWarning_flag,bReceived_flag,bEn_Signal,bEn_Shutdown,bShutDown_state;
extern void delay_ms(uchar cTime_ms);
void main_init()
{
EA=0;
P1=0x73; //报警置0,接受电源置1,发送置0,LED置0
P3=0xff;
IT0=1;  //INT0:接受通信信号
EX0=1;
IT1=1;  //INT1:接受关机信号
EX1=1;
TMOD=0x10;
ET1=1;      //T1:报警监测定时(看门狗)
TH1=TMR_200ms/0x100;
TL1=TMR_200ms&0xff;
EA=1;
}
void main()
{
main_init();          //系统初始化,将开启接受模块电源,通信信号都置0,关LED
while(1)
{
if (bWarning_flag && (!bShutDown_state))  //满足报警条件且没有处在关机状态方才报警
{
pWarning=1;
delay_ms(200);
pWarning=0;
delay_ms(200);
delay_ms(200);
}
else            //否则解除报警,进入睡眠模式
{
pWarning=0;
SLEEP();
}
}
}
3。interrupt.c  文件
#include <at892051.h>
#include “main.h”
#define  uchar unsigned char
#define  uint unsigned int
bit bReceived_flag=0,bWarning_flag=0,bShutDown_state=0,bEn_Signal=0,bEn_Shutdown=0;
uchar cTmr0_num=0,cTmr1_num=0;
void delay_ms(uchar cTime_ms)       //软件延时子程序
{
uchar i;
while (cTime_ms)
{
for(i=0; i<TIME_CONST; i++);
cTime_ms–;
}
}
void RecSignal () interrupt IE0_VECTOR      //INT0:通信信号接收中断处理子程序
{
EX0=0;
if (bEn_Signal)          //屏蔽第一次的中断
{
pRecPower=0;        //关闭接受模块电源,置标志位
bReceived_flag=1;
if ((pLightDetector) || (!pHgDetector))  //检测光敏、震动传感器,处理报警标志位
bWarning_flag=1;
else bWarning_flag=0;
if (!bWarning_flag)       //在没有报警的情况下,回发通信信号
{
pSendSignal=1;
delay_ms(200);
pSendSignal=0;
}
TR1=0;          //开启报警监测中断(T1)
cTmr1_num=0;
TH1=TMR_200ms/0x100;
TL1=TMR_200ms&0xff;
TR1=1;
}
else bEn_Signal=1;
EX0=1;
}
extern void main_init();
void ShutDown () interrupt IE1_VECTOR       //INT1:关机信号接收中断处理子程序
{
EA=0;
if (bEn_Shutdown)         //屏蔽第一次的中断
{
bShutDown_state=~bShutDown_state;   //翻转关机状态标识位
pSendShutDown=1;       //回发关机信号
delay_ms(200);
pSendShutDown=0;
if (bShutDown_state)      //关机状态
{
EX0=0;         //关闭接受通信信号中断,报警监测中断
TR1=0;
bWarning_flag=0;
pWarning=1;        //长鸣给予提示
delay_ms(250);
delay_ms(250);
delay_ms(250);
pWarning=0;
}
else           //恢复正常通信状态
{
pWarning=1;        //两声短鸣给予提示
delay_ms(250);
pWarning=0;
delay_ms(250);
pWarning=1;
delay_ms(250);
pWarning=0;
main_init();       //初始化系统
bEn_Shutdown=1;
bEn_Signal=1;
}
}
else bEn_Shutdown=1;
EA=1;
}
void RecPowerSave_TimeOver () interrupt TF1_VECTOR    //T1:监测报警时间中断处理子程序
{
TR1=0;
TH1=TMR_200ms/0x100;        //重置定时器T1
TL1=TMR_200ms&0xff;
cTmr1_num++;
if (cTmr1_num==TMR_Watchdog_Sleep_Num)    //已到监测报警时间
{
cTmr1_num=0;
if (!bReceived_flag && (!bShutDown_state))   //没有收到通信信号并且没有处于关机状态,发出报警
bWarning_flag=1;
else             //将接受通信标志位清0
bReceived_flag=0;
}
else if (cTmr1_num==TMR_RecPower_Sleep_Num)   //到预定时间开启接受模块电源
{
pRecPower=1;
}
TR1=1;
}

Baggager端程序:1。main.h   文件
#ifndef _BAGAGE_MAIN_#define _BAGAGE_MAIN_ 1#define  uchar unsigned char#define  uint unsigned int#define SLEEP() PCON|=0x01  //进入休眠模式的函数#define TIME_CONST 0x77   //软机延时的时间常数 sbit pSendSignal=P1^2;   //发送通信信号管脚    1=sendsbit pSendShutDown=P1^3;  //发送关闭信号管脚sbit pHgDetector=P1^6;   //震动传感器管脚 0=y#define  pLightDetector  AOUT //光敏传感器管脚 1=ysbit pLED=P3^7;     //接收显示管脚     0=onsbit pRecPower=P1^4;   //接收模块电源控制管脚   1=onsbit pWarning=P1^7;    //报警管脚      1=on#define TMR_200ms  0x16f4    //定时器工作于方式1,3.579545M  200ms#define TMR_Send_Sleep_Num 10   //发送通信信号时间间隔常数#define TMR_RecPower_Sleep_Num 8  //控制开启接受模块电源的时间常数#define TMR_Watchdog_Sleep_Num  35  //报警监测的时间常数#endif2。main.c  文件#include <AT892051.h>#include “main.h”extern bit bWarning_flag,bReceived_flag,bEn_Signal,bEn_Shutdown,bShutDown_state;extern void delay_ms(uchar cTime_ms);void main_init(){ EA=0; P1=0x73; //报警置0,接受电源置1,发送置0,LED置0  P3=0xff;   IT0=1;  //INT0:接受通信信号  EX0=1; IT1=1;  //INT1:接受关机信号 EX1=1; TMOD=0x10; ET1=1;      //T1:报警监测定时(看门狗) TH1=TMR_200ms/0x100; TL1=TMR_200ms&0xff; EA=1;}void main(){ main_init();          //系统初始化,将开启接受模块电源,通信信号都置0,关LED while(1) {  if (bWarning_flag && (!bShutDown_state))  //满足报警条件且没有处在关机状态方才报警  {   pWarning=1;   delay_ms(200);   pWarning=0;   delay_ms(200);   delay_ms(200);  }  else            //否则解除报警,进入睡眠模式  {   pWarning=0;    SLEEP();  }
}}
3。interrupt.c  文件
#include <at892051.h>#include “main.h”
#define  uchar unsigned char#define  uint unsigned int
bit bReceived_flag=0,bWarning_flag=0,bShutDown_state=0,bEn_Signal=0,bEn_Shutdown=0;uchar cTmr0_num=0,cTmr1_num=0;
void delay_ms(uchar cTime_ms)       //软件延时子程序{ uchar i;
while (cTime_ms)  {  for(i=0; i<TIME_CONST; i++);  cTime_ms–; }}
void RecSignal () interrupt IE0_VECTOR      //INT0:通信信号接收中断处理子程序{ EX0=0;
if (bEn_Signal)          //屏蔽第一次的中断 {   pRecPower=0;        //关闭接受模块电源,置标志位   bReceived_flag=1;
if ((pLightDetector) || (!pHgDetector))  //检测光敏、震动传感器,处理报警标志位    bWarning_flag=1;   else bWarning_flag=0;
if (!bWarning_flag)       //在没有报警的情况下,回发通信信号   {    pSendSignal=1;              delay_ms(200);     pSendSignal=0;   }
TR1=0;          //开启报警监测中断(T1)   cTmr1_num=0;   TH1=TMR_200ms/0x100;   TL1=TMR_200ms&0xff;   TR1=1;
} else bEn_Signal=1;
EX0=1;
}
extern void main_init();void ShutDown () interrupt IE1_VECTOR       //INT1:关机信号接收中断处理子程序{
EA=0;
if (bEn_Shutdown)         //屏蔽第一次的中断 {   bShutDown_state=~bShutDown_state;   //翻转关机状态标识位
pSendShutDown=1;       //回发关机信号      delay_ms(200);    pSendShutDown=0;
if (bShutDown_state)      //关机状态   {    EX0=0;         //关闭接受通信信号中断,报警监测中断    TR1=0;     bWarning_flag=0;
pWarning=1;        //长鸣给予提示    delay_ms(250);    delay_ms(250);    delay_ms(250);    pWarning=0;    }   else           //恢复正常通信状态   {    pWarning=1;        //两声短鸣给予提示    delay_ms(250);    pWarning=0;    delay_ms(250);    pWarning=1;    delay_ms(250);    pWarning=0;
main_init();       //初始化系统    bEn_Shutdown=1;    bEn_Signal=1;   }
} else bEn_Shutdown=1;
EA=1;}
void RecPowerSave_TimeOver () interrupt TF1_VECTOR    //T1:监测报警时间中断处理子程序{ TR1=0;
TH1=TMR_200ms/0x100;        //重置定时器T1  TL1=TMR_200ms&0xff; cTmr1_num++;
if (cTmr1_num==TMR_Watchdog_Sleep_Num)    //已到监测报警时间 {  cTmr1_num=0;
if (!bReceived_flag && (!bShutDown_state))   //没有收到通信信号并且没有处于关机状态,发出报警   bWarning_flag=1;  else             //将接受通信标志位清0   bReceived_flag=0; } else if (cTmr1_num==TMR_RecPower_Sleep_Num)   //到预定时间开启接受模块电源 {  pRecPower=1; }
TR1=1;}

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: