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

📄 memory.lst

📁 智能打铃系统(MCU)端程序
💻 LST
字号:
C51 COMPILER V7.06   MEMORY                                                                12/17/2006 14:56:13 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MEMORY
OBJECT MODULE PLACED IN Memory.OBJ
COMPILER INVOKED BY: E:\My Electronic\Tools\Design tools\keil7.06\C51\BIN\C51.EXE Memory.c LARGE OPTIMIZE(SIZE)

stmt level    source

   1          #include <REG52.H>
   2          
   3          
   4          //void delay_us(unsigned char us);
   5          //============= 93C46端口定义 ==============
   6          sbit    SPI_CS=P2^3;            //片选
   7          sbit    SPI_SCLK=P2^2;  //时钟
   8          sbit    SPI_DI=P2^1;            //93C46数据输入口
   9          sbit    SPI_DO=P2^0;            //93C46数据输出口
  10          //================ END ====================
  11          
  12          void    SPI_Start()
  13          {
  14   1              SPI_CS = 0;
  15   1              SPI_SCLK = 0;
  16   1              SPI_CS = 1;
  17   1              SPI_DI=1;
  18   1              SPI_SCLK = 1;
  19   1              SPI_SCLK = 0;
  20   1      }
  21          
  22          void    SPI_SendByte(unsigned char SDATA)
  23          {
  24   1              unsigned char i;
  25   1              SPI_SCLK = 0;
  26   1              for(i=8;i>0;i--)
  27   1              {
  28   2                      SPI_DI = SDATA&0x80;
  29   2                      SPI_SCLK = 1;
  30   2                      SDATA <<= 1; 
  31   2                      SPI_SCLK = 0;
  32   2              }
  33   1      }
  34          
  35          void    WeitReady()
  36          {
  37   1              SPI_DO=1;
  38   1              SPI_CS=1;
  39   1              SPI_SCLK=1;
  40   1              while(SPI_DO == 0)
  41   1              {
  42   2                      SPI_SCLK=0;
  43   2                      SPI_SCLK=1;
  44   2              }
  45   1              SPI_CS=0;
  46   1      }
  47          
  48          void Mem_EnWrite()
  49          {
  50   1              unsigned char i,InData;
  51   1              SPI_CS=0; 
  52   1              SPI_SCLK=0;
  53   1              SPI_CS=1;
  54   1              InData=0x98;            // 10011XXXXX
  55   1              for(i=10;i>0;i--) // 9
C51 COMPILER V7.06   MEMORY                                                                12/17/2006 14:56:13 PAGE 2   

  56   1              { 
  57   2                      SPI_DI=InData&0x80;
  58   2                      SPI_SCLK=1; 
  59   2                      SPI_SCLK=0;
  60   2                      InData<<=1;
  61   2              }
  62   1              SPI_CS=0;
  63   1      }
  64          
  65          void Mem_Clrall()
  66          {
  67   1              unsigned char i,InData;
  68   1              SPI_CS=0; 
  69   1              SPI_SCLK=0;
  70   1              SPI_CS=1;
  71   1              InData=0x88;            // 10001XXXXX
  72   1              for(i=10;i>0;i--) // 9
  73   1              { 
  74   2                      SPI_DI=InData&0x80;
  75   2                      SPI_SCLK=1; 
  76   2                      SPI_SCLK=0;
  77   2                      InData<<=1;
  78   2              }
  79   1              SPI_SendByte(0);
  80   1              SPI_CS=0;
  81   1              WeitReady();
  82   1      }
  83          
  84          void Mem_Write(unsigned char Addr,unsigned char MData)
  85          {
  86   1              unsigned char i;
  87   1              Mem_EnWrite();
  88   1              SPI_Start();
  89   1              SPI_DI = 0;
  90   1              SPI_SCLK = 1;
  91   1              SPI_SCLK = 0;
  92   1              SPI_DI = 1;
  93   1              SPI_SCLK = 1;
  94   1              SPI_SCLK = 0;
  95   1              for(i=7;i>0;i--)
  96   1              {
  97   2                      Addr <<= 1;
  98   2                      SPI_DI=Addr&0x80;
  99   2                      SPI_SCLK = 1;
 100   2                      SPI_SCLK = 0;
 101   2              }
 102   1              SPI_SendByte(MData);
 103   1              SPI_CS=0;
 104   1              WeitReady();
 105   1      }
 106          
 107          unsigned char Mem_Read(unsigned char Addr)
 108          {
 109   1              unsigned char i,temp;
 110   1              SPI_Start();
 111   1              SPI_DI = 1;
 112   1              SPI_SCLK = 1;
 113   1              SPI_SCLK = 0;
 114   1              SPI_DI = 0;
 115   1              SPI_SCLK = 1;
 116   1              SPI_SCLK = 0;
 117   1              for(i=7;i>0;i--)
C51 COMPILER V7.06   MEMORY                                                                12/17/2006 14:56:13 PAGE 3   

 118   1              {
 119   2                      Addr <<= 1;
 120   2                      SPI_DI=Addr&0x80;
 121   2                      SPI_SCLK = 1;
 122   2                      SPI_SCLK = 0;
 123   2              }
 124   1              SPI_DO=1;
 125   1              for(i=8;i>0;i--)
 126   1              {
 127   2                      temp <<= 1;
 128   2                      SPI_SCLK = 1;
 129   2                      temp |= SPI_DO;
 130   2                      SPI_SCLK = 0;
 131   2              }
 132   1              SPI_CS=0;
 133   1              return temp;
 134   1      }
 135          
 136          
 137          //内存存储,编号从1开始,每个记录的位置为  编号*3-2,地址0存放记录总数
 138          //时间使用BCD码存放 
 139          
 140          unsigned char Read_RingTime(unsigned char RingNum,unsigned char *p)             //读取打铃时间
 141          {
 142   1              unsigned char RingCount,Addr;
 143   1              RingCount=Mem_Read(0x00);
 144   1              if (RingNum>RingCount) return(0);
 145   1              Addr=RingNum*3-2;
 146   1              *p=Mem_Read(Addr);
 147   1              p++;
 148   1              Addr++;
 149   1              *p=Mem_Read(Addr);
 150   1              p++;
 151   1              Addr++;
 152   1              *p=Mem_Read(Addr);
 153   1              return(1);
 154   1      }
 155          
 156          void    Write_RingTime(unsigned char RingNum,unsigned char *p)
 157          {
 158   1                      Mem_Write(RingNum*3-2,*p++);
 159   1                      Mem_Write(RingNum*3-1,*p++);
 160   1                      Mem_Write(RingNum*3,*p);
 161   1      }
 162          
 163          void Ring_Paixu()
 164          {
 165   1              unsigned char RingCount,i,j,temp1[3],temp2[3];
 166   1              RingCount=Mem_Read(0);
 167   1              if (RingCount>1)
 168   1              {
 169   2                      for (i=1;i<RingCount;i++)
 170   2                      {
 171   3                              Read_RingTime(i,temp1);
 172   3                              for(j=i+1;j<=RingCount;j++)
 173   3                              {
 174   4                                      Read_RingTime(j,temp2);
 175   4                                      if (temp1[0]<temp2[0]) continue;
 176   4                                      else if (temp1[0]==temp2[0])
 177   4                                      {
 178   5                                              if (temp1[1]<temp2[1]) continue;
 179   5                                      }
C51 COMPILER V7.06   MEMORY                                                                12/17/2006 14:56:13 PAGE 4   

 180   4                                      else 
 181   4                                      Write_RingTime(i,temp2);
 182   4                                      Write_RingTime(j,temp1);
 183   4                              }
 184   3                      }
 185   2              }
 186   1      }
 187          
 188          unsigned char DelRing(unsigned char Num)
 189          {
 190   1              unsigned char i,temp,rMax;
 191   1              rMax=Mem_Read(0)*3-2;
 192   1              i=Num*3-2;
 193   1              for(;i<=rMax;i++)
 194   1              {
 195   2                      temp=Mem_Read(i+3);
 196   2                      Mem_Write(i,temp);
 197   2              }
 198   1              temp=Mem_Read(0);
 199   1              temp--;
 200   1              Mem_Write(0,temp);
 201   1              Ring_Paixu();
 202   1              return temp;
 203   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    555    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----      13
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -