?? leakage.lst
字號(hào):
C51 COMPILER V8.05a LEAKAGE 11/26/2007 12:52:43 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE LEAKAGE
OBJECT MODULE PLACED IN leakage.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE leakage.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //--------------------------------------------------------------
2 //這是個(gè)電力線路電壓/電流/漏電檢測告警系統(tǒng)
3 //--------------------------------------------------------------
4 //系統(tǒng)CPU: LPC935
5 //文件名: leakage.c
6 //版本: rev 1.0
7 //日期: 2007-9-1
8 //描述:
9 //-------------------------------------------------------------
10 //修改人:
11 //日期:
12 //描述:
13 //-------------------------------------------------------------
14
15 #include<reg935.h>
16 #include<absacc.h>
17 #include<intrins.h>
18 #include<UserDef.h>
19
20 sbit powerSwitchControl = P0^5;
21 sbit workIndication = P2^0;
22 sbit light = P1^4 ;
23 sbit lightControl = P1^6 ;
24
25
26 uchar bdata flagReg;
27 sbit initFlag = flagReg^0;
28 sbit writeEEPROMBufFullFlag = flagReg^1; //EEPROM寫滿標(biāo)志
29 sbit leakageCurrentAlarm = flagReg^2; //漏電報(bào)警標(biāo)志
30 sbit sampleTimeFlag = flagReg^3; //采樣時(shí)間
31 sbit curTransErrFlag = flagReg^4; //
32 sbit batTransErrFlag = flagReg^5; //
33 sbit allDataTransErrFlag = flagReg^6; //
34 sbit recErrorFlag = flagReg^7; //
35
36 uchar bdata rdDataFlagReg;
37 sbit timeVerifyFlag = rdDataFlagReg^0; //
38 sbit rdCurDataFlag = rdDataFlagReg^1; //
39 sbit rdBatDataFlag = rdDataFlagReg^2; //
40 sbit rdAllDataFlag = rdDataFlagReg^3; //
41
42 sbit delaySwitchFlag = rdDataFlagReg^4; //延時(shí)關(guān)閘刀
43
44 //uchar data recClrCommandData[2]; //暫存清存儲(chǔ)器的起始地址[0]=高位[1]=低位
45 uchar data recPresetData[4]; //暫存預(yù)置信息, [0]--消控類型,[1]--漏電流閾值,[2]--延時(shí)小時(shí)數(shù),[3]--延時(shí)
-分鐘數(shù)
46 uint data delayTime;
47
48 extern uint idata delayCount;
49
50 uchar data recRdBatDataSize[2]; //暫存讀的批量數(shù),最大512 批次,[0]--高位;[1]--低位
51
52 uchar data recStatus, recDataSize, recCommandBuf, recChkSum;
53 uchar data recDataCnt;
54
C51 COMPILER V8.05a LEAKAGE 11/26/2007 12:52:43 PAGE 2
55 //發(fā)送數(shù)據(jù)緩沖器, [0]=address [1]=command [2]=size [3..(3+size-1)]=data(0)..data(size-1)
56 uchar xdata transDataBuf[EEPROM_PAGE_SIZE+3];//EEPROM_PAGE_SIZE = 128
57 uchar data transDataSize, transCheckSum;
58 uchar data transDataPtr;
59
60 uchar xdata writeEEPROMBuf[EEPROM_PAGE_SIZE];
61 uchar data wrEEPROMBufPtr;
62
63 uint data EEPROMWrAddr = EEPROM_ORG_ADDR; //寫EEPROM 地址指針
64 uint data EEPROMRdAddr = EEPROM_ORG_ADDR; //讀EEPROM 地址指針
65
66
67 extern uchar data recCurrentTimeBuf[7]; //暫存當(dāng)前時(shí)間緩沖器[0]=世紀(jì)[1]=年[2]=月[3]=日[4]=時(shí)[5]=分[6]
-=秒
68
69 extern uchar data lineVolt[3]; //[0] 保存A 相電壓,[1] 保存B 相電壓 ,[2] 保存C 相電壓
70 extern uchar data lineCurrent[3]; //[0] 保存A 相電流,[1] 保存B 相電流 ,[2] 保存C 相電流
71
72 extern uchar data leakageCurrentMsg[3]; //漏電信息
73 /*漏電信息
74 [0]--漏電情況,1: 有漏電; 0: 無漏電
75 [1]--漏電電流值
76 [2]--漏電線路,1: 表示A相漏電;2: 表示B相漏電; 3:表示C相漏電
77 */
78
79 uchar idata delaySwitchOrgCnt[3];
80 uchar idata delaySwitchEndCnt[3];
81
82 void Delay(uchar);
83 void Lpc935Init(void);
84 uchar ReadID(void);
85 void ByteTransBuf(uchar, uchar);
86 void PageTransBuf(uchar);
87 void WriteI2CBufData(void);
88 void SampleLeakageCurrent(void);
89 extern void ReadEEPROMByte(uchar, uchar, uchar*);
90 extern void EEPROMWriteByte(uchar, uchar, uchar*);
91 extern void ADConvert(void);
92
93 extern void GetBus(void);
94 extern void SendByte(uchar);
95 extern bit ISendStr(uchar, uint , uchar*, uchar);
96 extern bit IRcvStr(uchar, uint, uchar *, uchar);
97
98 //---------------------------------------------------------------------------
99 //函數(shù)名稱:main(void)
100 //功能描述:主函數(shù)
101 //輸入:無
102 //輸出:無
103 //---------------------------------------------------------------------------
104 main(void)
105 {
106 1 Lpc935Init();
107 1
108 1 Delay(200); //延時(shí)200ms
109 1
110 1 lightControl = 1;
111 1
112 1 flagReg = 0;
113 1 rdDataFlagReg = 0;
114 1
115 1 recStatus = INIT_STAT; //
C51 COMPILER V8.05a LEAKAGE 11/26/2007 12:52:43 PAGE 3
116 1
117 1 //wrEEPROMBufPtr = writeEEPROMBuf;
118 1
119 1 ReadEEPROMByte(EEPROM_ALARM_TYPE_ORG_ADDR, 4, recPresetData); //讀取漏電保護(hù)類型
120 1
121 1 ReadEEPROMByte(EEPROM_TIME_ADDR, 7, recCurrentTimeBuf); //讀取已存的時(shí)間
122 1
123 1 delayTime = recPresetData[2]; //高位字節(jié)傳送
124 1 delayTime = delayTime<<8;
125 1 delayTime = recPresetData[3]; //低位字節(jié)傳送
126 1
127 1 while(1)
128 1 {
129 2 recPresetData[1] = 0x9B ;
130 2 if(initFlag)
131 2 {
132 3 EA = 0;
133 3
134 3 EEPROMWriteByte(EEPROM_ALARM_TYPE_ORG_ADDR, 4, recPresetData);
135 3
136 3 EA = 1;
137 3 initFlag = FALSE;
138 3 }
139 2
140 2 else if(timeVerifyFlag)
141 2 {
142 3 EA = 0; //中斷禁止
143 3
144 3 EEPROMWriteByte(EEPROM_CUR_TIME_ORG_ADDR, 7, recCurrentTimeBuf);
145 3
146 3 EA = 1; //打開中斷
147 3 timeVerifyFlag = FALSE;
148 3 }
149 2
150 2 else if(rdCurDataFlag)
151 2 {
152 3 ByteTransBuf(COM_RD_CUR_DATA, 16);
153 3 SBUF = SYNC;
154 3 transCheckSum = SYNC;
155 3 if(!curTransErrFlag)
156 3 rdCurDataFlag = FALSE;
157 3 else
158 3 rdCurDataFlag = TRUE;
159 3 }
160 2
161 2 else if(rdBatDataFlag)
162 2 {
163 3 if(EEPROMRdAddr==EEPROMWrAddr)
164 3 {
165 4 rdBatDataFlag = FALSE;
166 4 }
167 3 else
168 3 {
169 4 if(!batTransErrFlag)
170 4 {
171 5 PageTransBuf(COM_RD_BATCH_DATA);
172 5 SBUF = SYNC;
173 5 transCheckSum = SYNC;
174 5 }
175 4 else
176 4 {
177 5 EEPROMRdAddr = EEPROMRdAddr - 128;
C51 COMPILER V8.05a LEAKAGE 11/26/2007 12:52:43 PAGE 4
178 5 PageTransBuf(COM_RD_BATCH_DATA);
179 5 SBUF = SYNC;
180 5 transCheckSum = SYNC;
181 5 batTransErrFlag = FALSE;
182 5 }
183 4 }
184 3
185 3 }
186 2
187 2 else if(rdAllDataFlag)
188 2 {
189 3 if(EEPROMRdAddr==EEPROMWrAddr)
190 3 {
191 4 rdAllDataFlag = FALSE;
192 4 }
193 3 else
194 3 {
195 4 if(!allDataTransErrFlag)
196 4 {
197 5 PageTransBuf(COM_RD_ALL_DATA);
198 5 SBUF = SYNC;
199 5 transCheckSum = SYNC;
200 5 }
201 4 else
202 4 {
203 5 EEPROMRdAddr = EEPROMRdAddr - 128;
204 5 PageTransBuf(COM_RD_ALL_DATA);
205 5 SBUF = SYNC;
206 5 transCheckSum = SYNC;
207 5 allDataTransErrFlag = FALSE;
208 5 }
209 4 }
210 3 }
211 2
212 2 else if(recErrorFlag)
213 2 {
214 3 transDataBuf[0] = ReadID();
215 3 transDataBuf[1] = recCommandBuf|0x80;
216 3 transDataBuf[2] = 0;
217 3
218 3 SBUF = SYNC;
219 3 transCheckSum = SYNC;
220 3
221 3 recErrorFlag = FALSE;
222 3 }
223 2
224 2 else if(delaySwitchFlag)
225 2 {
226 3 if(delayCount==delayTime)
227 3 {
228 4 powerSwitchControl = OPEN_SWITCH; //斷開閘刀
229 4 }
230 3 else if(delayCount>=(delayTime+1))
231 3 {
232 4 powerSwitchControl = CLOSE_SWITCH; //取消閘刀控制
233 4 delaySwitchFlag = FALSE;
234 4 }
235 3
236 3 else
237 3 {
238 4 powerSwitchControl = CLOSE_SWITCH; //不切斷閘刀
239 4 }
C51 COMPILER V8.05a LEAKAGE 11/26/2007 12:52:43 PAGE 5
240 3
241 3 }
242 2
243 2 else if(sampleTimeFlag)
244 2 {
245 3 EA = 0;
246 3
247 3 ADConvert();
248 3
249 3 WriteI2CBufData();
250 3
251 3 EA = 1;
252 3
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -