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

📄 串口通信.lst

📁 SPI接口通信源程序
💻 LST
字号:
C51 COMPILER V7.07   確口蚠信                                                              09/25/2006 13:52:28 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE 確口蚠信
OBJECT MODULE PLACED IN 串口通信.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 串口通信.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //通过SPI实现两机通讯, //
   2          //采用中断方式实现双全工通讯。 //
   3          //MISO----MISO //
   4          //MOSI----MOSI //
   5          //SCK ----SCK //
   6          ///SS ----/SS //
   7          //将要发送的数据加载到发送缓冲区的函数fill_tx_buffer //
   8          //和从接收缓冲区读出数据的函数read_rx_buffer未给出, //
   9          //根据各自需求请自己完成。 //
  10          #define SPI_RX_BUFFER_SIZE 10 
  11          #define SPI_RX_BUFFER_MASK ( SPI_RX_BUFFER_SIZE - 1 ) 
  12          #define SPI_TX_BUFFER_SIZE 10 
  13          #define SPI_TX_BUFFER_MASK ( SPI_TX_BUFFER_SIZE - 1 ) 
  14          #define SET_SPI_MODE PORTB.4 
  15          #define SPI_MODE PINB.4 
  16          
  17          static unsigned char SPI_RxBuf[SPI_RX_BUFFER_SIZE]; 
  18          static volatile unsigned char SPI_RxHead; 
  19          static unsigned char SPI_TxBuf[SPI_TX_BUFFER_SIZE]; 
  20          static volatile unsigned char SPI_TxHead; 
  21          //****************************************** 
  22          // SPI 中断服务程序 
  23          //****************************************** 
  24           void spi_isr(void) 
  25          { 
  26   1      unsigned char data; 
*** ERROR C141 IN LINE 26 OF 串口通信.C: syntax error near ';'
  27   1      if(spi_m==0)                                     //如果spi_m为0,表明是接收状态 
*** ERROR C202 IN LINE 27 OF 串口通信.C: 'spi_m': undefined identifier
  28   1        { 
  29   2         data = SPDR;                                  //读入接受到的数据  
*** ERROR C141 IN LINE 29 OF 串口通信.C: syntax error near '='
*** ERROR C202 IN LINE 29 OF 串口通信.C: 'SPDR': undefined identifier
  30   2            SPI_RxBuf[SPI_RxHead-1] = data;            //将接收到的数据存入接收缓存区 
*** ERROR C141 IN LINE 30 OF 串口通信.C: syntax error near 'data'
  31   2            if ( SPI_RxHead  == SPI_RX_BUFFER_MASK )   //如果是接收帧的最后一个数据   
  32   2              { 
  33   3               SPI_RxHead = 0;                         //已接收数据还原 
  34   3               MSTR=1;                                 //接收完成,将SPI设回主方式????? 
*** ERROR C202 IN LINE 34 OF 串口通信.C: 'MSTR': undefined identifier
  35   3               spi_trans_com=1;                        //置接收完成标志 
*** ERROR C202 IN LINE 35 OF 串口通信.C: 'spi_trans_com': undefined identifier
  36   3              } 
  37   2            else 
  38   2              {    
  39   3               SPI_RxHead++;                           //已接收数据计数器加1 
  40   3              } 
  41   2          
  42   2        } 
  43   1      else                                             //如果spi_m为1,表明是发送状态 
  44   1         { 
  45   2                                              
  46   2             if ( SPI_TxHead <= SPI_TX_BUFFER_MASK)    //如果要发送的数据还未全部发完 
  47   2              {    
  48   3               SPDR = SPI_TxBuf[SPI_TxHead];           //从发送缓存区取数发送 
C51 COMPILER V7.07   確口蚠信                                                              09/25/2006 13:52:28 PAGE 2   

*** ERROR C202 IN LINE 48 OF 串口通信.C: 'SPDR': undefined identifier
  49   3               SPI_TxHead++;                           //已发送数据计数器加1 
  50   3              } 
  51   2             else                                      //如果要发送的数据已全部发完 
  52   2               { 
  53   3                 SPI_TxHead=0;                         //已发送数据计数器还原 
  54   3                 DDRB.4=0; 
*** ERROR C202 IN LINE 54 OF 串口通信.C: 'DDRB': undefined identifier
*** ERROR C141 IN LINE 54 OF 串口通信.C: syntax error near '.4'
  55   3                 SET_SPI_MODE=1;                       //释放总线,以便接收方进入主发送。 
*** ERROR C202 IN LINE 55 OF 串口通信.C: 'PORTB': undefined identifier
*** ERROR C141 IN LINE 55 OF 串口通信.C: syntax error near '.4'
  56   3                 spi_m=0;                               
*** ERROR C202 IN LINE 56 OF 串口通信.C: 'spi_m': undefined identifier
  57   3                 spi_sending=0;                        //清空发送中标记 
*** ERROR C202 IN LINE 57 OF 串口通信.C: 'spi_sending': undefined identifier
  58   3               } 
  59   2           
  60   2         } 
  61   1      
  62   1      } 
  63          
  64          //****************************************** 
  65          // SPI 初始化 
  66          //****************************************** 
  67          void InitSPI(void) 
  68          { 
  69   1      
  70   1      SPCR=0x52; 
*** ERROR C202 IN LINE 70 OF 串口通信.C: 'SPCR': undefined identifier
  71   1      SPI_RxHead = 0; 
  72   1      SPI_TxHead = 0; 
  73   1      
  74   1      } 
  75          
  76          //****************************************** 
  77          //发送数据 
  78          //****************************************** 
  79          void spi_send(void) 
  80          { 
  81   1      if(spi_sending==0)      //发送中标记为0,表明spi发送空闲 
*** ERROR C202 IN LINE 81 OF 串口通信.C: 'spi_sending': undefined identifier
  82   1         { 
  83   2           
  84   2          fill_tx_buffer();   //调用fill_tx_buffer函数,将要发送的数据加载到发送缓冲区 
  85   2          while(PINB.4==0)    //如果PINB.4为低,表明总线被接受方占用,等待直至接受方发送完成。 
  86   2           {;} 
  87   2           
  88   2          InitSPI();          //初始化spi为主方式 
  89   2          DDRB.4=1;  
  90   2          SET_SPI_MODE=0;     //将PORTB.4拉低,强迫接收方进入从接收方式 
  91   2          spi_m=1;            //置spi_m标志表明为发送状态 
  92   2          delay_us(10); 
  93   2          spi_sending=1;      //置spi_sending标志表明发送进行中 
  94   2          SPDR=0xFF;          //开始发送,接收方接收到的第一个数据为0xFF应忽略 
  95   2          SPIE=1;             //开SPI中断, 
  96   2          SPI_TxHead = 0;     //已发送数据计数器清0 
  97   2         } 
  98   1      } 
  99          
 100          void main(void) 
 101          { 
C51 COMPILER V7.07   確口蚠信                                                              09/25/2006 13:52:28 PAGE 3   

 102   1      
 103   1      ... 
 104   1      while(1) 
 105   1        { 
 106   2         ... 
 107   2          
 108   2         if(spi_trans_com==1) //如果接收完成标志为1,表明有所数据已接收 
 109   2           { 
 110   3            read_rx_buffer(); //调用read_rx_buffer函数,将接收到的数据从接收缓冲区读出 
 111   3            spi_trans_com=0;  //读完清除接收完成标志 
 112   3           } 
 113   2         ... 
 114   2      
 115   2        }  
 116   1      
 117   1      } 

C51 COMPILATION COMPLETE.  0 WARNING(S),  16 ERROR(S)

⌨️ 快捷键说明

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