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

📄 spi.lst

📁 单片机接口技术实用子程序配套源代码:里面有许多基本实用的例子
💻 LST
字号:
C51 COMPILER V7.06   SPI                                                                   03/29/2005 14:08:44 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SPI
OBJECT MODULE PLACED IN SPI.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE SPI.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //-----------------------函数声明,变量定义--------------------------------------------------------
   2          #include <reg51.h>
   3          #include <intrins.h>
   4          sbit SCK=P1^0;                          // 将p1.0口模拟时钟输出
   5          sbit MOSI=P1^1;                         // 将p1.1口模拟主机输出
   6          sbit MISO=P1^2;                         // 将p1.1口模拟主机输入
   7          sbit SS1=P1^3;                          // 将p1.1口模拟片选
   8          
   9          #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};                  
  10          
  11          //--------------------------------------------------------------------------------------------------
  12          // 函数名称: SPISendByte
  13          // 入口参数: ch
  14          // 函数功能: 发送一个字节
  15          //--------------------------------------------------------------------------------------------------
  16          void SPISendByte(unsigned char ch)
  17          { 
  18   1              unsigned char idata n=8;     // 向SDA上发送一位数据字节,共八位      
  19   1              SCK = 1 ;                  //时钟置高
  20   1              SS1 = 0 ;                  //选择从机
  21   1       
  22   1              while(n--)
  23   1              { 
  24   2                  delayNOP();
  25   2                  SCK = 0 ;                  //时钟置低
  26   2                if((ch&0x80) == 0x80)    // 若要发送的数据最高位为1则发送位1
  27   2                      {       
  28   3                        MOSI = 1;    // 传送位1
  29   3                      }
  30   2                      else
  31   2                      {  
  32   3                              MOSI = 0;    // 否则传送位0
  33   3                      }
  34   2                      delayNOP();
  35   2                      ch = ch<<1;        // 数据左移一位
  36   2                   SCK = 1 ;                  //时钟置高 
  37   2              }
  38   1      }
  39          //--------------------------------------------------------------------------------------------------
  40          // 函数名称: SPIreceiveByte
  41          // 返回接收的数据
  42          // 函数功能: 接收一字节子程序
  43          //--------------------------------------------------------------------------------------------------
  44          unsigned char SPIreceiveByte()
  45          {
  46   1              unsigned char idata n=8;    // 从MISO线上读取一上数据字节,共八位
  47   1              unsigned char tdata;
  48   1              SCK = 1;                   //时钟为高
  49   1              SS1 = 0;                   //选择从机
  50   1              while(n--)
  51   1              {       
  52   2                      delayNOP();
  53   2                      SCK = 0;                   //时钟为低
  54   2                      delayNOP();
  55   2                      tdata = tdata<<1;    // 左移一位,或_crol_(temp,1)
C51 COMPILER V7.06   SPI                                                                   03/29/2005 14:08:44 PAGE 2   

  56   2                      if(MISO == 1)
  57   2                              tdata = tdata|0x01;    // 若接收到的位为1,则数据的最后一位置1
  58   2                      else 
  59   2                              tdata = tdata&0xfe;    // 否则数据的最后一位置0
  60   2                      SCK=1;
  61   2              }
  62   1              return(tdata);
  63   1      }
  64          //--------------------------------------------------------------------------------------------------
  65          // 函数名称: SPIsend_receiveByte
  66          // 入口参数: ch
  67          // 返回接收的数据
  68          // 函数功能:串行输入/输出子程序
  69          //--------------------------------------------------------------------------------------------------
  70          unsigned char SPIsend_receiveByte(unsigned char ch)
  71          {
  72   1              unsigned char idata n=8;    // 从MISO线上读取一上数据字节,共八位
  73   1              unsigned char tdata;
  74   1              SCK = 1;                   //时钟为高
  75   1              SS1 = 0;                   //选择从机
  76   1              while(n--)
  77   1              {       
  78   2                   delayNOP();
  79   2                   SCK = 0;                   //时钟为低
  80   2                  delayNOP();
  81   2                       {
  82   3                      tdata = tdata<<1;    // 左移一位,或_crol_(temp,1)
  83   3                        if(MISO == 1)
  84   3                              tdata = tdata|0x01;    // 若接收到的位为1,则数据的最后一位置1
  85   3                        else 
  86   3                              tdata = tdata&0xfe;    // 否则数据的最后一位置0
  87   3                        }
  88   2                {
  89   3                    if((ch&0x80) == 0x80)    // 若要发送的数据最高位为1则发送位1
  90   3                                 {       
  91   4                        MOSI = 1;    // 传送位1
  92   4                                  }
  93   3                             else
  94   3                                  {  
  95   4                                MOSI = 0;    // 否则传送位0
  96   4                                  }
  97   3                              ch = ch<<1;        // 数据左移一位
  98   3                }
  99   2              SCK=1;
 100   2              }
 101   1              return(tdata);
 102   1      }


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