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

📄 pwm.lst

📁 单片机P89V51RD2在操纵系统RTX下的各个功能
💻 LST
字号:
C51 COMPILER V8.02   PWM                                                                   10/01/2007 00:33:26 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE PWM
OBJECT MODULE PLACED IN .\obj\pwm.obj
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE pwm.c BROWSE DEBUG OBJECTEXTEND PRINT(.\lst\pwm.lst) OBJECT(.\obj\pwm.obj)

line level    source

   1          //pwm.c
   2          //
   3          
   4          #include "AppDefine.h"                 
   5          
   6          
   7          void PWM_init(void)
   8          {
   9   1      //CMOD
  10   1      //Bit       7     6   5 4 3   2    1    0
  11   1      //Symbol   CIDL WDTE  - - -   CPS1 CPS0 ECF
  12   1      //Bit       0     0   0 0 0   1    0     0 
  13   1        
  14   1      //CCON,可位
  15   1      //Bit       7     6   5    4     3    2    1    0
  16   1      //Symbol    CF    CR  -   CCF4 CCF3 CCF2 CCF1 CCF0
  17   1      //Bit       0     0   0    0     0    0    0     0   
  18   1      
  19   1      //CCAPM0
  20   1      //Bit         7   6     5     4    3     2    1    0
  21   1      //Symbol      - ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn
  22   1      //8-bit PWM   0   1     0     0     0    0    1     0 
  23   1      
  24   1              CMOD = 0x04;    //不使能中断,采用Timer0计数器,实现频率
  25   1              CCON = 0x00;            //溢出标志,软件清零
  26   1              CCAPM0 = 0x42;     //pwm
  27   1              CCAPM1 = 0x42;
  28   1      
  29   1              //频率 由PCA的Timer源来决定
  30   1              TMOD  |= 0x02;       //TMOD: timer 0, mode 2, 8-bit reload 
  31   1              TL0   = 0xfb;       //
  32   1              TH0   = TL0;       
  33   1      
  34   1              //初值
  35   1              //在PWM 模式,输出的频率决定于PCA定时器的源。
  36   1              //由于只有一对CH 和CL寄存器,所有模块共享PCA定时器和频率。
  37   1              //输出的占空比由装在高位CCAPnH的值控制。
  38   1              //由于写入CCAPnH寄存器不是同步的,写入高位的值不会马上装入CCAPnL做比较,
  39   1              //直到输出的另一个周期(当CL从255到0翻转)。
  40   1              //用下面的公式计算任何占空比CCAPnH 值:
  41   1          //CCAPnH=256(1-占空比)
  42   1          //CCAPnH 是8 位整数,占空比是分数。
  43   1              CL = 0x00;
  44   1              CH = 0x00;
  45   1              CCAP0L = 0x00;
  46   1              CCAP0H = 0x7f;//PrePlusVol//占空比=256*50% 
  47   1              CCAP1L = 0x00;
  48   1              CCAP1H = 0x7f;//PrePlusVol//占空比=256*50% 
  49   1      }
  50          
  51          
  52          unsigned char PWM_status(void)
  53          {
  54   1              unsigned char ctime;
  55   1              ctime = CL;
C51 COMPILER V8.02   PWM                                                                   10/01/2007 00:33:26 PAGE 2   

  56   1              _nop_();_nop_();
  57   1              _nop_();_nop_();
  58   1              if(ctime == CL)
  59   1                      return 0;//没有PWM
  60   1              else
  61   1                      return 1;
  62   1      }
  63          void PWM_run(void)
  64          {
  65   1              TR0  = 1;      // timer 0 run 
  66   1              CR = 1;         //run PCA
  67   1      }
  68          
  69          void PWM_stop(void)
  70          {
  71   1              TR0  = 0;      // timer 0 
  72   1              CR = 0;
  73   1      }
  74          
  75          void PWM_changfreq(unsigned short freq)
  76          {
  77   1      /*
  78   1      204       238   ee
  79   1      217       239   ef
  80   1      227       240   f0 
  81   1      244           241
  82   1      263           242
  83   1      286           243
  84   1      303           244
  85   1      333           245
  86   1      370           246
  87   1      416           247
  88   1      476           248
  89   1      526           249
  90   1      625           250
  91   1      740           251
  92   1      926           252
  93   1      1220      253
  94   1      1852      254    fe
  95   1      */
  96   1              unsigned char time0;
  97   1              
  98   1              if(freq < 200)
  99   1                      time0 = 0xee;
 100   1              else if(freq < 217)
 101   1                      time0 = 0xee;
 102   1              else if(freq < 227)
 103   1                      time0 = 0xef;
 104   1              else if(freq < 217)
 105   1                      time0 = 0xf0;
 106   1              else if(freq < 227)
 107   1                      time0 = 0xef;
 108   1              else if(freq < 244)
 109   1                      time0 = 0xf0;
 110   1              else if(freq < 263)
 111   1                      time0 = 0xf1;
 112   1              else if(freq < 286)
 113   1                      time0 = 0xf2;
 114   1              else if(freq < 303)
 115   1                      time0 = 0xf3;
 116   1              else if(freq < 333)
 117   1                      time0 = 0xf4;
C51 COMPILER V8.02   PWM                                                                   10/01/2007 00:33:26 PAGE 3   

 118   1              else if(freq < 370)
 119   1                      time0 = 0xf5;
 120   1              else if(freq < 416)
 121   1                      time0 = 0xf6;
 122   1              else if(freq < 476)
 123   1                      time0 = 0xf7;
 124   1              else if(freq < 526)
 125   1                      time0 = 0xf8;
 126   1              else if(freq < 625)
 127   1                      time0 = 0xf9;
 128   1              else if(freq < 740)
 129   1                      time0 = 0xfa;
 130   1              else if(freq < 926)
 131   1                      time0 = 0xfb;
 132   1              else if(freq < 1220)
 133   1                      time0 = 0xfc;
 134   1              else if(freq < 1852)
 135   1                      time0 = 0xfd;
 136   1              else if(freq > 1852)
 137   1                      time0 = 0xfe;
 138   1      
 139   1              TL0   = time0;       //
 140   1              TH0   = TL0;             //
 141   1      }


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