📄 hicj6.lst
字号:
C51 COMPILER V6.12 HICJ6 01/10/2005 07:10:30 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 "fram.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
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[5]={1000000,10000000,160000000,32000000,320000000};
27
28 BYTE data Time_Counter;
29 BYTE data 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 ms500;
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 data 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/10/2005 07:10:30 PAGE 2
56 BYTE xdata Rcv_Buf[30];
57 BYTE xdata Hdd10s[40];
58 BYTE xdata TrsOffCount[40];
59
60
61
62 bit Trs_Flag,Rcv_Flag,Alarm_Flag;
63 bit Sp_Flag,Alarm_Check,HddEn_Count;
64 bit Ac_New,Ac_Old,Ac_Tmp;
65 bit Bat_New,Bat_Old,Bat_Tmp;
66 BYTE idata Keep_Count[40]=0;
67 WORD idata Press_Count;
68
69 union hdd_long {BYTE Hdd_B[4];DWORD Hdd_L;} Hdd_Str;
70
71 /**********************************************************
72 *名 称:serial_int
73 *功 能:串口中断函数
74 *说 明:处理串口发送、接收数据,每个字节中断一次
75 *调 用:
76 *入口参数:无
77 *返 回 值:无
78 ***********************************************************/
79
80 void serial_int(void) interrupt 4 //using 1
81 {
82 1 EA=0;
83 1 if (RI)
84 1 {
85 2 RI=0;
86 2 Rcv_Count=0;
87 2 if(Rcv_Wp==29)
88 2 {
89 3 Rcv_Wp=0;
90 3 }
91 2 Rcv_Buf[Rcv_Wp]=SBUF;
92 2 if(
93 2 Rcv_Buf[Rcv_Wp-2]==0xeb && Rcv_Buf[Rcv_Wp-1]==0x90
94 2 &&Rcv_Wp<8)
95 2 {
96 3 Rcv_Flag=1;
97 3 Rcv_Rp=Rcv_Wp;
98 3 }
99 2 Rcv_Wp++;
100 2 }
101 1 if (TI)
102 1 {
103 2 TI=0;
104 2 if(Trs_Wp!=Trs_Rp)
105 2 {
106 3 SBUF=Trs_Buf[Trs_Rp];
107 3 Trs_Rp++;
108 3 }
109 2 else DIR485=1;
110 2
111 2 }
112 1 EA=1;
113 1 }
114
115 /**********************************************************
116 *名 称:timer2
117 *功 能:定时器2 中断函数
C51 COMPILER V6.12 HICJ6 01/10/2005 07:10:30 PAGE 3
118 *说 明:完成定时采集电度端口状态(20MS)及其他一些定时处理
119 *调 用:无
120 *入口参数:无
121 *返 回 值:无
122 ***********************************************************/
123 void timer2(void) interrupt 5 //using 2
124 {
125 1 BYTE data i,j;
126 1 BYTE data P1_Tmp;
127 1 TF2=0;
128 1 Time_Counter++;
129 1 Trs_Counter++;
130 1 Rcv_Count++;
131 1 // Run=~Run;
132 1 // Run=1;
133 1
134 1 for (i=0;i<5;i++)
135 1 {
136 2 P1_Tmp=1<<(i+3);
137 2 P1_Tmp=~P1_Tmp&0xf8;
138 2 for(j=0;j<8;j++)
139 2 {
140 3 P1=P1_Tmp|A8_A10[j];
141 3 long_delay();
142 3 if(Hdd==0)
143 3 {
144 4 Hdd_New[Hdd_Wp][i]|=1<<j;
145 4 }
146 3 else
147 3 {
148 4 Hdd_New[Hdd_Wp][i]&=~(1<<j);
149 4 }
150 3
151 3 }
152 2 }
153 1
154 1 // Run=0;
155 1
156 1 Hdd_Wp++;
157 1 if(Hdd_Wp==10)
158 1 {
159 2 Hdd_Wp=0;
160 2
161 2 }
162 1 if(Key_Val)Key_C++;
163 1 if(!Key)
164 1 {
165 2 Key_Count++;
166 2 }
167 1 else
168 1 {
169 2 Key_Count=0;
170 2 }
171 1 if (Press_Count<1000)
172 1 {
173 2 Press_Count++;
174 2 }
175 1 }
176
177 /**********************************************************
178 *名 称:Disp_Pro
179 *功 能:显示处理
C51 COMPILER V6.12 HICJ6 01/10/2005 07:10:30 PAGE 4
180 *说 明:将要显示的内容传送给HD7279
181 *调 用:write7279
182 *入口参数:无
183 *返 回 值:无
184 ***********************************************************/
185 void Disp_Pro(void)
186 {
187 1 /*
188 1 LED 定义
189 1 LED[7]-LED[0] Hdd
190 1 LED[9]-LED[8] House_Code
191 1 LED[11]-LED[10] Station-Code
192 1
193 1 LED[12] Battery Red
194 1 LED[13] BAttery Green
195 1 LED[14] 8 @3 LED
196 1 LED[15] One LED
197 1 0x80 0x40 0x20 0x10 0x08 0x04 0x02 0x01
198 1 A4 B4 B3 B2 B1 A1 A2 A3
199 1 A1-Water 0x32
200 1 A2-Power 0x31
201 1 A3-Gass 0x30
202 1 A4-Warm 0x37
203 1 B1-heat 0x36
204 1 B2-Break 0x35
205 1 B3-Short 0x34
206 1 B4-Pulse 0x33
207 1 从上至下排列,表类型为A,报警类型为B
208 1
209 1 */
210 1 BYTE data i,Led[16];
211 1
212 1 BYTE Constant_Range;
213 1
214 1 Key_Press=0;
215 1 Flash=0;
216 1 i=House%8;
217 1 if((Hdd_En[i]&(1<<i)))
218 1 {
219 2 Read_Hdd(House);
220 2 Hdd_Str.Hdd_L+=HddVal[House];
221 2
222 2 Constant_Range=Read1B(120+House+0x100);
223 2 Constant_Range>>=4;
224 2 switch (Constant_Range)
225 2 {
226 3 case (1):
227 3 Hdd_Str.Hdd_L*=100;
228 3 break;
229 3 case (2):
230 3
231 3 Hdd_Str.Hdd_L*=10;
232 3 break;
233 3
234 3 case (4):
235 3 Hdd_Str.Hdd_L/=10;
236 3 break;
237 3 case (5):
238 3 Hdd_Str.Hdd_L>>=4;
239 3 break;
240 3 case (6):
241 3 Hdd_Str.Hdd_L*=10;
C51 COMPILER V6.12 HICJ6 01/10/2005 07:10:30 PAGE 5
242 3 Hdd_Str.Hdd_L>>=4;
243 3 break;
244 3 case (7):
245 3 Hdd_Str.Hdd_L*=10;
246 3 Hdd_Str.Hdd_L>>=5;
247 3 break;
248 3 case (8):
249 3 Hdd_Str.Hdd_L>>=5;
250 3 break;
251 3 default:
252 3 break;
253 3 }
254 2
255 2
256 2 Led[15]=Read1B(House*3+2+0x100);
257 2 i=Read1B(House*3+1+0x100);
258 2 Led[9]=i/0x10;
259 2 Led[8]=i%0x10;
260 2 if(Led[8]>9)Led[8]=0x0f;
261 2 i=Read1B(House*3+0x100);
262 2 Led[11]=i/0x10;
263 2 Led[10]=i%0x10;
264 2 for(i=8;i<12;i++)
265 2 {
266 3 if(Led[i]>9)Led[i]=0x0f;
267 3 }
268 2
269 2 Led[7]=Hdd_Str.Hdd_L/10000000;
270 2 Led[6]= (Hdd_Str.Hdd_L%10000000)/1000000;
271 2 Led[5]=(Hdd_Str.Hdd_L%1000000 )/100000;
272 2 Led[4]=(Hdd_Str.Hdd_L%100000 )/10000;
273 2 Led[3]=(Hdd_Str.Hdd_L%10000 )/1000;
274 2 Led[2]=(Hdd_Str.Hdd_L%1000 )/100;
275 2 Led[1]=(Hdd_Str.Hdd_L%100 )/10;
276 2 Led[0]= Hdd_Str.Hdd_L%10;
277 2
278 2 if (Led[7]==0)
279 2 {
280 3 Led[7]=0x0f;
281 3 if(Led[6]==0)
282 3 {
283 4 Led[6]=0x0f;
284 4 if(Led[5]==0)
285 4 {
286 5 Led[5]=0x0f;
287 5 if(Led[4]==0)
288 5 {
289 6 Led[4]=0x0f;
290 6 if(Led[3]==0)
291 6 {
292 7 Led[3]=0x0f;
293 7
294 7 }
295 6
296 6 }
297 5 }
298 4 }
299 3
300 3 }
301 2 i=Read1B(200+House);
302 2 i=(i>>4)&7;
303 2 if(i) Led[i]|=0x80; //Point
C51 COMPILER V6.12 HICJ6 01/10/2005 07:10:30 PAGE 6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -