📄 main.lst
字号:
203
204 UInt time0_counter; ///
205
206 extern uchar idata g_ucAdemcoEvtSend; ///接警机
207 extern uchar idata g_ucTryTimes_AdmcAlm;
208
209 ///回铃音检测用
210 ///回铃音检测看能否用另外一种方式
211 ///白工写的那种不太好
212 extern UInt data_counter_end; //计时回铃音和来电振铃间隔
213 extern UInt data_counter_begin;
214 extern UInt data_counter; ///
215
216 //位变量声明(所有位变量都有Flag来区别) //bit 区开机时被清零,0不需赋值
217 //报警相关状态
218 bit g_FlagHasAlarm = 0; //有警情
219 bit g_FlagReAdm; //原 g_FlagNewAlm 可为局部变量,g_FlagReAdm 不能为局部变量
220 bit g_FlagRecvgKBMsg; //正在接收键盘数据
221 //bit g_FlagKBRecOK; //接收结束 //只需g_FlagKBMsgProcessed?
222 bit g_FlagKBMsgProcessed = 1; //有数据需要处理时为0
223 bit g_FlagSendgKBMsg; //正在发送
224 bit g_FlagHasKBMsgSend; //有数据需要发送
225 bit g_FlagTokenSending; //正在发送令牌
226 bit g_FlagWaitKB = 1; //开始等待键盘发送数据计时
227 bit g_FlagKBIDSendg; //正在发送令牌的对象ID
228 ///设这些变量有用吗
229 ///正在发送干嘛要搞个变量
230
231 bit g_FlagSeriesPause; //发送过数据等待键盘处理数据,再发下一个数据
232 ///不是说,每个数据发送2次
233 //bit g_FlagKBPause; //发送过数据等待键盘处理数据,再发下一个数据
234 //bit g_FlagAuxPause; //发送过数据等待辅助CPU处理数据,再发下一个数据
235
236 bit g_FlagHasAuxMsgSend; //有命令需要发送到辅助CPU
237 bit g_FlagSendgAuxMsg; //正在向辅助CPU发送命令
238 bit g_FlagRecvgAUXMsg; //正在接收辅助CPU数据
239
C51 COMPILER V8.02 MAIN 05/18/2008 16:43:12 PAGE 5
240 bit g_FlagWaiting24C04Ack;
241 bit g_FlagInDelaying; //进入延时期间
242 bit g_FlagOutDelaying; //外出延时期间
243
244 bit g_FlagAuxMsgProcessed = 1; ///有数据需要处理时为0????
245 bit g_FlagHasDeleyAlarm; //有延时报警发生(已经报警,非刚触发)
246 bit g_FlagSndNewAlm; //准备取下一个需要发送的报警
247
248 //bit g_FlagForced; //胁持报警
249 bit g_FlagVoiceOn; //正在录/放音标志
250 //bit g_FlagZnExtned = 0; //标志是否有扩展防区
251 bit g_FlagAuxOK = 0;
252
253 bit g_FlagTrumpOn; //警号鸣叫中
254 bit g_FlagTrumpSel; //是否使用警笛(静音/强音报警)
255 bit g_FlagTimeArm; //是否使用定时撤布防
256 bit g_FlagRelayChang; //需要更新继电器输出
257
258 bit g_FlagSendKBTime; //需要发送时间给键盘;因为系统参数包含了时间
259 bit g_FlagArmTime = 1; //需要判断定时撤、布防标志
260 //bit g_FlagInfoOutDelayEnd; //需要通知键盘外出延时结束
261
262 bit g_FlagSecChanged; //
263
264 //电话相关
265 bit g_FlagPhoneSPkg;// = 0; //通话开始,即已经摘机
266 bit g_FlagDialPause;// = 0; //等待 5s 播下一个号码
267 bit g_FlagCalling;// = 0; //已经开始电话报警,号码拨打,可以不使用该变量 ??? .
268 bit g_FlagCallEnd = 1; //已经将当前警情报告用户,
269 bit g_FlagDialing;// = 0; //正在拨一个电话号码
270 bit g_FlagDialNextDigit;// = 0; //拨电话号码时 10ms 拨一位
271 bit g_FlagDialOK; //表示一个电话拨号拨完,等待回铃音
272 bit g_FlagPhnCmdPrcd = 1;
273 bit g_FlagDTMFRcving; //接听拨入电话后置为1
274 bit g_FlagCallInStart; //开始振铃置为1,接听回复声音音(按键)后置为0
275 bit g_FlagVoiceBlank; //播放报警类型之间的等待
276 bit g_FlagListeng; //正在监听
277
278 bit g_FlagPlayVoice; //可以使用电话播放报警声音
279 bit g_FlagSeizeOK; //有报警保持大部分时间处于摘机状态,主要是第一次不好处理,增加改变量
280 bit g_FlagPhnPwdOK; //电话输入密码正确
281
282 bit g_FlagEraseAdd;
283 bit g_FlagRecAdd;
284 //bit g_FlagAuxKBInitd; //收到辅助CPU的是否扩展防区的信息
285 bit g_FlagTrnOnTrump;
286 //密码锁定
287 bit g_FlagLckgPwd;
288 bit g_FlagChkPhnLn;
289
290 uchar idata g_ucAlarmStage = 0; //拨号前hangup会清
291 uchar idata g_ucAdemcoEvts = 0;
292
293 bit g_FlagAdmcAlmg;
294
295 bit g_FlagPrtcl41 = 0;//24C04地址定义EEPROM_ADD_FLAG41_SEL
296
297 extern bit data_receiving;
298 extern bit g_FlagRdPrtclSel;
299
300 //函数原型声明
301 void InitMCU(void); //初始化CPU设置,定时器等
C51 COMPILER V8.02 MAIN 05/18/2008 16:43:12 PAGE 6
302 void InitPeri(void); //初始化外围芯片
303 void RstUsrPwd(void);
304 void InitAux(void); //void InitAux(bit FlagInitd);
305 //void InitKeyBrd(void);
306 void ProcessKBMsg(void); //键盘通讯数据处理
307 void ProcessAuxMsg(void); //辅助CPU通讯数据处理
308 void Delay87us(void);
309 void ProcPhoneCmd(void); //处理电话命令
310 void PhoneAlarm(void); //电话拨号处理
311 void StoreAuxMsg(uchar ucAuxRecvData); //保存接收的辅助CPU的数据
312 void TimerArm(void);
313 void GoToOutGuard(void); //外出布防 //bit GoToOutGuard(void);
314 void GoToHomeGuard(void); //留守布防
315 void GoToDisguard(void); //撤防操作
316 void SendKBTime(void); //广播时间
317 void SendAlarm(void); //uchar ucAlmZn); //广播报警
318 void KBSendStart(void); ///发送键盘数据包之前,复位相关参数
319 void SendToken(void); ///这也要搞个函数,不懂
320 void AuxSendStart(void); ///发送辅助CPU数据包之前,复位相关参数
321 void Delay10ms(void);
322 void StartComeIn(void); ///啥
323 //void ManulKeyRecPlay(void);
324 void SetKBMsg(void); ///设置键盘信息
325 void SetAuxMsg(void);///设置辅助CPU信息
326
327 void SendHT9200(uchar ucDataHT9200); //发送到HT9200产生DTMF信号
328 void Hangup(void); ///挂机,执行有关变量的处理
329 void PlayAlarmVoice(void); ///播放报警语音
330 void RecvDTMF(void);
331 void DialPhone(void); //拨电话号码
332 void CheckDateTime(void);///????
333 void WatchAux(void);
334 void ChangeRly(void);
335 void ProcesClock(void);
336 void ProcesTimer(void);
337 void RcdCntctIDEvt(uchar ucEvtInd, uchar ucZone); ///????
338 void LocalAlarm(void);
339 void Rcd41Evt(uchar ucEvtInd);
340 void STOP_PHONE_INF(void); ///停止拨用户电话
341 void ProcesISD1730(void);
342
343 uchar Hex_BCD(uchar ucNumHex);
344
345 uchar BCD_Hex(uchar ucNumBCD);
346 uchar CalcZoneType(uchar ucZoneNum);
347 uchar CheckPwd(uchar const idata *buff);
348 uchar TstBit(uchar ucData);
349
350 bit RecordAlarm(uchar ucAlarmZone, uchar ucZoneType);
351 bit IsBCD(uchar ucNum_IsBCD);
352 bit ProcZnSign(uchar ucZoneNum);
353 bit IsBypass(uchar ucZoneNum);
354 bit MarkSemiAlarm(uchar ucZoneNum); //纪录进入延时报警
355 bit MarkAlarm(uchar ucZoneNum); //纪录报警
356 bit BypassOrUnbypZn(bit FlagBypassUnbyp); //处理键盘的旁路和取消旁路命令
357 //取消旁路输入参数为0
358 bit SetZoneType(void); //设置防区类型使调用该函数,执行成功返回0
359 bit ResetZoneType(void); //恢复防区类型为出厂值
360 bit SendKBSysInfo(uchar ucKBSysInfID, uchar ucSubId); //发送键盘所需系统信息
361 bit LoadSysInfo(void);
362 bit RstAllSettings(void);
363
C51 COMPILER V8.02 MAIN 05/18/2008 16:43:12 PAGE 7
364 bit StartNewSendMsg(void); ///发送新的信息,
365
366 //外部函数
367 void WriteTime(unsigned char ucRegAdd, unsigned char ucData);
368 void InitHT1380(void);
369 unsigned char ReadTime(unsigned char ucRegAdd);
370 bit WriteByte(unsigned char ucDataWrite, unsigned int uiAddWrite); //24C04.C;写入成功返回0
371 bit ResetHT1380(void);
372 unsigned char ReadByte(unsigned int uiAddRead);
373 unsigned char PageWrite(unsigned char const idata *pucDataWrt,
374 unsigned int uiAddStart,
375 unsigned char length);
376 unsigned char PageFill(unsigned char const idata ucDataPgFill,
377 unsigned int uiAddStart_Fill,
378 unsigned char ucLengthFill);
379 unsigned char checkBackRingResult(void);
380 void AdemcoAlarm(void); //向Ademco685 戒(接?)警主机发送警情信息
381
382 //ISD1730操作函数
383 void SendISD1730CmnCmd(uchar ucCmd);
384 uchar ReadStatus(void); //uchar ReadStatus(uchar idata * data p_Status);
385 void WrApcReg(uchar idata ucAPCL,uchar idata ucAPCH);
386 void PlayISD(uchar ucSect,bit FlagSpk);
387 void EraseAdd(void);
388 void RecAdd(void);
389
390 //函数实现部分。从main()开始,函数实现顺序和声明顺序相同
391 /***************************************
392 * 函数名:main()
393 * 功能: 主函数
394 ****************************************/
395 void main(void)
396 {
397 1 ClrWdt(); ///清看门狗
398 1 pin_RstAux = RST_AUX;
399 1 InitMCU(); ///初始MCU资源
400 1 Delay10ms();
401 1 pin_RstAux = !RST_AUX; //主CPU控制辅助CPU复位
402 1 for (g_ucHour=0; g_ucHour<30; g_ucHour++)
403 1 {
404 2 Delay10ms();
405 2 ClrWdt();
406 2 } ///300ms做什么
407 1 InitMCU(); ///???为什么又初始化一遍 ///单片机所有中断都打开了
408 1 InitPeri();///初始化外围IC1380,1730。
409 1
410 1 //跳线恢复用户密码
411 1 RstUsrPwd();
412 1
413 1 LoadSysInfo();///将24C04中数据读出来,初始化许多跟编程设置相关的全局变量
414 1 WriteByte(0xFF, EEPROM_ADD_CNTCT_EVT_START+MAX_CNTCT_EVT_NUM*BYTES_PER_CNTCT_EVTS
415 1 -BYTES_PER_CNTCT_EVTS); //避免开机第一个撤防不能发送
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -