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

📄 spi.lst

📁 实现cc2500发送
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   SPI                                                                   12/12/2006 10:05:03 PAGE 1   


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

line level    source

   1          #include <spi.h>
   2          
   3                  uchar jindu = 1;
   4                  
   5          /*延迟程序12M 大约5uS*/
   6          void delay5us()
   7          {
   8   1              uint i;
   9   1              for (i=0;i<5;i++)
  10   1                      _nop_();        
  11   1      }
  12          
  13          //从SI发数据
  14          void SPISendByte(uchar ch)
  15          {
  16   1              uchar idata n=8;
  17   1              SCLK=0;
  18   1              CSn=0;
  19   1          delay5us();
  20   1              while(n--)
  21   1              {
  22   2              delay5us();
  23   2                      SCLK=0;
  24   2                      if((ch&0x80)==0x80)
  25   2                              {
  26   3                              SI=1;
  27   3                      }
  28   2                      else
  29   2                              {
  30   3                              SI=0;
  31   3                              }
  32   2                      delay5us();
  33   2                      ch=ch<<1;
  34   2                      SCLK=1;
  35   2              }
  36   1      delay5us();
  37   1      SCLK=0;
  38   1      }
  39          
  40          //SO上接收数据
  41          uchar SPIreceiveByte()
  42          {
  43   1              uchar idata n=8;
  44   1              uchar tdata;
  45   1              SCLK=0;
  46   1              CSn=0;
  47   1              while (n--)
  48   1              {
  49   2              delay5us();
  50   2                      SCLK=0;
  51   2              delay5us();
  52   2                      tdata=tdata<<1;
  53   2                      if(SO==1)
  54   2                          tdata=tdata|0x01;
  55   2                      else
C51 COMPILER V7.50   SPI                                                                   12/12/2006 10:05:03 PAGE 2   

  56   2                      tdata=tdata&0xfe;
  57   2                      SCLK=1;
  58   2              }
  59   1      delay5us();
  60   1      SCLK=0;
  61   1      return(tdata);
  62   1      }
  63          
  64          uchar spisend_receivebyte(uchar ch)   //发送数据 ,返回状态 
  65          {
  66   1          uchar idata n = 8;
  67   1              uchar tdata;
  68   1              SCLK = 0;
  69   1              CSn = 0;
  70   1          delay5us();
  71   1              while (n--)
  72   1              {
  73   2                  delay5us();
  74   2                      SCLK = 0;
  75   2                      delay5us();
  76   2      
  77   2                      tdata = tdata << 1;
  78   2                      if (SO == 1)
  79   2                      {
  80   3                          tdata = tdata | 0x01;
  81   3                      }
  82   2                      else
  83   2                      {
  84   3                          tdata = tdata & 0xfe;
  85   3                      }
  86   2      
  87   2                      if((ch & 0x80) == 0x80)
  88   2                      {
  89   3                          SI = 1;
  90   3                      }
  91   2                      else
  92   2                      {
  93   3                          SI = 0;
  94   3                      }
  95   2                      ch = ch << 1;
  96   2                  SCLK = 1;
  97   2              }
  98   1                  delay5us();
  99   1                      SCLK = 0;
 100   1              return(tdata);
 101   1      }
 102          
 103          /*void autoreset(void)        //上电自动复位
 104          {
 105              SCLK=1;
 106                  SI=0;
 107              CSn = 1;
 108                  CSn = 0;
 109                  while (SO)
 110                  {
 111                  }
 112                  delay5us();
 113                  delay5us();
 114                  CSn = 1;                             
 115                  SCLK = 0;
 116                  SI=1;
 117          }*/
C51 COMPILER V7.50   SPI                                                                   12/12/2006 10:05:03 PAGE 3   

 118          
 119          void power_on(void)
 120          {
 121   1              int i;
 122   1          CSn = 1;
 123   1              SCLK = 1;
 124   1              SI = 0;
 125   1              CSn = 0;
 126   1              delay5us();
 127   1              CSn = 1;
 128   1              for (i = 0; i <100; i++)         //持续>40us
 129   1          {
 130   2                  delay5us();
 131   2              }
 132   1              CSn = 0;
 133   1              while (SO)                               //将CSn拉低,等待SO变低(CHIP_RDYn)
 134   1              {}
 135   1              SPISendByte(0x30);
 136   1              while (SO)                               //当SO再次为低时,时钟与电压都稳定了
 137   1              {}
 138   1              CSn=1;
 139   1          SCLK=0;
 140   1              SI=1;
 141   1              SO=1;
 142   1      }
 143          
 144          void LEDSHOW(uchar ch)
 145          {
 146   1          uchar i=100;uint j;
 147   1          while (i--)
 148   1              {
 149   2                      P1 = 0xef;
 150   2                  switch(ch&0x0f)
 151   2                      {
 152   3                          case 0x00:  P0 = 0xc0;      break;
 153   3                              case 0x01:  P0 = 0xf9;  break;
 154   3                          case 0x02:  P0 = 0xa4;  break;
 155   3                          case 0x03:  P0 = 0xb0;      break;
 156   3                          case 0x04:  P0 = 0x99;      break;
 157   3                          case 0x05:  P0 = 0x92;      break;
 158   3                          case 0x06:  P0 = 0x82;      break;
 159   3                          case 0x07:  P0 = 0xf8;      break;
 160   3                          case 0x08:  P0 = 0x80;      break;
 161   3                          case 0x09:  P0 = 0x90;      break;
 162   3                          case 0x0a:  P0 = 0x88;      break;
 163   3                          case 0x0b:  P0 = 0x83;      break;
 164   3                          case 0x0c:  P0 = 0xc6;      break;
 165   3                          case 0x0d:  P0 = 0xa1;      break;
 166   3                          case 0x0e:  P0 = 0x86;      break;
 167   3                          case 0x0f:  P0 = 0x8e;      break;
 168   3      
 169   3                  }
 170   2                  for(j=0;j<100;j++)     {   delay5us();  delay5us();     }
 171   2                  P1 = 0xdf;
 172   2                  switch((ch>>4)&0x0f)
 173   2                      {
 174   3                          case 0x00:  P0 = 0xc0;      break;
 175   3                              case 0x01:  P0 = 0xf9;  break;
 176   3                          case 0x02:  P0 = 0xa4;  break;
 177   3                          case 0x03:  P0 = 0xb0;      break;
 178   3                          case 0x04:  P0 = 0x99;  break;
 179   3                          case 0x05:  P0 = 0x92;      break;
C51 COMPILER V7.50   SPI                                                                   12/12/2006 10:05:03 PAGE 4   

 180   3                          case 0x06:  P0 = 0x82;      break;
 181   3                          case 0x07:  P0 = 0xf8;      break;
 182   3                          case 0x08:  P0 = 0x80;      break;
 183   3                          case 0x09:  P0 = 0x90;      break;
 184   3                          case 0x0a:  P0 = 0x88;      break;
 185   3                          case 0x0b:  P0 = 0x83;      break;
 186   3                          case 0x0c:  P0 = 0xc6;      break;

⌨️ 快捷键说明

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