?? define data struct.lst
字號:
C51 COMPILER V6.11.4C, DEFINE DATA STRUCT 04/01/103 02:34:47 PAGE 1
QCW(0x00002D1A)
WIN32 C51 COMPILER V6.11.4C, COMPILATION OF MODULE DEFINE DATA STRUCT
OBJECT MODULE PLACED IN d:\solar_charge_controller\scca\define data struct.obj
COMPILER INVOKED BY: C51.EXE D:\SOLAR_CHARGE_CONTROLLER\SCCA\DEFINE DATA STRUCT.
-C OBJECT(D:\SOLAR_CHARGE_CONTROLLER\SCCA\DEFINE DATA STRUCT.OBJ) PI
-N(D:\FSI\INC) NOAM PR(D:\SOLAR_CHARGE_CONTROLLER\SCCA\DEFINE DATA S
-TRUCT.LST) CD SB OE(1) SM FP(NOFLOAT) PW(80)
stmt level source
1 /*
2 */
3 #include <absacc.h>
4 #include <stdlib.h>
5 #include <AT89X52.H>
6 #include <INTRINS.h>
7 #include "charger.h"
8 #include "lcdp.h"
9
10 //
11 //-----------------------------
12 //define data struct
13
14
15 //-----------------------------
16 //System flag,char of control;
17 //-----------------------------
18 static bit bdata boostflag=1;
19 static unsigned char idata switchchar=0x3f;
20
21 /*
22 //init_system_work_point , counter rate flow
23 */
24
25 #define BENCHMARK 5
26 #define AMPLIFICATORY 10//predefine 0.1 proccess, amplificatory 10
-
27 #define ADMAX 1024
28
29 static unsigned char xdata str[0x1800] _at_ 0x4000;
30 void init_system_work_point(void)
31 {
32 1 unsigned char idata i;
33 1 link xdata head;
34 1 link xdata new;
35 1 link xdata pointer;
36 1
37 1 for(i=0;i<7;i++)
38 1 {
39 2 sys[i]=dtab[2][i];//default=2,system is 220V
40 2 }
41 1 for(i=0;i<5;i++)//i=7
42 1 {
43 2 sys[i+7]=stab[i][2];
44 2 }
45 1 sys[12]=0;//tested temperature
46 1
47 1 init_mempool((void *)str,0x1800L);//&XBYTE[0x4000]
48 1
49 1 head=(link)malloc(sizeof(daydata));
50 1 if(head==0){text(0x90,"Head Null");delay(1000);return;}
WARNING 451 IN LINE 50 OF define data struct.c : Assignment between pointers to
- char signed and unsigned
51 1 text(0x80,"malloc is ok!");
WARNING 451 IN LINE 51 OF define data struct.c : Assignment between pointers to
- char signed and unsigned
52 1 head->next=NULL;
53 1 head->up=NULL;
54 1 delay(1000);
55 1
56 1 pointer=head;
57 1 for(i=0;;i++)
58 1 {
59 2 new=(link)malloc(sizeof(daydata));
60 2 if(new==0)break;
61 2 new->next=NULL;
62 2 new->up=NULL;
63 2 pointer->next=new;
64 2 new->up=pointer;
65 2 pointer=new;
66 2 };
67 1 pointer->next=head;
68 1 head->up=pointer;
69 1
70 1 WC_LCD(0x90);
71 1 WD_LCD(i);
72 1 delay(2000);
73 1
74 1 //The moving header
75 1 today.next=head;
76 1 today.up=pointer; //is head->up;
77 1
78 1 init_rate();
79 1
80 1 }
81
82 static void init_rate(void)
83 {
84 1 unsigned int data i;
85 1 crate.temperature=100*BENCHMARK*AMPLIFICATORY/ADMAX;
86 1 i=sys[11];
87 1 crate.volatage=i*BENCHMARK*AMPLIFICATORY/ADMAX;
88 1 i=sys[8];
89 1 crate.discharge=i*BENCHMARK*AMPLIFICATORY/ADMAX;
90 1 i=sys[9];
91 1 crate.charge=i*BENCHMARK*AMPLIFICATORY/ADMAX;
92 1 }
93
94 /*
95 //intput data from tlc1543,changed and saved
96 */
97 void getadin(void)
98 {
99 1 unsigned char data i;
100 1
101 1 for(i=0;i<6;i++)
102 1 {
103 2 adin[i]=tlc1543(i)*crate.charge;
104 2 }
105 1 adin[6]=tlc1543(6)*crate.discharge;
106 1 adin[7]=tlc1543(8)*crate.temperature;
107 1 adin[8]=tlc1543(9)*crate.volatage;//9way
108 1 }
109
110 /*
111 //count today working result
112 */
113 void account(void)
114 {
115 1 if(tlong%60==0)
116 1 //count Ah, per 10s //count max & min per 10s
117 1 {char i;
118 2 for(i=0;i<9;i++)
119 2 {
120 3 if(i<7)
121 3 { //save current integral value
122 4 today.work[i*2+1]+=(today.work[i*2+1]+adin[i])/(60*2);
123 4 }
124 3 else
125 3 {//save max & min value
126 4 if(adin[i]>today.work[i*2+1])today.work[i*2+1]=adin[i];
127 4 else if(adin[i]<today.work[2*i])today.work[i*2]=adin[i];
128 4 }
129 3 //only save max value
130 3 if(adin[i]>today.work[2*i])today.work[i*2]=adin[i];
131 3 }
132 2 }
133 1 }
134
135 /*
136 //output control,switch operation
137 */
138
139 #define boostvolatage sys[0]
140 #define booststart sys[1]
141 #define floatvolatage sys[2]
142 #define floatrecover sys[3]
143 #define moterstart sys[4]
144 #define lowlevel sys[5]
145 //alarm overload
146 #define overload sys[6]
147 #define dischargecurrent 13
148
149 //-----------------------------
150
151 #pragma DISABLE
152
153 static void controlswitch (unsigned char i)
154 {
155 1 P2_7=1;
156 1 _nop_();
157 1 P0=i;
158 1 _nop_();
159 1 P2_7=0;
160 1 _nop_();
161 1 _nop_();
162 1 }
163 //-----------------------------
164 static void alarm_overload()
165 {
166 1 }
167 //-----------------------------
168
169 void control(void)
170 {
171 1 unsigned int data t,b;
172 1 t=today.work[dischargecurrent];
173 1 if(t>overload)alarm_overload();
174 1
175 1 t=adin[8];// volatage of storage battery
176 1 b=AMPLIFICATORY*boostvolatage;//boost charge volatage
177 1 if(t>b)
178 1 {
179 2 switchchar=0x0;
180 2 controlswitch(switchchar);//all close & wcharge=0
181 2 boostflag=0;
182 2 }
183 1 else
184 1 if(boostflag)
185 1 {
186 2 b=AMPLIFICATORY*booststart;//boost charge start
187 2 if(t>b);
188 2 else
189 2 {
190 3 switchchar=0x3f;
191 3 controlswitch(switchchar);//6 way start
192 3 boostflag=1;
193 3 b=AMPLIFICATORY*moterstart;
194 3
195 3 if(t>b);
196 3 else
197 3 {
198 4 switchchar=0x7f;
199 4 controlswitch(switchchar);//6 way start and motor s
-tart
200 4 b=AMPLIFICATORY*lowlevel;
201 4
202 4 if(t>b);
203 4 else {switchchar=0xff;controlswitch(switchchar);}//
-not enough volatage alarm,6 way start and motor start
204 4 }
205 3 }
206 2 }
207 1 else
208 1 {
209 2 b=AMPLIFICATORY*floatvolatage;
210 2 if(t>b)
211 2 {
212 3 switchchar &= 0x3f;
213 3 switchchar>>=1;
214 3 controlswitch(switchchar);
215 3 }//close 1 way ,stop motor
216 2 else
217 2 {
218 3 b=AMPLIFICATORY*floatrecover;
219 3 if(t>b);
220 3 else {switchchar=0x3f;controlswitch(switchchar);}
221 3 }
222 2 }
223 1 }
224
C51 COMPILER V6.11.4C, DEFINE DATA STRUCT 04/01/103 02:34:47 PAGE 2
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION init_system_work_point (BEGIN)
; SOURCE LINE # 37
0000 7900 R MOV R1,#i
0002 7700 MOV @R1,#000H
0004 ?FOR3:
; SOURCE LINE # 39
0004 7900 R MOV R1,#i
0006 E7 MOV A,@R1
0007 23 RL A
0008 2400 R ADD A,#LOW (dtab)+01CH
000A F582 MOV DPL,A
000C E4 CLR A
000D 3400 R ADDC A,#HIGH (dtab)+01CH
000F F583 MOV DPH,A
0011 E4 CLR A
0012 93 MOVC A,@A+DPTR
0013 FC MOV R4,A
0014 7401 MOV A,#001H
0016 93 MOVC A,@A+DPTR
0017 FD MOV R5,A
0018 E7 MOV A,@R1
0019 23 RL A
001A 2400 R ADD A,#LOW (sys)
001C F582 MOV DPL,A
001E E4 CLR A
001F 3400 R ADDC A,#HIGH (sys)
0021 F583 MOV DPH,A
0023 EC MOV A,R4
0024 F0 MOVX @DPTR,A
0025 A3 INC DPTR
0026 ED MOV A,R5
0027 F0 MOVX @DPTR,A
; SOURCE LINE # 37
0028 07 INC @R1
0029 B707D8 CJNE @R1,#007H,?FOR3
; SOURCE LINE # 41
002C 7900 R MOV R1,#i
002E 7700 MOV @R1,#000H
0030 ?FOR4:
; SOURCE LINE # 43
0030 7900 R MOV R1,#i
0032 E7 MOV A,@R1
0033 23 RL A
0034 23 RL A
0035 23 RL A
0036 2400 R ADD A,#LOW (stab)+004H
0038 F582 MOV DPL,A
003A E4 CLR A
003B 3400 R ADDC A,#HIGH (stab)+004H
003D F583 MOV DPH,A
003F E4 CLR A
0040 93 MOVC A,@A+DPTR
0041 FC MOV R4,A
0042 7401 MOV A,#001H
0044 93 MOVC A,@A+DPTR
0045 FD MOV R5,A
0046 E7 MOV A,@R1
0047 23 RL A
0048 2400 R ADD A,#LOW (sys)+00EH
004A F582 MOV DPL,A
004C E4 CLR A
004D 3400 R ADDC A,#HIGH (sys)+00EH
004F F583 MOV DPH,A
0051 EC MOV A,R4
0052 F0 MOVX @DPTR,A
0053 A3 INC DPTR
0054 ED MOV A,R5
; SOURCE LINE # 37
0056 07 INC @R1
0057 B705D6 CJNE @R1,#005H,?FOR4
; SOURCE LINE # 45
005A 900000 R MOV DPTR,#sys+018H
005D E4 CLR A
005E FD MOV R5,A
005F F0 MOVX @DPTR,A
0060 A3 INC DPTR
0061 F0 MOVX @DPTR,A
; SOURCE LINE # 47
0062 7A40 MOV R2,#HIGH (str)
0064 8A06 MOV AR6,R2
0066 7900 MOV R1,#LOW (str)
0068 8907 MOV AR7,R1
006A 7C18 MOV R4,#018H
006C 120000 R LCALL _init_mempool
; SOURCE LINE # 49
006F E4 CLR A
0070 FE MOV R6,A
0071 7F2D MOV R7,#02DH
0073 120000 R LCALL _malloc
0077 900000 R MOV DPTR,#head
007A F0 MOVX @DPTR,A
007B A3 INC DPTR
007C EA MOV A,R2
007D F0 MOVX @DPTR,A
007E A3 INC DPTR
007F E9 MOV A,R1
0080 F0 MOVX @DPTR,A
; SOURCE LINE # 50
0081 701F JNZ ?NXT12
0083 900000 R MOV DPTR,#head+01H
0086 E0 MOVX A,@DPTR
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -