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

📄 spidemo.lst

📁 STC-MCU-SPI演示(源代码)
💻 LST
字号:
C51 COMPILER V8.02   SPIDEMO                                                               08/04/2010 09:12:17 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(1 master and 1 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 MASTER                  //define:master undefine:slave
  15          #define FOSC        18432000L
  16          #define BAUD        (256 - FOSC / 32 / 115200)
  17          
  18          typedef unsigned char BYTE;
  19          typedef unsigned int WORD;
  20          typedef unsigned long DWORD;
  21          
  22          sfr  AUXR       =   0x8e;       //Auxiliary register
  23          
  24          sfr SPSTAT      =   0xcd;       //SPI status register
  25          #define SPIF        0x80        //SPSTAT.7
  26          #define WCOL        0x40        //SPSTAT.6
  27          sfr SPCTL       =   0xce;       //SPI control register
  28          #define SSIG        0x80        //SPCTL.7
  29          #define SPEN        0x40        //SPCTL.6
  30          #define DORD        0x20        //SPCTL.5
  31          #define MSTR        0x10        //SPCTL.4
  32          #define CPOL        0x08        //SPCTL.3
  33          #define CPHA        0x04        //SPCTL.2
  34          #define SPDHH       0x00        //CPU_CLK/4
  35          #define SPDH        0x01        //CPU_CLK/16
  36          #define SPDL        0x02        //CPU_CLK/64
  37          #define SPDLL       0x03        //CPU_CLK/128
  38          sfr SPDAT       =   0xcf;       //SPI data register
  39          sbit SPISS      =   P1^3;       //SPI slave select, connect to slave' SS(P1.4) pin
  40          
  41          void InitUart();
  42          void InitSPI();
  43          void SendUart(BYTE dat);        //send data to PC
  44          BYTE RecvUart();                //receive data from PC
  45          BYTE SPISwap(BYTE dat);         //swap SPI data between master and slave
  46          
  47          ///////////////////////////////////////////////////////////
  48          
  49          void main()
  50          {
  51   1          InitUart();                 //initial UART
  52   1          InitSPI();                  //initial SPI
  53   1      
  54   1          while (1)
  55   1          {
C51 COMPILER V8.02   SPIDEMO                                                               08/04/2010 09:12:17 PAGE 2   

  56   2      #ifdef MASTER                   //for master (receive UART data from PC and send it to slave, in the meant
             -ime
                                              //            receive SPI data from slave and send it to PC)
                      SendUart(SPISwap(RecvUart()));
              #else                           //for salve (receive SPI data from master and
  60   2              ACC = SPISwap(ACC);     //           send previous SPI data to master)
  61   2      #endif
  62   2          }
  63   1      }
  64          
  65          ///////////////////////////////////////////////////////////
  66          
  67          void InitUart()
  68          {
  69   1          SCON = 0x5a;                //set UART mode as 8-bit variable baudrate
  70   1          TMOD = 0x20;                //timer1 as 8-bit auto reload mode
  71   1          AUXR = 0x40;                //timer1 work at 1T mode
  72   1          TH1 = TL1 = BAUD;           //115200 bps
  73   1          TR1 = 1;
  74   1      }
  75          
  76          ///////////////////////////////////////////////////////////
  77          
  78          void InitSPI()
  79          {
  80   1          SPDAT = 0;                  //initial SPI data
  81   1          SPSTAT = SPIF | WCOL;       //clear SPI status
  82   1      #ifdef MASTER
                  SPCTL = SPEN | MSTR;        //master mode
              #else
  85   1          SPCTL = SPEN;               //slave mode
  86   1      #endif
  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      #ifdef MASTER
                  SPISS = 0;                  //pull low slave SS
              #endif
 114   1          SPDAT = dat;                //trigger SPI send
 115   1          while (!(SPSTAT & SPIF));   //wait send complete
 116   1          SPSTAT = SPIF | WCOL;       //clear SPI status
C51 COMPILER V8.02   SPIDEMO                                                               08/04/2010 09:12:17 PAGE 3   

 117   1      #ifdef MASTER
                  SPISS = 1;                  //push high slave SS
              #endif
 120   1          return SPDAT;               //return received SPI data
 121   1      }


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