?? hicj6.lst
字號:
C51 COMPILER V6.12 HICJ6 01/03/2005 12:08:21 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE HICJ6
OBJECT MODULE PLACED IN D:\TEST\HICJ6.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE D:\TEST\HICJ6.C DB SB OE
stmt level source
1 /********************Copyright******************************
2
3 名稱:HICJ6.C
4 功能:主程序
5 說明:
6 修改:2004/12/24
7
8 ************************************************************/
9 #include "P89C60X2.h"
10 #include "hicj6.h"
11 #include "hd7279.h"
12 #include "fm25040.h"
13
14 extern void Trs_Edit(void);
15 extern void Rcv_Pro(void);
16 extern void PSendChar(unsigned char);
17 void Hdd_Check(void);
18 void Disp_Pro(void);
19 void Key_Pro(void);
20 void TrsRelay(BYTE,BYTE);
21 void Init();
22 BYTE code Relay_Station=13;
23 BYTE code LedCode[6]={0x40,0x30,0x08,0x06,0x01,0x80};
24 BYTE code Bat_Val[5]={0x40,0x60,0x70,0x78,0x7c};
25 BYTE code A8_A10[8]={2,1,0,3,4,6,7,5};
26 //DWORD code Full_Val[4]={1000000,10000000,160000000,32000000};
27
28 BYTE data Time_Counter;
29 BYTE idata Trs_Counter;
30 BYTE data Hdd_Wp,Hdd_Rp;
31 BYTE data Rcv_Count;
32 BYTE data Run_Count;
33 BYTE data Hdd_En[5],Short_En[5],Break_En[5];
34 BYTE data Ms20;
35
36 BYTE data Hdd_New_Bak[5];
37 BYTE data Hdd_Old[5],Hdd_Old_Bak[5];
38 extern BYTE data Short_New[5],Break_New[5];
39 BYTE data Short_Bak,Break_Bak;
40 BYTE idata Key_Count,Pulse,Type;
41 BYTE data Key_New,Key_Old,Key_Val,Key_Press;
42 BYTE data Alarm;
43 extern BYTE data Trs_Wp,Trs_Rp,Rcv_Wp,Rcv_Rp;
44 extern BYTE data Station,House_Max;
45 BYTE data Start,House;
46 BYTE data HddEn_Sum,Key_C,Flash;
47 BYTE idata TrsRelayOff[5];
48 BYTE data WriteOrder;
49 BYTE data Keep_Flag[5];
50 BYTE idata Short_Old[5];
51 BYTE idata RelayOff[5];
52
53 BYTE xdata Hdd_New[10][5];
54 BYTE xdata HddVal[40];
55 BYTE xdata Trs_Buf[25];
C51 COMPILER V6.12 HICJ6 01/03/2005 12:08:21 PAGE 2
56 BYTE xdata Rcv_Buf[30];
57 //BYTE xdata Hdd10s[40];
58 //BYTE xdata RelayOffTimes[40];
59 //WORD xdata TrsOffCount[40];
60
61
62
63 bit Trs_Flag,Rcv_Flag,Alarm_Flag;
64 bit Sp_Flag,Alarm_Check,HddEn_Count;
65 bit Ac_New,Ac_Old,Ac_Tmp;
66 bit Bat_New,Bat_Old,Bat_Tmp;
67 BYTE idata Keep_Count[40]=0;
68 WORD idata Press_Count;
69
70 union hdd_long {BYTE Hdd_B[4];DWORD Hdd_L;} Hdd_Str;
71 union Full_Str {BYTE Full_B[4];unsigned long Full_L;} Full;
72
73 /**********************************************************
74 *名 稱:serial_int
75 *功 能:串口中斷函數
76 *說 明:處理串口發送、接收數據,每個字節中斷一次
77 *調 用:
78 *入口參數:無
79 *返 回 值:無
80 ***********************************************************/
81
82 void serial_int(void) interrupt 4 //using 1
83 {
84 1 EA=0;
85 1 if (RI)
86 1 {
87 2 RI=0;
88 2 Rcv_Count=0;
89 2 if(Rcv_Wp==29)
90 2 {
91 3 Rcv_Wp=0;
92 3 }
93 2 Rcv_Buf[Rcv_Wp]=SBUF;
94 2 if(
95 2 Rcv_Buf[Rcv_Wp-2]==0xeb && Rcv_Buf[Rcv_Wp-1]==0x90
96 2 &&Rcv_Wp<8)
97 2 {
98 3 Rcv_Flag=1;
99 3 Rcv_Rp=Rcv_Wp;
100 3 }
101 2 Rcv_Wp++;
102 2 }
103 1 if (TI)
104 1 {
105 2 TI=0;
106 2 if(Trs_Wp!=Trs_Rp)
107 2 {
108 3 SBUF=Trs_Buf[Trs_Rp];
109 3 Trs_Rp++;
110 3 }
111 2 else DIR485=1;
112 2
113 2 }
114 1 EA=1;
115 1 }
116
117 /**********************************************************
C51 COMPILER V6.12 HICJ6 01/03/2005 12:08:21 PAGE 3
118 *名 稱:timer2
119 *功 能:定時器2 中斷函數
120 *說 明:完成定時采集電度端口狀態(20MS)及其他一些定時處理
121 *調 用:無
122 *入口參數:無
123 *返 回 值:無
124 ***********************************************************/
125 void timer2(void) interrupt 5 //using 2
126 {
127 1 BYTE data i,j;
128 1 BYTE data P1_Tmp;
129 1 TF2=0;
130 1 Ms20++;
131 1 Time_Counter++;
132 1 Trs_Counter++;
133 1 Rcv_Count++;
134 1 // Run=~Run;
135 1 // Run=1;
136 1
137 1 for (i=0;i<5;i++)
138 1 {
139 2 P1_Tmp=1<<(i+3);
140 2 P1_Tmp=~P1_Tmp&0xf8;
141 2 for(j=0;j<8;j++)
142 2 {
143 3 P1=P1_Tmp|A8_A10[j];
144 3 long_delay();
145 3 if(Hdd==0)
146 3 {
147 4 Hdd_New[Hdd_Wp][i]|=1<<j;
148 4 }
149 3 else
150 3 {
151 4 Hdd_New[Hdd_Wp][i]&=~(1<<j);
152 4 }
153 3
154 3 }
155 2 }
156 1
157 1 // Run=0;
158 1 /*
159 1 for(B_i1=0;B_i1<5;B_i1++)
160 1 {
161 1 if(TrsRelayOff[B_i1])
162 1 {
163 1 for(B_i2=0;B_i2<8;B_i2++)
164 1 {
165 1 B_i3=1<<B_i2;
166 1 if(TrsRelayOff[B_i1]&B_i3)
167 1 TrsOffCount[B_i1*8+B_i2]++;
168 1 }
169 1 }
170 1 }
171 1 */
172 1 Hdd_Wp++;
173 1 if(Hdd_Wp==10)
174 1 {
175 2 Hdd_Wp=0;
176 2
177 2 }
178 1 if(Key_Val)Key_C++;
179 1 if(!Key)
C51 COMPILER V6.12 HICJ6 01/03/2005 12:08:21 PAGE 4
180 1 {
181 2 Key_Count++;
182 2 }
183 1 else
184 1 {
185 2 Key_Count=0;
186 2 }
187 1 if (Press_Count<1000)
188 1 {
189 2 Press_Count++;
190 2 }
191 1 }
192
193 /**********************************************************
194 *名 稱:Disp_Pro
195 *功 能:顯示處理
196 *說 明:將要顯示的內容傳送給HD7279
197 *調 用:write7279
198 *入口參數:無
199 *返 回 值:無
200 ***********************************************************/
201 void Disp_Pro(void)
202 {
203 1 /*
204 1 LED 定義
205 1 LED[7]-LED[0] Hdd
206 1 LED[9]-LED[8] House_Code
207 1 LED[11]-LED[10] Station-Code
208 1
209 1 LED[12] Battery Red
210 1 LED[13] BAttery Green
211 1 LED[14] 8 @3 LED
212 1 LED[15] One LED
213 1 0x80 0x40 0x20 0x10 0x08 0x04 0x02 0x01
214 1 A4 B4 B3 B2 B1 A1 A2 A3
215 1 A1-Water 0x32
216 1 A2-Power 0x31
217 1 A3-Gass 0x30
218 1 A4-Warm 0x37
219 1 B1-heat 0x36
220 1 B2-Break 0x35
221 1 B3-Short 0x34
222 1 B4-Pulse 0x33
223 1 從上至下排列,表類型為A,報警類型為B
224 1
225 1 */
226 1 BYTE data i,Led[16];
227 1
228 1 //BYTE Constant_Range;
229 1
230 1 Key_Press=0;
231 1 Flash=0;
232 1 i=House%8;
233 1 if((Hdd_En[i]&(1<<i)))
234 1 {
235 2 // Hdd_Str.Hdd_L=HddVal[House];
236 2 Read_Hdd(House);
237 2 Hdd_Str.Hdd_L+=HddVal[House];
238 2 // Hdd_Str.Hdd_L>>=5; // /3200
239 2
240 2 Led[15]=Read1B(House*3+2,1);
241 2 i=Read1B(House*3+1,1);
C51 COMPILER V6.12 HICJ6 01/03/2005 12:08:21 PAGE 5
242 2 Led[9]=i/0x10;
243 2 Led[8]=i%0x10;
244 2 if(Led[8]>9)Led[8]=0x0f;
245 2 i=Read1B(House*3,1);
246 2 Led[11]=i/0x10;
247 2 Led[10]=i%0x10;
248 2 for(i=8;i<12;i++)
249 2 {
250 3 if(Led[i]>9)Led[i]=0x0f;
251 3 }
252 2
253 2 Led[7]=Hdd_Str.Hdd_L/10000000;
254 2 Led[6]= (Hdd_Str.Hdd_L%10000000)/1000000;
255 2 Led[5]=(Hdd_Str.Hdd_L%1000000 )/100000;
256 2 Led[4]=(Hdd_Str.Hdd_L%100000 )/10000;
257 2 Led[3]=(Hdd_Str.Hdd_L%10000 )/1000;
258 2 Led[2]=(Hdd_Str.Hdd_L%1000 )/100;
259 2 Led[1]=(Hdd_Str.Hdd_L%100 )/10;
260 2 Led[0]= Hdd_Str.Hdd_L%10;
261 2
262 2 if (Led[7]==0)
263 2 {
264 3 Led[7]=0x0f;
265 3 if(Led[6]==0)
266 3 {
267 4 Led[6]=0x0f;
268 4 if(Led[5]==0)
269 4 {
270 5 Led[5]=0x0f;
271 5 if(Led[4]==0)
272 5 {
273 6 Led[4]=0x0f;
274 6 if(Led[3]==0)
275 6 {
276 7 Led[3]=0x0f;
277 7
278 7 }
279 6
280 6 }
281 5 }
282 4 }
283 3
284 3 }
285 2 i=Read1B(200+House,0);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -