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

📄 pcalvd.lst

📁 基于KEIL51的一款高性能的数字功放的完整代码
💻 LST
字号:
C51 COMPILER V8.05a   PCALVD                                                               10/15/2006 22:08:33 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE PCALVD
OBJECT MODULE PLACED IN pcalvd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE pcalvd.c OMF2 BROWSE DEBUG

line level    source

   1           
   2          #include "config.h"
   3          
   4          
   5          #define IN_PCALVD
   6          
   7          #if  PCALVD_USING
   8          
   9          sbit   EPCA = IE^6;      // PCA中断屏蔽位
  10          sfr    CH   = 0xf9;      // PCA计数器高8位
  11          sfr    CL   = 0xe9;      // PCA计数器低8位
  12          
  13          sfr    CCON = 0xd8;        // PCA控制寄存器
  14          sbit   CCF0 = CCON^0;  // PCA模块0中断标志
  15          sbit   CCF1 = CCON^1;  // PCA模块1中断标志
  16          sbit   CR   = CCON^6;  // PCA计数器容许标志
  17          sbit   CF   = CCON^7;  // PCA计数器溢出标志 
  18          
  19          sfr    CMOD =0xd9;        // PCA工作模式寄存器
  20          //sbit   CIDL = CMOD^7;
  21          //sbit   CPS1 = CMOD^2;
  22          //sbit   CPS0 = CMOD^1;
  23          //sbit   ECF  = CMOD^0;
  24          
  25          sfr    CCAP0H = 0xfa;  // PCA捕捉模块比较寄存器
  26          sfr    CCAP1H = 0xfb;
  27          sfr    CCAP0L = 0xea;
  28          sfr    CCAP1L = 0xeb;
  29          //------------------------
  30          sfr    PCA_PWM0 = 0xf2;   // PCA模块pwm寄存器
  31          sfr    PCA_PWM1 = 0xf3;
  32          
  33          sfr    CCAPM0  = 0xda;  // PCA 模块0的工作模式寄存器 
  34          sfr    CCAPM1  = 0xdb;  // PCA 模块1的工作模式寄存器 
  35          
  36          unsigned char idata  timer_100ms=0x00;  //秒钟的定时标志
  37          //unsigned char idata  timer_ff_fb_flag=0x00;  //快进快退的标志,当快进快退的的按键松开后一段时间要切换到p
             -lay
  38          
  39          //  本系统外部晶振为22.1184M ,时钟源实际为22.1184M/12=1843200
  40          //  则: TIMER_100uS= 1843200 * 0.0001 = 184  = 0X00B8
  41          //       TIMER_500uS= 1843200 * 0.0005 = 921  = 0X0399
  42          //               TIMER_1mS=   1843200 * 0.001  = 1843 = 0X0733
  43          
  44          void pcalvd_initialize(void) 
  45          {
  46   1       // 开放低压中断
  47   1        AUXR |= 0X00;   //开放低压中断   BIT2 ELVDI -> 0:禁止低压中断  1:开放低压中断
  48   1        
  49   1      // 将pca设定为定时器
  50   1      //C P S 1 C P S 0 选择P C A 时钟源输入
  51   1      //0 0      0 , 内部时钟, F o s c / 1 2
  52   1      //0 1      1 , 内部时钟, F o s c / 2
  53   1      //1 0      2 , 定时器0 溢出, 由于定时器0 可以工作在1 T 方式, 所以可以
  54   1      //              达到计一个时钟就溢出, 频率反而是最高的, 可达到F o s c
C51 COMPILER V8.05a   PCALVD                                                               10/15/2006 22:08:33 PAGE 2   

  55   1      //1 1      3 , E C I / P 3 . 4 脚的外部时钟输入( 最大速率= F o s c / 2 )
  56   1        CMOD = 0x01;    // 选择时钟为内部时钟的1/12,开启定时
  57   1        CCAPM0 = 0x48;  // 16bit软件定时,容许中断
  58   1       // CCAPM1 = 0x48;  // 16bit软件定时,容许中断
  59   1        CH     = 0xF8;  // 定时时间
  60   1        CL     = 0xCC;  //
  61   1      //  CCAP0H = 0xFC;
  62   1      //  CCAP0L = 0x66; 
  63   1      //  CCAP1H = 0xFC;
  64   1      //  CCAP1L = 0x66; 
  65   1      
  66   1        CCON   = 0x40;  // 清除中断标志,启动PCA模式
  67   1        EPCA   = 0x01;  // 开放PCA中断
  68   1      
  69   1      
  70   1      }
  71          
  72          
  73          // PCA/LVD  中断向量为 033H 中断查询次序 6
  74          // 中断优先级设置 PPCA_LVDH,PPCA_LVD
  75          // 中断请求标志: CF + CCF0 + CCF1 +LVDF
  76          bit timersecond_flag=0x00;  // 秒的标志
  77          bit timer500ms_flag=0x00;   // 500ms的标志
  78          #define  TIMER_SECOND_COUNT  1000
  79          #define  TIMER_500MS_COUNT   400   //主要是为了错开ESS的500MS的发送
  80          
  81          void pcalvd_isr(void)  interrupt 6
  82          { unsigned char idata i=0x00;
  83   1        static unsigned int  idata timer_count=0x00;   //秒的计算
  84   1      
  85   1        if(CF==0x01)
  86   1          {// ---------利用定时器来发送通讯波形------------------------------------------------------------
  87   2               // ---- 每次进入此定时需要1ms,则每隔1.96ms需要进入4次
  88   2           // ---------处理1ms事件--------------------
  89   2               timer_count++;
  90   2               if(timer_count==TIMER_500MS_COUNT)
  91   2                  {timer500ms_flag=0x01;
  92   3                       }
  93   2               if(timer_count>=TIMER_SECOND_COUNT)
  94   2                  {timer_count=0x00;
  95   3                       timersecond_flag=0x01;    // 1S的标志
  96   3                       timer500ms_flag=0x01;     // 每500ms的整数倍
  97   3               // -----------------------------------------------------------------------
  98   3                       // ---- 1S的定时 -------       
  99   3                       }
 100   2                        
 101   2           CH =0xF8;
 102   2           CL =0xCC;
 103   2           CCON   = 0x40;
 104   2               } 
 105   1        else // if((CCF0==0x01)||(CCF1==0x01))
 106   1          {CCON   = 0x40;
 107   2               }
 108   1      }
 109          
 110          
 111          #endif


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    106    ----
   CONSTANT SIZE    =   ----    ----
C51 COMPILER V8.05a   PCALVD                                                               10/15/2006 22:08:33 PAGE 3   

   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =      3       1
   BIT SIZE         =      2    ----
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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