⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 内容摘要: LHD6000主板主芯片程序 ISD1730时序说明: 参考:void Send_1Byte(uchar ucData_s)和uchar Receive_1Byte(void)的说明.
💻 C
📖 第 1 页 / 共 5 页
字号:
/*******************************************************************************
* 版权所有 (C)2005,深圳豪恩科技有限公司
*
* 文件名称:  main.C
* 文件标识:
* 内容摘要: LHD6000主板主芯片程序,2006-10-30开始
* 其它说明:
* 当前版本: 0.000
* 作    者:  涂常亮(豪恩科技研发中心安全主机组)
* 完成日期: 2005.03.28
*
* 修改纪录1:
*    修改日期: .
*    版 本 号: .
*    修 改 人: .
*    修改内容: .
* 修改纪录2:
*******************************************************************************/
#include "reg54.h"
#include <intrins.h>
#include "EEPROM.H"
#include "MACRO.H"
#include "AdmcPtcl.H"
#include "Head.H"
#include <ABSACC.H>

#define CUR_VER 0x10
//数据类型定义
typedef unsigned char uchar;
typedef unsigned int  UInt;

//uchar pdata g_aucpTst[256];
//uchar xdata g_aucxTst[512];

//管脚定义
sbit pin_Listen         = P0^5;     //现场监听控制,允许监听时有效,低电平有效
sbit pin_Spk            = P0^6;     //控制主机喇叭,使用喇叭放音时有效,低电平有效
sbit pin_VoiceToPhone   = P0^7;     //拨号,现场监听和电话报警时有效,低电平有效

#define RST_AUX     1   //ATmel 89s52 高电平复位
sbit pin_RstAux         = P1^5;
sbit pin_RstUsePwd      = P1^6;

sbit pin_PickPhone      = P2^0;     //摘机 PCB上的ZJ
sbit pin_DTMFRecvDV     = P2^1;     //电平有效,表示收到有效的DTMF信号,PCB上的9170INT
sbit pin_TakeLine       = P2^2;     //抢线 PCB上的QX
sbit pin_ISD1420Play    = P2^4;
sbit pin_LedArm         = P2^3;
sbit pin_ISD1420Rec     = P2^5;
sbit pin_LedAlarm       = P2^6;     //高电平发送,低电平接收
sbit pin_SelAux         = P2^7;     //高电平和辅助CPU通讯,低电平和键盘通讯
///选择与键盘或辅助cpu通讯
sbit pin_Int0           = P3^2;
//电话
sbit pin_DTMFRecvOE     = P1^7;
sbit pin_LineWave       = P3^3;
sbit pin_DTMFGenCE      = P3^4;
sbit pin_RingRecv       = P3^5;
sbit pin_DTMFGenCLK     = P3^6;
sbit pin_DTMFGenDat     = P3^7;

#define DTMF_RECVD      (!pin_DTMFRecvDV)

//全局变量声明(使用g_开头)
//字符型(有uc标志,加a表示是数组)

uchar data g_aucKBRecvdBuff[KB_RECV_BUFF_LEN];     //可以少一个 !!
uchar data g_aucKBSendBuff[KB_SEND_BUFF_LEN];      //键盘发送缓存,无校验字节长度为12
                ///没有2级缓存吗
//uchar idata g_aucKBSendingBuff[KB_SEND_BUFF_LEN];   //键盘正在发送到数据
uchar data g_aucKBUsingBuff[KB_USING_BUFF_LEN];     //接收或者发送时使用的暂存区
uchar data g_aucAuxRecvdBuff[AUX_RECV_BUFF_LEN];   //辅助CPU已接收缓存
uchar data g_aucAuxRecvgBuff[AUX_RECV_BUFF_LEN];   //辅助CPU正在接收使用缓存
uchar data g_aucAuxSendBuff[AUX_SEND_BUFF_LEN];    //辅助CPU数据发送缓存
uchar data g_aucAuxSendgBuff[AUX_SEND_BUFF_LEN];   //辅助CPU发送寄存器// !! 可以和键盘共用
//uchar idata //;                      //防区类型,使用压缩BCD码每个字节纪录两个防区类型
                                                    //按顺序:1~16有线,21~28无线,41~48键盘有线

