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

📄 main.lst

📁 针对Silicon labs的C8051F020 mcu 的全双工SPI(4线)调试从器件部分程序,对其接收到的主器件的数据包会从串口1中发送至PC,从串口助手中可以看到.开发环境为KeilC,需要U
💻 LST
字号:
C51 COMPILER V7.50   MAIN                                                                  11/16/2007 15:12:19 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include        "c8051F020.h"
   3          #include        "main.h"
   4          #include    "intrins.h"
   5          
   6          
   7          unsigned char StaFlag;
   8          unsigned char SPI_rx_buff[SIZE];
   9          unsigned char SPI_tx_buff[SIZE];
  10          //-----------------------------------------------------------------------------
  11          // MAIN Routine
  12          //-----------------------------------------------------------------------------
  13          
  14          void main (void) 
  15          {
  16   1              
  17   1              unsigned char i = 0;    
  18   1      
  19   1              //-----------------
  20   1              // 初始化
  21   1          WDTCN = 0xde;
  22   1          WDTCN = 0xad;                                                               // 关看门狗
  23   1              EA = 0;
  24   1      
  25   1              Oscillator_Init();
  26   1          Port_IO_Init();
  27   1          SPI0_Init();
  28   1          Timer0_Init(); 
  29   1              UART1_Init ();
  30   1              tx_buffer_Init ();
  31   1      
  32   1              EA = 1;
  33   1      
  34   1          while (1)
  35   1              {
  36   2                      if (SPIF)
  37   2                      {                       
  38   3                              SPIF = 0;
  39   3                              if (SPI0DAT == 40)
  40   3                              {
  41   4                                      StaFlag = 1;    // 开始通信
  42   4                              }
  43   3      
  44   3                              if (StaFlag)
  45   3                              {
  46   4                                      SPI_rx_buff[i] = SPI0DAT;
  47   4                                      SBUF1 = SPI0DAT;
  48   4                                      i++;
  49   4      
  50   4                                      if (i == SIZE)
  51   4                                      {
  52   5                                              StaFlag = 0;    // 结束通信
  53   5                                              i = 0;
  54   5                                      }
  55   4                              }
C51 COMPILER V7.50   MAIN                                                                  11/16/2007 15:12:19 PAGE 2   

  56   3                              else
  57   3                              {
  58   4                                      i = 0;
  59   4                              }
  60   3                      }
  61   2                      
  62   2                      if (!SLVSEL)
  63   2                      {
  64   3                              SPI0DAT = SPI_tx_buff[i];
  65   3                              P7 ^= 0x01;
  66   3                      }
  67   2      
  68   2                      if (WCOL)
  69   2                      {
  70   3                              WCOL = 0;
  71   3                      }
  72   2              }
  73   1      }
  74          
  75          void tx_buffer_Init (void)
  76          {
  77   1              unsigned int i;
  78   1              SPI_tx_buff[0] = 0x01;
  79   1      
  80   1              for (i=1; i<SIZE; i++)
  81   1              {
  82   2                      SPI_tx_buff[i] = SPI_tx_buff[i-1] + 0x01;
  83   2              }
  84   1      
  85   1      }
  86          
  87          
  88          // This routine initializes the system clock to use an 22.1184MHz crystal as its clock source.
  89          void Oscillator_Init (void)
  90          {
  91   1              int i;                              // delay counter
  92   1          OSCXCN = 0x67;                      // start external oscillator with 22.1184MHz crystal
  93   1              for (i=0; i < 3000; i++);           // XTLVLD blanking interval (>1ms)
  94   1              while ((OSCXCN & 0x80) == 0);       // Wait for crystal osc. to settle
  95   1      
  96   1              OSCICN = 0x88;                      // select external oscillator as SYSCLK source
  97   1                                                  // and enable missing clock detector
  98   1      }
  99          
 100          
 101          // 配置数据交叉开关和通用I/O口
 102          void Port_IO_Init(void)
 103          {
 104   1          
 105   1          XBR0     = 0x07;               // XBR0.2允许UART0 在P0.0 (TX0)P0.1 (RX1)
 106   1                                          // XBR0.1允许SPI在P0.2 (SCK),P0.3 (MISO),P0.4 (MOSI)P0.5 (NSS)  
 107   1                                          // XBR0.0允许I2C在P0.6 (SDA),P0.7 (SCL)                             
 108   1          XBR1     = 0x14;               // 允许/INT0在P1.2/INT1在P1.3    
 109   1          XBR2     = 0x44;               // 交叉开关使能 允许UART0 在P1.0 (TX0)P1.1 (RX1)
 110   1              
 111   1              P0MDOUT  = 0xC9;               // 使能 TX0, MISO为推挽输出 
 112   1              P1MDOUT  = 0x01;                           // 使能 TX1为推挽方式
 113   1              P74OUT   = 0xC0;               // 允许P7为推挽方式
 114   1      
 115   1      //      P0       |= 0x34;               // 允许SPI的三个管脚为数字输入
 116   1      }
 117          
C51 COMPILER V7.50   MAIN                                                                  11/16/2007 15:12:19 PAGE 3   

 118          
 119          // SPIO初始化
 120          void SPI0_Init (void)
 121          {
 122   1          SPI0CFG =   0x07;                   // 空闲时为低电平,在第一个上升沿采样数据;8-bit数据传输
 123   1      //    SPI0CFG |=  0xC0;                   // 空闲时为高电平,在第二个上升沿采样数据
 124   1          SPI0CN  =   0x01;                   // 主模式; 使能SPI; 清中断标志
 125   1          SPI0CKR =   SYSCLK/2/SPICLK-1;      // SPI时钟 <= 8MHz (limited by EEPROM spec.)
 126   1          EIE1    =   0x01;                                   // 开SPI中断  
 127   1              EIP1    =       0x01;                                   // SPI中断设高优先级            
 128   1      
 129   1      }
 130          // Timer0初始化
 131          void Timer0_Init (void)
 132          {
 133   1      
 134   1          CKCON   |= 0x78;                    // 使用系统时钟SYSCLK为时钟
 135   1          TMOD    |= 0x01;                    // 16Bit Timer
 136   1          TR0     = 0;                        // STOP Timer0
 137   1          TH0     = (0x00-SYSCLK/1000) >> 8;  // set Timer0 to overflow in 1ms
 138   1          TL0     = (0x00-SYSCLK/1000);
 139   1          TR0     = 1;                        // START Timer0
 140   1          ET0     = 1;                        // 开定时器0中断 
 141   1      
 142   1      }
 143          
 144          // UART1初始化
 145          // 设置UART1, 用定时器1为波特率发生器
 146          // 波特率为9600,用于PC通信
 147          void UART1_Init (void)
 148          {
 149   1          CKCON |= 0x10;                  // 选用SYSCLK作为分频时钟      
 150   1          TMOD  |= 0x20;                  // T1自动重载方式
 151   1          PCON  |= 0x10;                  // SMOD1 = 1,波特率加倍
 152   1          
 153   1          SCON1 = 0x50;                   // SCON1: 模式1, 8位UART, 允许RX
 154   1          TH1   = -(SYSCLK/BAUDRATE1/16); // 按波特率设置定时器1重装值
 155   1          TL1   = -(SYSCLK/BAUDRATE1/16);
 156   1                         
 157   1          TR1   = 1;                      // 起动定时器1
 158   1      //      EIP2 |= 0x40;                                   // 设置UART1为高优先级
 159   1          EIE2 |= 0x40;                   // 允许UART1中断
 160   1      }
 161          
*** ERROR C249 IN LINE 161 OF MAIN.C: 'DATA': SEGMENT TOO LARGE

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

⌨️ 快捷键说明

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