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

📄 spidemo.lst

📁 STC-MCU-SPI演示(源代码)
💻 LST
字号:
C51 COMPILER V8.02   SPIDEMO                                                               08/04/2010 09:13:31 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE SPIDEMO
OBJECT MODULE PLACED IN SPIDemo.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SPIDemo.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*------------------------------------------------------------------*/
   2          /* --- STC MCU International Limited -------------------------------*/
   3          /* --- STC 1T Series MCU SPI Demo(Each other as the master-slave) --*/
   4          /* --- Mobile: (86)13922805190 -------------------------------------*/
   5          /* --- Fax: 86-755-82944243 ----------------------------------------*/
   6          /* --- Tel: 86-755-82948412 ----------------------------------------*/
   7          /* --- Web: www.STCMCU.com -----------------------------------------*/
   8          /* If you want to use the program or the program referenced in the  */
   9          /* article, please specify in which data and procedures from STC    */
  10          /*------------------------------------------------------------------*/
  11          
  12          #include "reg51.h"
  13          
  14          #define FOSC        18432000L
  15          #define BAUD        (256 - FOSC / 32 / 115200)
  16          
  17          typedef unsigned char BYTE;
  18          typedef unsigned int WORD;
  19          typedef unsigned long DWORD;
  20          
  21          sfr  AUXR       =   0x8e;       //Auxiliary register
  22          
  23          sfr SPSTAT      =   0xcd;       //SPI status register
  24          #define SPIF        0x80        //SPSTAT.7
  25          #define WCOL        0x40        //SPSTAT.6
  26          sfr SPCTL       =   0xce;       //SPI control register
  27          #define SSIG        0x80        //SPCTL.7
  28          #define SPEN        0x40        //SPCTL.6
  29          #define DORD        0x20        //SPCTL.5
  30          #define MSTR        0x10        //SPCTL.4
  31          #define CPOL        0x08        //SPCTL.3
  32          #define CPHA        0x04        //SPCTL.2
  33          #define SPDHH       0x00        //CPU_CLK/4
  34          #define SPDH        0x01        //CPU_CLK/16
  35          #define SPDL        0x02        //CPU_CLK/64
  36          #define SPDLL       0x03        //CPU_CLK/128
  37          sfr SPDAT       =   0xcf;       //SPI data register
  38          sbit SPISS      =   P1^3;       //SPI slave select, connect to other MCU's SS(P1.4) pin
  39          
  40          void InitUart();
  41          void InitSPI();
  42          void SendUart(BYTE dat);        //send data to PC
  43          BYTE RecvUart();                //receive data from PC
  44          BYTE SPISwap(BYTE dat);         //swap SPI data between master and slave
  45          
  46          ///////////////////////////////////////////////////////////
  47          
  48          void main()
  49          {
  50   1          InitUart();                 //initial UART
  51   1          InitSPI();                  //initial SPI
  52   1      
  53   1          while (1)
  54   1          {
  55   2              if (RI)
C51 COMPILER V8.02   SPIDEMO                                                               08/04/2010 09:13:31 PAGE 2   

  56   2              {
  57   3                  SPCTL = SPEN | MSTR; //set as master
  58   3                  SendUart(SPISwap(RecvUart()));
  59   3                  SPCTL = SPEN;               //reset as slave
  60   3              }
  61   2              if (SPSTAT & SPIF)
  62   2              {
  63   3                  SPSTAT = SPIF | WCOL; //clear SPI status
  64   3                  SPDAT = SPDAT;              //mov data from receive buffer to send buffer
  65   3              }
  66   2          }
  67   1      }
  68          
  69          ///////////////////////////////////////////////////////////
  70          
  71          void InitUart()
  72          {
  73   1          SCON = 0x5a;                //set UART mode as 8-bit variable baudrate
  74   1          TMOD = 0x20;                //timer1 as 8-bit auto reload mode
  75   1          AUXR = 0x40;                //timer1 work at 1T mode
  76   1          TH1 = TL1 = BAUD;           //115200 bps
  77   1          TR1 = 1;
  78   1      }
  79          
  80          ///////////////////////////////////////////////////////////
  81          
  82          void InitSPI()
  83          {
  84   1          SPDAT = 0;                  //initial SPI data
  85   1          SPSTAT = SPIF | WCOL;       //clear SPI status
  86   1          SPCTL = SPEN;               //slave mode
  87   1      }
  88          
  89          ///////////////////////////////////////////////////////////
  90          
  91          void SendUart(BYTE dat)
  92          {
  93   1          while (!TI);                //wait pre-data sent
  94   1          TI = 0;                     //clear TI flag
  95   1          SBUF = dat;                 //send current data
  96   1      }
  97          
  98          ///////////////////////////////////////////////////////////
  99          
 100          BYTE RecvUart()
 101          {
 102   1          while (!RI);                //wait receive complete
 103   1          RI = 0;                     //clear RI flag
 104   1          return SBUF;                //return receive data
 105   1      }
 106          
 107          ///////////////////////////////////////////////////////////
 108          
 109          BYTE SPISwap(BYTE dat)
 110          {
 111   1          SPISS = 0;                  //pull low slave SS
 112   1          SPDAT = dat;                //trigger SPI send
 113   1          while (!(SPSTAT & SPIF));   //wait send complete
 114   1          SPSTAT = SPIF | WCOL;       //clear SPI status
 115   1          SPISS = 1;                  //push high slave SS
 116   1          return SPDAT;               //return received SPI data
 117   1      }
C51 COMPILER V8.02   SPIDEMO                                                               08/04/2010 09:13:31 PAGE 3   



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =     98    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   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 + -