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

📄 scom.lst

📁 一个充电控制器的完整单片机程序
💻 LST
字号:
C51 COMPILER V7.20   SCOM                                                                  06/20/2005 16:55:59 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE SCOM
OBJECT MODULE PLACED IN Scom.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Scom.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   2          //Scom test
   3          //MCU communication and PC
   4          //2003/04/13
   5          //
   6          //synchronization or in-phase
   7          //
   8          //
   9          //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  10          #include <AT89X52.H>
  11          #include <INTRINS.h>
  12          #include <STDIO.H>
  13          #include <AbsAcc.h>
  14          #include <string.h>
  15          #include "CHARGER.H"
  16          
  17          //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  18          void init_serial(void)
  19          {
  20   1           SCON = 0X50;
  21   1      /*Timer 2 is being used to generate baud rates.*/
  22   1           RCAP2L = 0XE8;
  23   1           RCAP2H = 0XFF;
  24   1           T2CON = 0X34;
  25   1           ES = 1;            /*IE.4      */
  26   1           RI = 0;              /*SCON.0*/
  27   1      }
  28          //communication control charactor
  29                  static unsigned char data comcontrol=0;
  30          //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  31          void Wmodem(char *s)
  32          {
  33   1      if(comcontrol!=0)return;
  34   1              ES=0;
  35   1              for(;*s;)
  36   1              {
  37   2                      unsigned int data i;
  38   2                      SBUF=*s++;
  39   2                      while(!_testbit_(TI))if(i++>10000)break;
  40   2                      i=0;
  41   2              }
  42   1              ES=1;
  43   1      }
  44          static unsigned char xdata rfrm[16] _at_ 0xDB90;//frame[0xAA][com][0xXX][0xXX]
  45          static unsigned char xdata sfrm[16] _at_ 0xDBA0;//frame[0xAA][com][0xXX][0xXX]
  46          static unsigned char xdata buf[60] _at_ 0xDBB0;//frame[0xAA][com][0xXX][0xXX]static unsigned char data cou
             -nt;
  47          static unsigned int xdata *tmp;
  48          
  49          //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  50          //Ready Maxim Data in buf
  51          code unsigned char all[2]={21,13};
  52          #define ALL_HIS all[0]
  53          #define ALL_SET all[1]
  54          //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C51 COMPILER V7.20   SCOM                                                                  06/20/2005 16:55:59 PAGE 2   

  55          #define COM_READ_HIS  0x066
  56          #define COM_COM_OK    0x099
  57          #define COM_READ_SET  0x044
  58          #define COM_WRITE_SET 0x033
  59          #define COM_WRITE_OK= 0xEEEE;//
  60          void onCommunication(void) interrupt SIO_VECTOR
  61          {
  62   1              static int data dcount=0;//Send frame counter
  63   1              static int data rcount=0;//Recive data frame counter
  64   1              static unsigned char data scount=0;//Send frame char counter
  65   1              static unsigned char data count=0;//Recive frame char counter
  66   1              static unsigned char data oCe=0;
  67   1              static unsigned char data allcount=0;
  68   1              char i;
  69   1              tmp=0xDBB0;//
  70   1      
  71   1      if(RI)
  72   1      {
  73   2              unsigned char data ocode;
  74   2      //Recive Frame
  75   2              ocode=SBUF; RI=0;       
  76   2              if(oCe==0)
  77   2              {
  78   3                      rfrm[count++]=ocode;oCe=1;
  79   3                      if(rfrm[0] == 0xAA||rfrm[0] == 0x55);//Search the head of Frame
  80   3                else {oCe=0;count=0;}//synchronization
  81   3                      return;
  82   3              }
  83   2      
  84   2              if(rfrm[count-1]==~ocode)//IScheck 
  85   2              {
  86   3                      oCe=0;
  87   3                      if(count!=3) return;
  88   3              }
  89   2              else{oCe=0;count=0;return;}
  90   2              RESET_DOG;
  91   2              oCe=0; count=0;//an Frame End 
  92   2      //Command Execite
  93   2              if(rfrm[0]==0xAA)
  94   2              {//explan command
  95   3                      //start send
  96   3                      tmp=0xDBB0;
  97   3                      comcontrol=22;
  98   3                      switch(rfrm[1])//UINT MAP(HIGHBYTE,LOWBYTE)
  99   3                      {
 100   4                      case COM_READ_HIS://Requear historydata
 101   4                              {link p;                p=&today; allcount=ALL_HIS;
 102   5                              for(i=0;i<rfrm[2];i++)p=p->up;//Move to The Day is Requear
 103   5                              for(i=0;i<21;i++)//fill send buffer
 104   5                              {if(i<3)*tmp++=p->date[i];
 105   6                                      else *tmp++=p->work[i-3];
 106   6                              }}
 107   4                              scount=0;               rcount=0;               dcount=0;               TI=1;
 108   4                              break;
 109   4                      case COM_READ_SET:
 110   4                              for(i=0;i<12;i++)if(i!=10)*tmp++=sys[i];//sys[10] is NULL
 111   4                              *tmp++=password; allcount=ALL_SET;
 112   4                              *tmp++=adtemp;//just temp.
 113   4                              scount=0;               rcount=0;               dcount=0;               TI=1;
 114   4                              break;
 115   4                      case COM_WRITE_SET://requer reciver data
 116   4                              if(rfrm[2]==0x22)comcontrol=0x22;
C51 COMPILER V7.20   SCOM                                                                  06/20/2005 16:55:59 PAGE 3   

 117   4                              if(rfrm[2]==0xEE)comcontrol=0x99;
 118   4                              scount=0;               rcount=0;               dcount=-1;
 119   4                              return;
 120   4                              break;
 121   4                      default:break;
 122   4                      }
 123   3              }
 124   2      //Recieve Data process
 125   2              if(rfrm[0]==0x55)//recive seter
 126   2              if(comcontrol!=11)//Recive data no using, ==11
 127   2              {
 128   3                      buf[rcount*2]=rfrm[1];
 129   3                      buf[rcount*2+1]=rfrm[2];
 130   3                      if(rcount<19)rcount++;//total 19 value
 131   3                      else//All Recieve
 132   3                {comcontrol=11;
 133   4                              rcount=0;
 134   4                              scount=0;
 135   4                              dcount=0;
 136   4                              allcount=24;
 137   4                              TI=1;
 138   4                      }
 139   3              }
 140   2              memset(rfrm,0,sizeof(rfrm));
 141   2      }
 142   1      //Send Data 
 143   1      if(TI)
 144   1      {
 145   2              TI=0;
 146   2              if(scount==0)
 147   2              {
 148   3                      if(dcount<0)return;
 149   3                      if(dcount==allcount)
 150   3                        {dcount=-80;comcontrol=0;return;}//Send end
 151   3                      sfrm[0]=0x55;
 152   3                      sfrm[1]=0xAA;
 153   3                      sfrm[2]=buf[2*dcount];
 154   3                      sfrm[3]=~sfrm[2];
 155   3                      sfrm[4]=buf[2*dcount+1];
 156   3                      sfrm[5]=~sfrm[4];
 157   3                      dcount++;
 158   3                      RESET_DOG;
 159   3              }
 160   2              if(scount<6)    
 161   2              {
 162   3                      SBUF=sfrm[scount++];
 163   3              }
 164   2              if(scount>=6)scount=0;
 165   2      }
 166   1      
 167   1      }
 168          
 169          #define system_volatage sys[7]
 170          #define float_revise    sys[10]
 171          #define test_temp               sys[11]
 172          #define desinged_rate   sys[12]
 173          
 174          void SetSys(void)
 175          {
 176   1      if(comcontrol!=0x99)return;
 177   1      {
 178   2      int data i;
C51 COMPILER V7.20   SCOM                                                                  06/20/2005 16:55:59 PAGE 4   

 179   2      comcontrol=0;
 180   2                              tmp=0xDBB0;
 181   2                              for(i=0;i<6;i++)buf[i]=buf[2*i+1];
 182   2                              setup12887(buf);
 183   2                              for(i=0;i<12;i++)//seting
 184   2                              {
 185   3                                      if(i<10)sys[i]=*(tmp+6+i);
 186   3                                      else if(i==10){test_temp=*(tmp+6+i);continue;}//sys[11] is test temp.
 187   3                                                       else{password=*(tmp+6+i);continue;}
 188   3                              }
 189   2                              just=test_temp-adtemp;
 190   2                              i=0;while(stab[0][i]!=system_volatage){if(i<4)i++;else {i=10;break;}}
 191   2                              if(i!=10)
 192   2                              {
 193   3                                      desinged_rate=stab[4][i];//volotage float_revise
 194   3                                      float_revise=stab[3][i];//float_revise float_revise
 195   3                              }
 196   2                              init_rate_workpoint(5);
 197   2                              memset((void*)buf,0,sizeof(buf));
 198   2                              RESET_DOG;
 199   2      }
 200   1      }
 201          
 202          //
 203          /*
 204          //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 205          static void sendchar(unsigned char c) 
 206          {
 207                  unsigned int data i;
 208                  SBUF=c;
 209                  while(!_testbit_(TI))if(i++>10000)break;
 210          }
 211          static unsigned char recc()
 212          {
 213                  unsigned int data i;
 214                  while(!_testbit_(RI))if(i++>10000)return 0;
 215                  return SBUF;
 216          }
 217          
 218          */
 219          
 220          
 221          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1371    ----
   CONSTANT SIZE    =      2    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11      11
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -