⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 define data struct.lst

📁 一个充电控制器的完整单片机程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
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
0055 F0             MOVX   @DPTR,A
                                           ; 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
0076 EB             MOV    A,R3
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 + -