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

📄 c8051f126_driver.lst

📁 c8051120锁相环
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.05a   C8051F126_DRIVER                                                     03/27/2008 14:12:42 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE C8051F126_DRIVER
OBJECT MODULE PLACED IN c8051f126_driver.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE c8051f126_driver.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /************************************************************
   2            版权 (C), 2008, 苏州良仪电子研发部.
   3            文件名:c8051f126_driver.c
   4            作者:申瑞峰        版本:1.0         日期:2008/1/6
   5            描述:对c8051f的端口,晶振的初始化    
   6            功能函数列表:   
   7              1. SysclkInit()                //内部晶振的初始化(24.5MHZ)
   8                  2. ExternalCrystal(void)   //外部晶振的初始化
   9                  3. PortInit(void)                  //I/O口初始化
  10            历史记录:        
  11                <作者>        <时间>    <版本 >        <描述>
  12                申瑞峰        08/1/6     1.0        build this moudle  
  13          ***********************************************************/
  14          #include <c8051F120.h>
  15          #define uchar unsigned char
  16          #define uint unsigned int
  17          
  18          #define TIME (0.001)
  19          #define PLL_MUL (2)               // Sets PLL multiplier N
  20          #define PLL_DIV (1)               // Sets PLL divider M
  21          
  22          sfr16 RCAP3  = 0xca;                 // Timer3 capture/reload
  23          sfr16 TMR3  = 0xcc;                 // Timer3
  24          //-----------------------------------------------------------------------------
  25          // Global Constants
  26          //-----------------------------------------------------------------------------
  27          
  28          #define INTOSC       (24500000L)       // Internal oscillator frequency
  29          
  30          //-----------------------------------------------------------------------------
  31          // Macros used to calculate PLL and SYSCLK frequencies
  32          //-----------------------------------------------------------------------------
  33          
  34          #define PLL_DIV_CLK  (INTOSC/PLL_DIV)  // PLL divided clock input frequency
  35          #define PLL_OUT_CLK  (PLL_DIV_CLK*PLL_MUL)
  36                                                 // PLL output frequency
  37          #define SYSCLK       PLL_OUT_CLK       // System clock derived from PLL
  38          
  39          //-----------------------------------------------------------------------------
  40          // Macros used to calculate Loop Filter Bits
  41          //
  42          // Reference
  43          // C8051F121x-13x.pdf 
  44          // SFR Definition 14.8. PLL0FLT: PLL Filter
  45          //
  46          // Note that PLL Loop filter bits give a suitable frequency range for each 
  47          // setting. In some cases more than one setting may be acceptable for a 
  48          // particular frequency. This macro will select the best fit setting for
  49          // a particular frequency. 
  50          //
  51          //-----------------------------------------------------------------------------
  52          
  53          #if (PLL_DIV_CLK)<(5000000L)
                 #error "error: PLL divided clock frequency Too Low!"
              #elif (PLL_DIV_CLK)<(8000000L)
C51 COMPILER V8.05a   C8051F126_DRIVER                                                     03/27/2008 14:12:42 PAGE 2   

                 #define PLLFLT_LOOP 0x0F
              #elif (PLL_DIV_CLK)<(12500000L)
                 #define PLLFLT_LOOP 0x07
              #elif (PLL_DIV_CLK)<(19500000L)
                 #define PLLFLT_LOOP 0x03
              #elif (PLL_DIV_CLK)<(30000001L)
  62             #define PLLFLT_LOOP 0x01
  63          #else
                 #error "error: PLL divided clock frequency Too High!"
              #endif
  66          
  67          //-----------------------------------------------------------------------------
  68          // Macros used to calculate ICO  Bits
  69          //
  70          // Reference
  71          // C8051F121x-13x.pdf 
  72          // SFR Definition 14.8. PLL0FLT: PLL Filter
  73          //
  74          // Note that PLL ICO bits give a suitable frequency range for each setting. 
  75          // In some cases more than one setting may be acceptable for a particular 
  76          // frequency. This macro will select the best fit setting for a particular
  77          // frequency. 
  78          //
  79          //-----------------------------------------------------------------------------
  80          
  81          #if (PLL_OUT_CLK)<(25000000L)
                 #error "error: PLL output frequency Too Low!"
              #elif (PLL_OUT_CLK)<(42500000L)
                 #define PLLFLT_ICO 0x30
              #elif (PLL_OUT_CLK)<(52500000L)
  86             #define PLLFLT_ICO 0x20
  87          #elif (PLL_OUT_CLK)<(72500000L)
                 #define PLLFLT_ICO 0x10
              #elif (PLL_OUT_CLK)<(100000001L)
                 #define PLLFLT_ICO 0x00
              #else
                 #error "error: PLL output frequency Too High"
              #endif
  94          
  95          //-----------------------------------------------------------------------------
  96          // Macros used to calculate  Flash Read Time  Bits
  97          //
  98          // Reference
  99          // C8051F121x-13x.pdf 
 100          // SFR Definition 15.2. FLSCL: Flash Memory Control
 101          //-----------------------------------------------------------------------------
 102          
 103          #if (SYSCLK)<(25000001L)
                 #define FLSCL_FLRT 0x00
              #elif (SYSCLK)<(50000001L)
 106             #define FLSCL_FLRT 0x10
 107          #elif (SYSCLK)<(50000001L)
                 #define FLSCL_FLRT 0x20
              #elif (SYSCLK)<(100000001L)
                 #define FLSCL_FLRT 0x30
              #else
                 #error "error: SYSCLK Too High"
              #endif
 114          /*************************************************
 115            函数名:   SysclkInit()
 116            描述:     内部晶振初始化,内部时钟达到22.1184M
 117            扇出数:   无
C51 COMPILER V8.05a   C8051F126_DRIVER                                                     03/27/2008 14:12:42 PAGE 3   

 118            扇入数:   Main()
 119            输入参数: 无
 120            输出参数: 无
 121            返回值:   无
 122            其他:     无
 123          *************************************************/
 124          void SysclkInit(void)
 125          { 
 126   1          uchar SFRPAGE_SAVE = SFRPAGE;
 127   1              SFRPAGE = CONFIG_PAGE;
 128   1              OSCICN = 0X83;                                 //使能内部振荡电路,系统时钟为22.1184M不分频
 129   1              RSTSRC = 0X04;                          //写:时钟丢失检测器使能。如果检测到时钟丢失条件,则触发复位。
 130   1                                              //读:前面的复位来自时钟丢失检测器超时。 
 131   1              CLKSEL = 0X00;                                                             //选择内部时钟为系统时钟
 132   1              SFRPAGE = SFRPAGE_SAVE; 
 133   1      }
 134          
 135          /*************************************************
 136            函数名:   ExternalCrystal()
 137            描述:     外部晶振初始化,外部时钟频率达到24.5M
 138            扇出数:   无
 139            扇入数:   Main()
 140            输入参数: 无
 141            输出参数: 无
 142            返回值:   无
 143            其他:     无
 144          *************************************************/
 145          void ExternalCrystal(void)
 146          {
 147   1          uint i;
 148   1          uchar SFRPAGE_SAVE = SFRPAGE;
 149   1          SFRPAGE = CONFIG_PAGE;
 150   1           OSCXCN = 0x67;                          // start external oscillator with
 151   1                                           // 22.1184MHz crystal
 152   1          for (i = 13000; i > 0; i--);     // wait for osc to start
 153   1      
 154   1          while (!(OSCXCN & 0x80)) ;        // Wait for crystal osc. to settle
 155   1      
 156   1          //OSCICN = 0x88;                  // select external oscillator as SYSCLK
 157   1          //CLKSEL = 0x01;                    // source and enable missing clock
 158   1                                           // detector
 159   1              SFRPAGE = SFRPAGE_SAVE; 
 160   1      }
 161          
 162          /*************************************************
 163            函数名:   PortInit()
 164            描述:     I/O口初始化,全局弱上拉,使能交叉开关,打开外部中断0

⌨️ 快捷键说明

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