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

📄 spi.lst

📁 f340的MP3程序,通过SD卡读入解码器
💻 LST
字号:
C51 COMPILER V8.09   SPI                                                                   05/19/2011 23:29:40 PAGE 1   


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

line level    source

   1          #include "spi.h"
   2          #include "mytype.h"
   3          #include "Delay.h"
   4          
   5          /*******************************************************
   6          
   7                  +----------------------------------------+
   8                  | 振南电子 驱动程序模块 软件模拟SPI 部分 |
   9                  +----------------------------------------+
  10          
  11            此源码版权属 振南 全权享有,如欲引用,敬请署名并告知
  12                  严禁随意用于商业目的,违者必究,后果自负
  13                   振南电子 
  14                       ->产品网站 http://www.znmcu.cn/
  15                       ->产品网店 http://shop.znmcu.cn/
  16                       ->产品咨询 QQ:987582714 
  17                                              MSN:yzn07@126.com
  18                                      WW:yzn07    
  19                                                                                    
  20          ********************************************************/
  21          
  22          unsigned char bdata dat; //dat是可位寻址的变量
  23          
  24          sbit dat7=dat^7;
  25          sbit dat6=dat^6;
  26          sbit dat5=dat^5;
  27          sbit dat4=dat^4;
  28          sbit dat3=dat^3;
  29          sbit dat2=dat^2;
  30          sbit dat1=dat^1;
  31          sbit dat0=dat^0; //取出dat的各个位
  32          
  33          /******************************************************************
  34           - 功能描述:IO模拟SPI,发送一个字节
  35           - 隶属模块:SPI模块
  36           - 函数属性:外部,供用户调用
  37           - 参数说明:x:要发送的字节
  38           - 返回说明:无返回
  39           - 注:很多情况下,SPI是需要有较高的速度的,此函数中不使用任何循环
  40                 结构,如for(;;) while等等,并且使用了位寻址就是为了提高速度
  41           ******************************************************************/
  42          
  43          void SPI_WriteByte(unsigned char x) 
  44          {
  45   1       /*----这种使用循环与位运算的实现方式,速度要比直接用位寻址与顺序执行方式实现慢得多
  46   1         ----因为它把大部分的时间花在了循环因子的递增、比较与位运行上了
  47   1        unsigned char i=0;
  48   1        for(i=0;i<8;i++)
  49   1        {
  50   1         SPI_SI=x&(0x80>>i);
  51   1         SPI_SCL=0; 
  52   1         SPI_SCL=1;
  53   1        }
  54   1       ----------------------------------*/
  55   1      
C51 COMPILER V8.09   SPI                                                                   05/19/2011 23:29:40 PAGE 2   

  56   1       dat=x; //将x的值赋给可位寻址的变量dat,以便取出各个位
  57   1       
  58   1       SPI_SI=dat7; //取出第7个位,写到数据线上
  59   1       SPI_SCL=0; 
  60   1       SPI_SCL=1;       //时钟线产生上升沿,数据被写入
  61   1      
  62   1       SPI_SI=dat6;
  63   1       SPI_SCL=0; 
  64   1       SPI_SCL=1;
  65   1      
  66   1       SPI_SI=dat5;
  67   1       SPI_SCL=0;
  68   1       SPI_SCL=1;
  69   1      
  70   1       SPI_SI=dat4;
  71   1       SPI_SCL=0;
  72   1       SPI_SCL=1;
  73   1      
  74   1       SPI_SI=dat3;
  75   1       SPI_SCL=0; 
  76   1       SPI_SCL=1;
  77   1      
  78   1       SPI_SI=dat2;
  79   1       SPI_SCL=0;
  80   1       SPI_SCL=1;
  81   1      
  82   1       SPI_SI=dat1;
  83   1       SPI_SCL=0; 
  84   1       SPI_SCL=1;
  85   1      
  86   1       SPI_SI=dat0;
  87   1       SPI_SCL=0;
  88   1       SPI_SCL=1;
  89   1      }
  90          
  91          /******************************************************************
  92           - 功能描述:IO模拟SPI,读取一个字节
  93           - 隶属模块:SPI模块
  94           - 函数属性:外部,供用户调用
  95           - 参数说明:无
  96           - 返回说明:读到的字节
  97           - 注:很多情况下,SPI是需要有较高的速度的,此函数中不使用任何循环
  98                 结构,如for(;;) while等等,并且使用了位寻址就是为了提高速度
  99           ******************************************************************/
 100          
 101          unsigned char SPI_ReadByte() 
 102          {  
 103   1       SPI_SO=1;
 104   1      
 105   1       SPI_SCL=1;
 106   1       delay(1);
 107   1       SPI_SCL=0;
 108   1       delay(1);
 109   1       dat7=SPI_SO; 
 110   1      
 111   1       SPI_SCL=1;
 112   1       delay(1);
 113   1       SPI_SCL=0;
 114   1       delay(1);
 115   1       dat6=SPI_SO; 
 116   1      
 117   1       SPI_SCL=1;
C51 COMPILER V8.09   SPI                                                                   05/19/2011 23:29:40 PAGE 3   

 118   1       delay(1);
 119   1       SPI_SCL=0;
 120   1       delay(1);
 121   1       dat5=SPI_SO; 
 122   1      
 123   1       SPI_SCL=1;
 124   1       delay(1);
 125   1       SPI_SCL=0;
 126   1       delay(1);
 127   1       dat4=SPI_SO; 
 128   1      
 129   1       SPI_SCL=1;
 130   1       delay(1);
 131   1       SPI_SCL=0;
 132   1       delay(1);
 133   1       dat3=SPI_SO; 
 134   1      
 135   1       SPI_SCL=1;
 136   1       delay(1);
 137   1       SPI_SCL=0;
 138   1       delay(1);
 139   1       dat2=SPI_SO; 
 140   1      
 141   1       SPI_SCL=1;
 142   1       delay(1);
 143   1       SPI_SCL=0;
 144   1       delay(1);
 145   1       dat1=SPI_SO;
 146   1      
 147   1       SPI_SCL=1;
 148   1       delay(1);
 149   1       SPI_SCL=0;
 150   1       delay(1);
 151   1       dat0=SPI_SO; 
 152   1       
 153   1       return dat;
 154   1      }


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