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

📄 main.lst

📁 针对Silicon labs的C8051F020 mcu 的全双工SPI调试主器件部分程序,对其接收到的从器件(也是F020mcu)的数据包会从串口1中发送至PC,从串口助手中可以看到.开发环境为Ke
💻 LST
字号:
C51 COMPILER V7.50   MAIN                                                                  11/16/2007 15:28:25 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 SPI_rx_buff[SIZE]; 
   8          unsigned char SPI_tx_buff[SIZE]; 
   9          extern unsigned char ucRecData, flag = 0x00;
  10          //-----------------------------------------------------------------------------
  11          // MAIN Routine
  12          //-----------------------------------------------------------------------------
  13          
  14          void main (void) 
  15          {
  16   1              unsigned int i;
  17   1      
  18   1              //-----------------
  19   1              // 初始化
  20   1          WDTCN = 0xde;
  21   1          WDTCN = 0xad;                                                               // 关看门狗
  22   1              EA = 0;
  23   1      
  24   1              Oscillator_Init();
  25   1          Port_IO_Init();
  26   1          SPI0_Init();
  27   1          Timer0_Init(); 
  28   1              UART1_Init ();
  29   1              tx_buffer_Init();
  30   1      
  31   1              EA = 1;
  32   1      
  33   1          while (1)
  34   1              {
  35   2      //              if (flag == 0x01)
  36   2      //              {
  37   2                              for (i=0; i<SIZE; i++)
  38   2                                      SendSPIData(SPI_tx_buff[i]);
  39   2      //              }
  40   2      //              else
  41   2      //              {
  42   2      //                      SendSPIData(SPI_tx_buff[0]);                    
  43   2      //              }
  44   2                      Delay1ms(1000);
  45   2              }
  46   1      
  47   1      }
  48          
  49          
  50          void SendSPIData(unsigned char SPIData)
  51          {
  52   1              P27 = 0;
  53   1              Delay1us (50);    
  54   1              SPI0DAT = SPIData;
  55   1              while (SPIF == 0);
C51 COMPILER V7.50   MAIN                                                                  11/16/2007 15:28:25 PAGE 2   

  56   1              if (SPIF)
  57   1              {
  58   2                      SPIF = 0;
  59   2              }
  60   1              Delay1us (50);          
  61   1              P27 = 1;
  62   1              Delay1ms(2);
  63   1              SBUF1 = SPI0DAT;
  64   1      } 
  65          
  66          void tx_buffer_Init (void)
  67          {
  68   1              unsigned int i;
  69   1              SPI_tx_buff[0] = 0x40;
  70   1      
  71   1              for (i=1; i<SIZE; i++)
  72   1              {
  73   2                      SPI_tx_buff[i] = i;
  74   2              }
  75   1      
  76   1      }
  77          
  78          // This routine initializes the system clock to use an 22.1184MHz crystal as its clock source.
  79          void Oscillator_Init (void)
  80          {
  81   1              int i;                              // delay counter
  82   1          OSCXCN = 0x67;                      // start external oscillator with 22.1184MHz crystal
  83   1              for (i=0; i < 3000; i++);           // XTLVLD blanking interval (>1ms)
  84   1              while ((OSCXCN & 0x80) == 0);       // Wait for crystal osc. to settle
  85   1      
  86   1              OSCICN = 0x88;                      // select external oscillator as SYSCLK source
  87   1                                                  // and enable missing clock detector
  88   1      }
  89          
  90          
  91          // 配置数据交叉开关和通用I/O口
  92          void Port_IO_Init(void)
  93          {
  94   1          
  95   1          XBR0      = 0x07;               // 允许UART0 在P0.0 (TX0)P0.1 (RX1)
  96   1                                          // 允许SPI在P0.2 (SCK),P0.3 (MIMO),P0.4 (MOSI)P0.5 (NSS)              
             -                                                     
  97   1          XBR1      = 0x14;               // 允许/INT0在P1.2/INT1在P1.3    
  98   1          XBR2      = 0x44;               // 交叉开关使能
  99   1              
 100   1              P2MDOUT   = 0xFF;
 101   1              P0MDOUT  |= 0x35;               // 使能 TX0, MOSI, SCK, NSS为推挽输出 
 102   1              P1MDOUT  = 0x01;                            // 使能 TX1为推挽方式
 103   1              P74OUT    = 0xC0;               // 允许P7为推挽方式
 104   1      }
 105          
 106          
 107          // SPIO初始化
 108          void SPI0_Init (void)
 109          {
 110   1          SPI0CFG =   0x07;                   // 空闲时为低电平,在第一个上升沿采样数据;8-bit数据传输
 111   1      //    SPI0CFG |=  0xC0;                   // 空闲时为高电平,在第二个上升沿采样数据
 112   1          SPI0CN  =   0x03;                   // 主模式; 使能SPI; 清中断标志
 113   1          SPI0CKR =   SYSCLK/2/SPICLK-1;      // SPI时钟 <= 8MHz (limited by EEPROM spec.)
 114   1          EIE1    =   0x01;                                   // 开SPI中断  
 115   1              EIP1    =       0x01;                                   // SPI中断设高优先级            
 116   1      
C51 COMPILER V7.50   MAIN                                                                  11/16/2007 15:28:25 PAGE 3   

 117   1      }
 118          // Timer0初始化
 119          void Timer0_Init (void)
 120          {
 121   1      
 122   1          CKCON   |= 0x78;                    // 使用系统时钟SYSCLK为时钟
 123   1          TMOD    |= 0x01;                    // 16Bit Timer
 124   1          TR0     = 0;                        // STOP Timer0
 125   1          TH0     = (0x00-SYSCLK/1000) >> 8;  // set Timer0 to overflow in 1ms
 126   1          TL0     = (0x00-SYSCLK/1000);
 127   1          TR0     = 1;                        // START Timer0
 128   1          ET0     = 1;                        // 开定时器0中断 
 129   1      
 130   1      }
 131          
 132          // UART1初始化
 133          // 设置UART1, 用定时器1为波特率发生器
 134          // 波特率为9600,用于PC通信
 135          void UART1_Init (void)
 136          {
 137   1          CKCON |= 0x10;                  // 选用SYSCLK作为分频时钟      
 138   1          TMOD  |= 0x20;                  // T1自动重载方式
 139   1          PCON  |= 0x10;                  // SMOD1 = 1,波特率加倍
 140   1          
 141   1          SCON1 = 0x50;                   // SCON1: 模式1, 8位UART, 允许RX
 142   1          TH1   = -(SYSCLK/BAUDRATE1/16); // 按波特率设置定时器1重装值
 143   1          TL1   = -(SYSCLK/BAUDRATE1/16);
 144   1                         
 145   1          TR1   = 1;                      // 起动定时器1
 146   1      //      EIP2 |= 0x40;                                   // 设置UART1为高优先级
 147   1          EIE2 |= 0x40;                   // 允许UART1中断
 148   1      }
 149          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    245    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     65       3
   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 + -