uchar idata g_aucArmTimeH[3];                       //定时布防小时
uchar idata g_aucArmTimeM[3];                       //定时布防分钟
uchar idata g_aucDisarmTimeH[3];                    //定时撤防小时
uchar idata g_aucDisarmTimeM[3];                    //定时撤防分钟
uchar idata g_aucRepeatKBMsg[2] = {0, 0};           //键盘数据发送次数
            //g_aucRepeatKBMsg[1]表示g_aucKBSendBuff需要重复次数,0表示senging需要次数
uchar data g_aucRepeatAuxMsg[2] = {0, 0};
uchar idata g_aucDTMFBuff[5];

uchar idata g_ucTimer24C04Ack;            //24C04写入等待
uchar data g_ucTimerWaitKB = TIME_WAIT_KB_1_PKG;   //等待键盘发送的定时,令牌发送结束开始定时
	      ///等待键盘发送的定时
uchar data g_ucKBMsgPointer;                       //接收/发送计数器,为1表示收到一个字节/已发送一个字符  //可以用静态?
uchar data g_ucKBCheckSum;                         //校验和

uchar data g_ucAuxSndPnt;                          //辅助CPU数据发送/接收指针
uchar data g_ucAuxRecvPnt;                         //辅助CPU数据接收指针
uchar data g_ucAuxCheckSum_S;                      //辅助CPU数据通讯发送校验和
uchar data g_ucAuxCheckSum_R;                      //辅助CPU数据通讯接收校验和

uchar data g_ucTimerWaitAux = TIME_WAIT_AUX_1_PKG; //向辅助CPU发送一次的时间定时
uchar data g_ucTimerSerPause = TIME_SERIES_PAUSE_KB;
//uchar data g_ucTimerAuxPaus = TIME_WAIT_AUX_1_PKG; //向辅助CPU发送一次的时间定时
//uchar data g_ucTimerKBPaus = TIME_SERIES_PAUSE_KB;

uchar idata g_ucUserIDH;                            //用户ID号
uchar idata g_ucUserIDL;

uchar idata g_ucTmLed;  //LED闪烁计时
uchar idata g_ucAuxTm;

//报警状态定义
uchar idata g_ucPreWrZnStatus = 0;
uchar idata g_ucTimerSndAlm; //多个报警时,发送报警之间的间隔计时
//uchar idata g_ucSndAlm; //记录已发送到键盘的报警,以位表示
//uchar data g_ucAlmdZn[3]; //记录发生报警的防区,以位表示,无线16个,有线4个,防拆,紧急
                          //胁持不记录,密码锁定不记录立即发送.
uchar idata g_aucSndAlm[3]={0,0,0}; //记录已发送到键盘的报警,以位表示,单元0对应无线1~8,1对应无线9~16,2对应有线
uchar idata g_ucAlmNxtSnd;
uchar idata g_ucTypNxtSnd;

//uchar data g_aucAlarm[3];
uchar data g_ucAlmWrlsZn = 0;                       //无线防区1~8报警标志
//#define g_ucAlmWrlsZn g_aucAlarm[0]
uchar idata g_ucBypassWrlsZn;                       //无线防区1~8旁路标志,0表示被旁路
uchar idata g_ucSemiAlarmWrlsZn = 0;                //无线防区1~8进入延时触发标志

//#define g_ucAlarmWrlsZnH g_aucAlarm[1]
uchar data g_ucAlarmWrlsZnH = 0;                    //无线防区9~16报警标志
uchar idata g_ucBypassWrlsZnH;                      //无线防区9~16旁路标志,0表示被旁路
uchar idata g_ucSemiAlmWrlsZnH = 0;                 //无线防区9~16进入延时触发标志 // !!!! .

//#define g_ucAlarmWireZone g_aucAlarm[2]
uchar data g_ucAlarmWireZone = 0;                   //有线防区报警标志 D7-D0对应防区8~1
uchar data g_ucBypassWrZn;                          //有线防区旁路标志,0表示被旁路,
uchar data g_ucSemiAlarmWrZn = 0;                   //有线防区进入延时触发标志

uchar data g_ucAlarmOth = 0;                        //D5是主机防拆(防区号30),
                                                    //D6是遥控和键盘紧急按钮(17),
                                                    //D7是胁持密码报警(18)
                                                    //D0 位表示是否交流掉电
                                                    //D1 位表示是否直流欠压
                                                    //D2 位表示是否电话掉线
