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