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

📄 spi.lst

📁 一个基于XMODEM协议的下载字库的程序
💻 LST
字号:
C51 COMPILER V7.50   SPI                                                                   06/22/2006 09:45:47 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SPI
OBJECT MODULE PLACED IN .\myproject\SPI.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SPI.C LARGE OPTIMIZE(5,SPEED) BROWSE DEBUG OBJECTEXTEND OBJECT(.\myproject\
                    -SPI.obj)

line level    source

   1          /**************************************************************
   2          Copyright (C), 2002-2030, ZhongXing Information Tech. Co., Ltd.
   3          文件名  :  SPI.c
   4          
   5          作  者  : Lv Yanfei       版本:V1.00.00       完成日期:2006-04-17
   6          
   7          描  述  : 本模块描述了IO脚模拟SPI接口与NX25P40通信的所有函数   
   8          引脚接口如下:
   9          P3.4 ---- S0
  10          P3.5 ---- SI
  11          P3.6 ---- SCK
  12          PA6  ---- CS
  13          ***************************************************************/
  14          
  15          #define SPI_GLOBAL
  16          #include "config.h"
  17          
  18          
  19          void SPI_SendChar(INT8U ch)
  20          {
  21   1              INT8U data i=8;
  22   1              
  23   1              while(i--)
  24   1              {
  25   2                      SCK = 0;
  26   2                      if((ch & 0x80) == 0x80) SI = 1;
  27   2                      else                                    SI = 0;
  28   2                      SCK = 1;
  29   2                      ch <<= 1;
  30   2              }
  31   1      } 
  32          
  33          INT8U SPI_ReadChar(void)
  34          {
  35   1              INT8U data i=8, ch=0;
  36   1              
  37   1              while(i--)
  38   1              {
  39   2                      ch <<= 1;
  40   2                      SCK = 1;
  41   2                      SCK = 0;
  42   2                      
  43   2                      if(SO == 1)     ch |= 0x01;
  44   2                      else            ch &= 0xFE;
  45   2              }
  46   1              SCK = 1;
  47   1              
  48   1              return ch;
  49   1      }
  50          ////////////////////////////////////////////////////////////////
  51          #ifdef SPI_ENABLEPROGRAM
  52          INT8U SPI_ReadStatus(void)
  53          {
  54   1              INT8U data ch;
C51 COMPILER V7.50   SPI                                                                   06/22/2006 09:45:47 PAGE 2   

  55   1              
  56   1              CS0;
  57   1              SPI_SendChar(RDSR_INST);
  58   1      JREAD_STATUS0:
  59   1              ch = SPI_ReadChar();
  60   1              if((ch & 0x01) == 1)    goto JREAD_STATUS0;
  61   1              CS1;
  62   1              
  63   1              return ch;
  64   1      }
  65          
  66          void SPI_EnPro(void)
  67          {
  68   1              CS0;
  69   1              SPI_SendChar(PREN_INST);
  70   1              CS1;
  71   1      }
  72          
  73          void SPI_DisPro(void)
  74          {
  75   1              CS0;
  76   1              SPI_SendChar(PRDI_INST);
  77   1              CS1;
  78   1      }
  79          
  80          void SPI_EraseSector(INT8U sec)
  81          {
  82   1              SPI_EnPro();
  83   1              CS0;
  84   1              SPI_SendChar(SECTOR_ERASE);
  85   1              SPI_SendChar(sec);
  86   1              SPI_SendChar(0x00);
  87   1              SPI_SendChar(0x00);
  88   1              CS1;
  89   1              SPI_ReadStatus();
  90   1              SPI_DisPro();            
  91   1      }
  92          /*******************************************************************************
  93          程序名:        SPI_EraseBulk
  94          说  明:        擦除所有扇区
  95          ********************************************************************************/
  96          void SPI_EraseBulk(void)
  97          {
  98   1              INT8U i;
  99   1      
 100   1              for(i=0; i<8; i++)
 101   1              {
 102   2                      SPI_EraseSector(i);
 103   2                      delay_10ms();
 104   2              }
 105   1      }
 106          /*******************************************************************************
 107          程序名:        SPI_Program
 108          说  明:        从地址addr开始,连续写入len个字节,数据来源是ptr指向的内存,
 109          ********************************************************************************/
 110          void SPI_Program(INT32U addr, INT8U len, INT8U *ptr)
 111          {
 112   1              INT8U i, addrc, addrh, addrl;
 113   1      
 114   1              SPI_EnPro();
 115   1              addrl = (INT8U)addr;
 116   1              addr >>= 8;
C51 COMPILER V7.50   SPI                                                                   06/22/2006 09:45:47 PAGE 3   

 117   1              addrh = (INT8U)addr;
 118   1              addr >>= 8;
 119   1              addrc = (INT8U)addr;
 120   1              CS0;
 121   1              SPI_SendChar(PROGRAM_INST);
 122   1              SPI_SendChar(addrc);
 123   1              SPI_SendChar(addrh);
 124   1              SPI_SendChar(addrl);
 125   1              for(i=0; i<len; i++)
 126   1              {
 127   2                      SPI_SendChar(*ptr++);
 128   2              }
 129   1              CS1;
 130   1              SPI_ReadStatus();
 131   1              SPI_DisPro();
 132   1      }
 133          #endif
 134          /////////////////////////////////////////////////////////////////////////
 135          /*******************************************************************************
 136          程序名:        SPI_Read
 137          说  明:        从地址addr开始,连续读取len个字节,保存到ptr指向的内存,
 138                                  y_n_bit 指示是否将读取的数据反显(1->0 0->1)
 139          ********************************************************************************/
 140          void SPI_Read(INT32U addr, INT8U len, INT8U *ptr, INT8U y_n_bit)
 141          {
 142   1              INT8U i, addrc, addrh, addrl;
 143   1              INT8U *p;
 144   1      
 145   1              p = ptr;
 146   1              addrl = (INT8U)addr;
 147   1              addr >>= 8;
 148   1              addrh = (INT8U)addr;
 149   1              addr >>= 8;
 150   1              addrc = (INT8U)addr;
 151   1      
 152   1              CS0;
 153   1              SPI_SendChar(READ_INST);
 154   1              SPI_SendChar(addrc);
 155   1              SPI_SendChar(addrh);
 156   1              SPI_SendChar(addrl);
 157   1              if(y_n_bit == 1)
 158   1              {
 159   2                      for(i=0; i<len; i++)
 160   2                      {
 161   3                              *p++ = SPI_ReadChar();
 162   3                      }
 163   2              }
 164   1              else
 165   1              {
 166   2                      for(i=0; i<len; i++)
 167   2                      {
 168   3                              *p++ = ~(SPI_ReadChar());
 169   3                      }
 170   2              }
 171   1              CS1;
 172   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    627    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----      22
C51 COMPILER V7.50   SPI                                                                   06/22/2006 09:45:47 PAGE 4   

   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       4
   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 + -