uchar idata g_ucAlarmTimer = 0; //键盘报警需要.
#define PHONE_LOSE_LINE (0 != (g_ucAlarmOth & (0x01 << 2)))
uchar idata g_ucBypassOth;                          //0表示被旁路//可以合并到 g_ucBypassWrZn !! .
uchar idata g_ucAlarmTypes = 0;                     //当前发生过的报警类型的记录
uchar idata g_ucOutDelay;                           //布防延时设置,10秒为单位  //BCD码
uchar idata g_ucCominDelay;                         //进入延时设置,10秒为单位  //BCD码
//uchar idata g_ucCountSemiAlarms = 0;                //发生进入延时报警个数;
bit g_FlagSemAlm;

uchar data g_ucArmStatus;                          //当前撤布防状态
                                                    //1外出,2留守,3撤防,4外出延时,5进入延时
uchar idata g_ucRingsAnsw;                          //自动接听电话所需的振铃次数,99 表示不接受电话控制
uchar data g_ucRings;                              //已经振铃次数

uchar idata g_ucUserPwdH;                           //用户密码
uchar idata g_ucUserPwdL;
uchar idata g_ucGuestPwdH[5];                       //操作密码
uchar idata g_ucGuestPwdL[5];
uchar data g_ucHistPnt;                            //历史纪录的指针,指向将来的下一记录(0~39)
//uchar idata*/ g_ucKBSysInfID = 1;                     //发送系统信息时使用该变量指示发送对象
//日期时间的变量定义
//uchar idata g_ucYear;
//uchar idata g_ucMonth;
//uchar idata g_ucDate;
uchar idata g_ucHour;
uchar idata g_ucMinute;
uchar idata g_ucSecond;

//uchar data s_uc10Ms;                               //10毫秒数
//uchar idata g_ucTmICStart;                          //起振计时
uchar data g_ucAuxNullMsgTime = 200;               //2s定时发送,//开始协议5s //在定时器0中处理
uchar data g_ucWatchAuxTimer = TIME_AUX_ERR;       //11s没有收到数据复位 //在定时器0里1s中处理,
uchar data g_ucSeriesStop = TIME_NO_SER_INT;       //计时多久没有进串口中断,

uchar data g_ucTrumpTime;                        //警号鸣叫时间计时,默认10分钟
uchar data g_ucRelayType;                        //继电器输出类型,默认火警输出,类型为2

//电话相关
uchar idata g_ucTelExist;
uchar idata g_ucPhoneIndex = 0;                 //记录报警时拨打的电话是第几个号码。
uchar idata g_ucTimerDialPause;             //拨两个号码之间的延时定时器
uchar idata g_ucAlarmTypePlayed;            //已经向用户播报过的报警防区类型,在播通一个号码时清零
uchar idata g_ucCallgTimers;                //记录拨打第几遍电话
uchar idata g_ucDTMFPnt = 0xFF;

uchar idata g_ucDialNextDigit;              //向HT9200发送两个数字之间的间隔定时

uchar idata g_ucTimerPhoneKey;              //用户拨入进行远程控制时,允许的按键时间间隔
uchar idata g_ucTimerVoiceBlank;            //电话报警播放语音之间的间隔计时
uchar idata g_ucVoiceTimes;                 //语音播放遍数
uchar idata g_ucLastBackRing;
uchar idata g_ucPhnPwdTimes;                //拨入电话时密码输入错误次数
uchar idata g_ucTelRndTm = 0; ///?????

bit g_FlagRoundPause;  ///????

//整型变量声明
UInt idata g_uiVoiceTimer;                  //ISD1420 录/放音计时,使用倒计时方式
UInt idata g_uiArmDelayTimer;               //布防延时和进入延时共用的定时器寄存器,1s减1
UInt idata g_uiTrumpTimer;                  //警号计时,1s减1
UInt idata g_uiPhoneTm;                     //拨号后计时//2006-8-23

UInt time0_counter;	 ///

extern uchar idata g_ucAdemcoEvtSend; ///接警机
extern uchar idata g_ucTryTimes_AdmcAlm;

///回铃音检测用
///回铃音检测看能否用另外一种方式
///白工写的那种不太好
extern UInt data_counter_end;               //计时回铃音和来电振铃间隔
extern UInt data_counter_begin;
extern UInt data_counter;  ///

//位变量声明(所有位变量都有Flag来区别) //bit 区开机时被清零,0不需赋值
//报警相关状态
bit g_FlagHasAlarm = 0;         //有警情
bit g_FlagReAdm; //原 g_FlagNewAlm 可为局部变量,g_FlagReAdm 不能为局部变量
bit g_FlagRecvgKBMsg;           //正在接收键盘数据
//bit g_FlagKBRecOK;            //接收结束    //只需g_FlagKBMsgProcessed?
bit g_FlagKBMsgProcessed = 1;   //有数据需要处理时为0
bit g_FlagSendgKBMsg;           //正在发送
bit g_FlagHasKBMsgSend;         //有数据需要发送
bit g_FlagTokenSending;         //正在发送令牌
bit g_FlagWaitKB = 1;           //开始等待键盘发送数据计时
bit g_FlagKBIDSendg;            //正在发送令牌的对象ID
///设这些变量有用吗
///正在发送干嘛要搞个变量

bit g_FlagSeriesPause;          //发送过数据等待键盘处理数据,再发下一个数据
        ///不是说,每个数据发送2次
//bit g_FlagKBPause;              //发送过数据等待键盘处理数据,再发下一个数据
//bit g_FlagAuxPause;             //发送过数据等待辅助CPU处理数据,再发下一个数据

bit g_FlagHasAuxMsgSend;        //有命令需要发送到辅助CPU
bit g_FlagSendgAuxMsg;          //正在向辅助CPU发送命令
bit g_FlagRecvgAUXMsg;          //正在接收辅助CPU数据

bit g_FlagWaiting24C04Ack;
bit g_FlagInDelaying;           //进入延时期间
bit g_FlagOutDelaying;          //外出延时期间

bit g_FlagAuxMsgProcessed = 1; ///有数据需要处理时为0????
bit g_FlagHasDeleyAlarm;        //有延时报警发生(已经报警,非刚触发)
bit g_FlagSndNewAlm;            //准备取下一个需要发送的报警

//bit g_FlagForced;               //胁持报警
bit g_FlagVoiceOn;              //正在录/放音标志
//bit g_FlagZnExtned = 0;         //标志是否有扩展防区
bit g_FlagAuxOK = 0;

bit g_FlagTrumpOn;              //警号鸣叫中
bit g_FlagTrumpSel;             //是否使用警笛(静音/强音报警)
bit g_FlagTimeArm;              //是否使用定时撤布防
bit g_FlagRelayChang;           //需要更新继电器输出

bit g_FlagSendKBTime;           //需要发送时间给键盘;因为系统参数包含了时间
bit g_FlagArmTime = 1;          //需要判断定时撤、布防标志
//bit g_FlagInfoOutDelayEnd;      //需要通知键盘外出延时结束

bit g_FlagSecChanged;           //

//电话相关
bit g_FlagPhoneSPkg;// = 0;        //通话开始,即已经摘机
bit g_FlagDialPause;// = 0;        //等待 5s 播下一个号码
bit g_FlagCalling;// = 0;          //已经开始电话报警,号码拨打,可以不使用该变量 ??? .
bit g_FlagCallEnd = 1;          //已经将当前警情报告用户,
bit g_FlagDialing;// = 0;          //正在拨一个电话号码
bit g_FlagDialNextDigit;// = 0;    //拨电话号码时 10ms 拨一位
bit g_FlagDialOK;               //表示一个电话拨号拨完,等待回铃音
bit g_FlagPhnCmdPrcd = 1;
bit g_FlagDTMFRcving;           //接听拨入电话后置为1
bit g_FlagCallInStart;          //开始振铃置为1,接听回复声音音(按键)后置为0
bit g_FlagVoiceBlank;           //播放报警类型之间的等待
bit g_FlagListeng;              //正在监听

bit g_FlagPlayVoice;            //可以使用电话播放报警声音
bit g_FlagSeizeOK;              //有报警保持大部分时间处于摘机状态,主要是第一次不好处理,增加改变量
bit g_FlagPhnPwdOK;             //电话输入密码正确

bit g_FlagEraseAdd;
bit g_FlagRecAdd;
//bit g_FlagAuxKBInitd;           //收到辅助CPU的是否扩展防区的信息
bit g_FlagTrnOnTrump;
//密码锁定
bit g_FlagLckgPwd;
bit g_FlagChkPhnLn;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -