📄 control.lst
字号:
C51 COMPILER V7.20 CONTROL 06/20/2005 16:55:56 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE CONTROL
OBJECT MODULE PLACED IN control.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE control.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /*
3 */
4 #include <absacc.h>
5 #include <stdlib.h>
6 #include <AT89X52.H>
7 #include <INTRINS.h>
8
9 #include "charger.h"
10 /*
11 //init_system_work_point
12 */
13
14 #define BENCHMARK 4.5
15 #define AMPLIFICATORY 10//predefine 0.1 proccess, amplificatory 10
16 #define ADMAX 4096
17
18 #define system_volatage sys[7]
19 #define discharge_model sys[8]
20 #define charge_model sys[9]
21 #define float_revise sys[10]
22 #define test_temp sys[11]
23 #define desinged_rate sys[12]
24 //alarm overload
25 #define overload sys[6]
26
27 //static array daydata change to loop link
28 //sizeof(daydata)=0x2B
29 extern daydata xdata looplink[BUFFSIZE];
30
31 void init_history_buffer(void)
32 {
33 1 unsigned char data i;
34 1 //Init DoubleLoopLink
35 1 for(i=0;i<BUFFSIZE-1;i++)
36 1 {
37 2 looplink[i].next=&looplink[i+1];
38 2 looplink[i+1].up=&looplink[i];
39 2 RESET_DOG;
40 2 }
41 1 looplink[BUFFSIZE-1].next=&looplink[0];
42 1 looplink[0].up=&looplink[BUFFSIZE-1];
43 1
44 1 today.next=&looplink[0];
45 1 today.up=&looplink[BUFFSIZE-1]; //is head->up;
46 1 today.up->date[0]=0;//break looplink
47 1 today.up->date[1]=0;//break looplink
48 1 today.up->date[2]=0;//break looplink
49 1 RESET_DOG;
50 1 }
51
52 void init_rate_workpoint(unsigned char n)
53 {
54 1 unsigned char data i;
55 1 //2005/4
C51 COMPILER V7.20 CONTROL 06/20/2005 16:55:56 PAGE 2
56 1 n=DEFSYSV;
57 1 //2005/4
58 1 if(n<4)//system volatage changed
59 1 for(i=0;i<12;i++)//Init default seting
60 1 {
61 2 if(i<7)
62 2 {//work point
63 3 sys[i]=dtab[n][i];
64 3 }
65 2 else
66 2 {
67 3 if(i==11)//sys[11] is test temp.
68 3 sys[12]=stab[4][n];//desinged_rate
69 3 else sys[i]=stab[i-7][n];
70 3 }
71 2 }
72 1
73 1 i=45;//BENCHMARK*AMPLIFICATORY=45;
74 1 crate.temperature = i*100;
75 1 crate.volatage = i*desinged_rate;//battery volatage
76 1 crate.discharge = i*discharge_model/4;
77 1 crate.charge = i*charge_model/4;
78 1 //check overload <= discharger model
79 1 if(overload>discharge_model)overload=discharge_model;
80 1 RESET_DOG;
81 1 }
82
83 //intput data from tlc1543,changed and saved
84 const adintimes =0xDB24;
85 const adinadd =0xDB28;
86 const tmpAh =0xDB44;
87 //today at
88
89 #define ADCOUNT 10
90 void getadin(void)
91 {
92 1 unsigned char data i;
93 1 unsigned long data tmp;
94 1 unsigned long xdata *s;//adinadd
95 1 unsigned int xdata *t;
96 1
97 1 for(i=0;i<10;i++)//9 way, the 8 way is no use
98 1 if(i!=7)
99 1 {
100 2 unsigned char data c;
101 2
102 2 tmp=0;
103 2
104 2 for(c=0;c<ADCOUNT;c++)tmp+=tlc1543(i);
105 2
106 2 RESET_DOG;
107 2
108 2 tmp /= ADCOUNT;
109 2
110 2 if(i<6)
111 2 {
112 3 tmp *= crate.charge;
113 3 tmp /= ADMAX; adin[i]=(unsigned int)tmp;
114 3 }
115 2 if(i==6)
116 2 {
117 3 tmp *= crate.discharge;
C51 COMPILER V7.20 CONTROL 06/20/2005 16:55:56 PAGE 3
118 3 tmp /= ADMAX; adin[6]=(unsigned int)tmp;
119 3 }
120 2 if(i==8)
121 2 {
122 3 tmp *= crate.temperature;
123 3 tmp /= ADMAX; adin[7]=(unsigned int)tmp;
124 3
125 3 if(adin[7]<2730)adin[7]=2730;
126 3 if(adin[7]>3080)adin[7]=3080;
127 3 adtemp=adin[7];//save no just temperature
128 3
129 3 /*2005/4
130 3 if(test_temp<3230&&test_temp>2230)adin[7]+=just;//+/-50d
131 3 2005/4*/
132 3 }
133 2 if(i==9)
134 2 {
135 3 tmp *= crate.volatage;
136 3 tmp /= ADMAX; adin[8]=(unsigned int)tmp;
137 3 }
138 2 }
139 1
140 1 for(i=0;i<9;i++)
141 1 {
142 2 if(i>6)//save min value of battery vola.&temperature
143 2 if(adin[i]<today.work[2*i+1]||today.work[2*i+1]==0)
144 2 today.work[i*2+1]=adin[i];
145 2 //only save max value
146 2 if(adin[i]>today.work[2*i])today.work[i*2]=adin[i];
147 2 }
148 1 //counter times and add to add current
149 1 s=adinadd;
150 1 for(i=0;i<7;i++)*s+++=(unsigned long)adin[i];
151 1 t=adintimes;
152 1 (*t)++;
153 1 RESET_DOG;
154 1 }
155 //-----------------------------
156 //check error
157 void syserror(void)
158 {
159 1 //系统设置检错
160 1 unsigned char data i;
161 1 for(i=0;i<7;i++)
162 1 if(sys[i]>400||sys[i]<30)
163 1 {init_rate_workpoint(DEFSYSV);return;}
164 1 if(!(sys[7]==48||sys[7]==110||sys[7]==220||sys[7]==300))
165 1 {
166 2 init_rate_workpoint(DEFSYSV);
167 2 //控制器失效,需要重新设置或者重新上电
168 2 }
169 1 }
170
171 /*
172 //count today working result
173 */
174 void account(void)
175 {
176 1 static bit bdata cc;
177 1 if(tlong%60>50)//50s
178 1 {
179 2 if(!cc)
C51 COMPILER V7.20 CONTROL 06/20/2005 16:55:56 PAGE 4
180 2 {
181 3 char data i;
182 3 unsigned long xdata *s;
183 3 unsigned long xdata *Ah;//adinadd
184 3 unsigned int xdata *t;
185 3 t=adintimes;
186 3 s=adinadd;
187 3 Ah=tmpAh;
188 3 for(i=0;i<7;i++)
189 3 { //save current integral value (Ah)
190 4 unsigned long data taa;
191 4 if(*t!=0)*Ah+=*s/(unsigned long)(*t);//保证精度不损失
192 4 else return;
193 4 taa=(unsigned long)(*Ah/60);
194 4 today.work[i*2+1]=(unsigned int)taa;
195 4 *s++=0;
196 4 Ah++;
197 4 RESET_DOG;
198 4 }
199 3 cc=1; *t=0;
200 3 }
201 2 }
202 1 else cc=0;
203 1 }
204
205 /*
206 //output control,switch operation
207 */
208
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -