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

📄 spi.lst

📁 f330与mfrc522 通信 构成读卡器 上传源码和原理图。
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.23a  SPI                                                                   11/02/2007 08:49:05 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE SPI
OBJECT MODULE PLACED IN Spi.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe Spi.c DB OE

stmt level    source

   1          
   2          //*********************************************************
   3          // 项  目:  通用控制器-V1.0
   4          // 文件名:      Spi.c
   5          // 描  述:  SPI收发程序
   6          //*********************************************************
   7          
   8          //===============================================
   9          #include "main.h"    //全部头文件
  10          #include "spi.h"     //头文件
  11          #include "Uart0.h"     //头文件
  12          #include "Timer2.h"     //头文件
  13          //===============================================
  14          /***************************************************/
  15          UCHAR code TX_ADDRESS[TX_ADR_WIDTH]  = {0x54,0x53,0x57,0x58,0x01}; //定义‘TSWX1' TX address
  16          UCHAR xdata Ptr6_reg[40];
  17          UCHAR xdata rx_buf[TX_PLOAD_WIDTH];
  18          UCHAR xdata tx_buf[TX_PLOAD_WIDTH];
  19          UCHAR flag;
  20          UCHAR Ptr_Mode;                                   
  21          //***********************************************
  22          // 变量定义
  23          /**************************************************/
  24          UCHAR   bdata sta;
  25          sbit    RX_DR   =sta^6;
  26          sbit    TX_DS   =sta^5;
  27          sbit    MAX_RT  =sta^4;
  28          
  29          extern   UCHAR  data  Sio_Lth;
  30          extern  UCHAR  idata  ComTBufHead;                                       
  31          extern  UCHAR  xdata  ComTBuf[Com0TBuf_len];    
  32          //***********************************************
  33          // 函数开始
  34          //***********************************************
  35          //初始化SPI
  36          //-----------------------------------------------
  37          void Init_Spi(void)
  38          
  39          {
  40   1                          //BSY,MEN,CKPH,CKPL,SLV,NSS,SRMT,RXBMT
  41   1         SPI0CFG = 0x40;  // 0  1(主)0   0    0   0    0    0
  42   1                          //SPIF,WCOL,MODF,ROVER,NSS1,NSS0,TBMT,SPIEN
  43   1         SPI0CN  = 0x03;  //  0    0    0    0    0     0    1    1
  44   1      
  45   1         SPI0CKR = SYSCLK/2/1000000-1;  //1MHz SPI时钟
  46   1      }
  47          //***********************************************
  48          //无线模块初始化:-,M_RX,M_TX,M_RT,ECRC,CRC8,PWRUP,REV
  49          //                0   0    0   0     1    0   1    1(收)
  50          //收、发事件IRQ,CRC使能,上电,接收模式
  51          //***********************************************
  52          void Init_Ptr6(void)   //
  53          
  54               {
  55   1                 RX_Mode();
C51 COMPILER V6.23a  SPI                                                                   11/02/2007 08:49:05 PAGE 2   

  56   1             Ptr_Mode = 0x0f;
  57   1                 //Tst_Ptr6();      //
  58   1               }
  59          //***********************************************
  60          //无线模块中断:INT0 中断
  61          //***********************************************
  62          void PTR6_INT(void) interrupt 0 //INT0 中断
  63          
  64              {
  65   1                 UCHAR kk,i;
  66   1      
  67   1                 kk=0;
  68   1                 sta=SPI_Read(STATUS);        // read STATUS'
  69   1      
  70   1                if(RX_DR)                             //
  71   1      
  72   1                  {  //是接收中断从接收FIFO读接收包,置标志。
  73   2                        SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// 
  74   2                        flag=1;
  75   2                        //
  76   2                        kk = rx_buf[1];
  77   2                        for(i=0;i<kk;i++)   //TX_LENTH=32
  78   2                ComTBuf[i] = rx_buf[i];  //清SPI发送缓存
  79   2                        ComTBufHead=1;
  80   2                    Sio_Lth = ComTBuf[1];  
  81   2                    SBUF0   = ComTBuf[0];      //启动串口发送 
  82   2              }
  83   1      
  84   1                if(MAX_RT)
  85   1                  {         //如果重发次数溢出,清发送FIFO
  86   2                        SPI_RW_Reg(FLUSH_TX,0);  
  87   2                  }
  88   1             
  89   1              // 清RX_DR/TX_DS/MAX_RT中断标志
  90   1                    SPI_RW_Reg(WRITE_REG+STATUS,sta);
  91   1                    kk= sta; 
  92   1      }
  93          
  94          /**************************************************
  95          功能描述: 写一字节到 nRF24L01的同时返回写期间
  96          从nRF24L01读出的字节。
  97          /**************************************************/
  98          UCHAR SPI_RW(UCHAR byte)
  99          {
 100   1          SPI0DAT = byte;       
 101   1              while (SPIF == 0);        //等待命令发送结束
 102   1      
 103   1          byte  = SPI0DAT;      //读无效输入
 104   1              SPIF  = 0;
 105   1          return(byte);                         // return read byte
 106   1      }
 107          //***********************************************
 108          //读PTR6000 寄存器:读reg指定的寄存器,值在reg_val
 109          //***********************************************
 110          UCHAR SPI_Read(UCHAR reg)
 111          {
 112   1              UCHAR reg_val;
 113   1      
 114   1              CSN = 0;                // 使能
 115   1              SPI_RW(reg);            // 读命令
 116   1              reg_val = SPI_RW(0);    // 读数据
 117   1              CSN = 1;                // 禁止
C51 COMPILER V6.23a  SPI                                                                   11/02/2007 08:49:05 PAGE 3   

 118   1      
 119   1              return(reg_val);        // return register value
 120   1      }
 121          //***********************************************
 122          //写value到reg寄存器
 123          //***********************************************
 124          UCHAR SPI_RW_Reg(UCHAR reg, UCHAR value)
 125          {
 126   1              UCHAR status;
 127   1      
 128   1              CSN = 0;                   // CSN low, init SPI transaction
 129   1              status = SPI_RW(reg);      // select register
 130   1              SPI_RW(value);             // ..and write value to it..
 131   1              CSN = 1;                   // CSN high again
 132   1      
 133   1              return(status);            // return nRF24L01 status byte
 134   1      }
 135          //***********************************************
 136          //读reg指定位置bytes个数据字节到*pBuf
 137          /**************************************************/
 138          
 139          UCHAR SPI_Read_Buf(UCHAR reg, UCHAR *pBuf, UCHAR bytes)
 140          {
 141   1              UCHAR status,i;
 142   1      
 143   1              CSN = 0;                // Set CSN low, init SPI tranaction
 144   1              status = SPI_RW(reg);   // Select register to write to and read status byte
 145   1      

⌨️ 快捷键说明

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