📄 admcptcl.lst
字号:
C51 COMPILER V8.02 ADMCPTCL 05/18/2008 16:43:12 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE ADMCPTCL
OBJECT MODULE PLACED IN AdmcPtcl.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE AdmcPtcl.C LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * 版权所有 (C)2005,深圳豪恩科技有限公司
3 *
4 * 文件名称: main.C
5 * 文件标识:
6 * 内容摘要: LHD6000主板主芯片程序,2005.12.05开始
7 * 其它说明:
8 * 当前版本: 0.000
9 * 作 者: 涂常亮(豪恩科技研发中心安全主机组)
10 * 完成日期: 2005.03.28
11 *
12 * 修改纪录1:
13 * 修改日期:
14 * 版 本 号:
15 * 修 改 人:
16 * 修改内容:
17 * 修改纪录2:
18 *******************************************************************************/
19 //#define USE_EMULATE
20
21 #ifndef AdemcoProtocol_C
22 #define AdemcoProtocol_C
23
24 #include "reg54.h"
25 #include <intrins.h>
26 #include "EEPROM.H"
27 //c_auiContactIDCode[],CONTACTID_INDEX 的宏定义在头文件"AdmcPtcl.H"中
28 #include "AdmcPtcl.H"
29 #include "Head.H"
30 /*******************************************************************************
31 * 函 数 名:
32 * 功 能:
33 * 输入参数: 无
34 * 输出参数: 无
35 * 返 回 值: 无
36 * 其它说明:
37 * 修改日期 版本号 修改人 修改内容
38 *-----------------------------------------------------------------------
39 *
40 *******************************************************************************/
41 //24C04存放是否使用ContactID的位置定义为 EEPROM_ADD_CONTACT_ID_SEL
42
43 unsigned char idata g_ucAdemcoEvtSend = 0;//原来为AdemcoAlarm()的静态变量,从 g_ucAdemcoEvts 解析出来为 4+1
- 事件码
44 ///事件发送变量
45
46 unsigned char idata g_ucAdmcCheckSum;//原来为AdemcoAlarm()的静态变量,//不需初始化
47 ///校验和
48
49 unsigned char idata g_ucTryTimes_AdmcAlm = 0;//原来为AdemcoAlarm()的静态变量,
50 ///尝试次数
51
52
53 bit g_FlagRdPrtclSel = 0;
54 ///协议选择
C51 COMPILER V8.02 ADMCPTCL 05/18/2008 16:43:12 PAGE 2
55
56 static unsigned char s_ucVar_CntctID;
57 ///ContactID静态变量
58
59 extern bit g_FlagAdmcAlmg;
60 ///安定宝正在报警
61
62 extern bit g_FlagDialNextDigit;
63 ///正在拨下一个数字标志位
64
65 extern unsigned char idata g_ucAdemcoEvts; //记录防区号,将来记录报警个数
66 ///记录安定宝(4+1或ContactID)事件号
67
68 extern unsigned char idata g_ucAlarmStage;
69 ///报警某个阶段
70
71 extern unsigned char idata g_ucLastBackRing;
72 ///回铃音暂存变量
73
74 extern unsigned char idata g_ucUserIDH;
75 extern unsigned char idata g_ucUserIDL;
76 ///用户密码占两个字节
77
78 extern unsigned char idata g_ucDialNextDigit;
79 ///要拨的下一个数字
80
81 extern bit data_receiving;
82 ///正在接收数据标志位
83
84 extern bit g_FlagPrtcl41;//24C04地址定义EEPROM_ADD_FLAG41_SEL
85 ///选择4+1还是ContactID协议
86
87 //外部函数
88 void SendHT9200(unsigned char ucDataHT9200);///DTMF发码
89
90 void Hangup(void); ///挂机
91
92
93 unsigned char ReadByte(unsigned int uiAddRead);
94 ///从24C04读一个字节
95
96 unsigned char CalcZoneType(unsigned char ucZoneNum);
97 ///根据防区号得出防区类型
98
99 bit WriteByte(unsigned char ucDataWrite, unsigned int uiAddWrite); //24C04.C;写入成功返回0
100 ///写一个字节,写地址为整形数据
101
102 bit IsBCD(unsigned char ucNum_IsBCD);
103 ///判断是否为BCD码
104
105 /*unsigned char PageFill(unsigned char const idata ucDataPgFill,
106 unsigned int uiAddStart_Fill,
107 unsigned char ucLengthFill);*/
108
109
110 void ContactID(void);
111 ///ContactID函数
112
113 void Ademco41(void);
114 ///4+1函数
115
116 void AdemcoAlarm(void);
C51 COMPILER V8.02 ADMCPTCL 05/18/2008 16:43:12 PAGE 3
117 ///向接警中心报警
118
119 /*******************************************************************************
120 * 函 数 名: void ContactID(void)
121 * 功 能: 按照CCCC+18+Q+EEE+GG+ZZZ+X格式发送ADEMCO ContactID信息。
122 * 输入参数: 无 ///但是有全局变量g_ucAlarmStage
123 * 输出参数: 无 按照发送阶段发送ContactID码
124 * 返 回 值: 无
125 * 其它说明:并不是完全按照这种格式来的,不懂。 ///080506
126 * 修改日期 版本号 修改人 修改内容
127 *-----------------------------------------------------------------------
128 *
129 *******************************************************************************/
130 void ContactID(void)
131 {
132 1 unsigned char ucTmp_CntctID; ///ContactID函数的一个中间变量
133 1 bit FlagErr_CtctID; ///出错标志位
134 1
135 1 switch (g_ucAlarmStage)///阶段
136 1 {
137 2 //数字之间要有间隔,DTMF暂停
138 2 case ADEMCO_SEND_FMT: //发送 18 //case 8:
139 2 {
140 3 SendHT9200(0x01);
141 3 g_ucAdmcCheckSum++;
142 3 g_ucAlarmStage++; ///报警阶段
143 3 }
144 2 break;
145 2 case ADEMCO_SEND_FMT + 2: //10(0x0A)
146 2 {
147 3 SendHT9200(0x08);
148 3 g_ucAdmcCheckSum += 8;
149 3 g_ucAlarmStage++;
150 3
151 3 //预先读出,减少读取24C04对时间的影响,因为别的部分可能写过24C04.
152 3 FlagErr_CtctID = 0;
153 3 if (MAX_CNTCT_EVT_NUM <= g_ucAdemcoEvtSend)
154 3 {
155 4 g_ucAdemcoEvtSend = 0;///发的个数超过了最大的ContactID事件号
156 4 }
157 3 do{
158 4 if (FlagErr_CtctID)//放在判断里面,可以顺便再次检查 g_ucAdemcoEvts,也好排版
159 4 { ///FlagErr_CtctID=1,表示什么意思。
160 5 g_ucAdemcoEvts--; ///???
161 5 g_ucAdemcoEvtSend++; ///???
162 5 if (MAX_CNTCT_EVT_NUM <= g_ucAdemcoEvtSend)
163 5 {
164 6 g_ucAdemcoEvtSend = 0;
165 6 }
166 5 }
167 4 if ((0 != g_ucAdemcoEvts) && (MAX_CNTCT_EVT_NUM >= g_ucAdemcoEvts))
168 4 {
169 5 ;
170 5 }
171 4 else
172 4 {
173 5 //后面处理和 Ademco41() 出错处理一样 if (8 <= g_ucAdemcoEvtSend)
174 5 g_ucAdemcoEvts = 0;
175 5 Hangup();
176 5 return;
177 5 }
178 4
C51 COMPILER V8.02 ADMCPTCL 05/18/2008 16:43:12 PAGE 4
179 4 s_ucVar_CntctID = ReadByte(EEPROM_ADD_CNTCT_EVT_START
180 4 +g_ucAdemcoEvtSend*BYTES_PER_CNTCT_EVTS);
181 4 ///读出事件号///单字节///b7b6是,b5b4b3b2b1b0是事件索引号
182 4 ClrWdt();
183 4 //高两位只能是01或02,b0~b5 是事件索引号
184 4 ///高两位的01或02表示什么意思?
185 4 FlagErr_CtctID = (bit) (( (( (bit)(s_ucVar_CntctID&0x80))
186 4 == ((bit)(s_ucVar_CntctID&0x40))) ) ///高两位相同都为0或
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -