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

📄 timrpwm.lst

📁 利用51单片机的两个定时器同时产生两路脉冲
💻 LST
字号:
C51 COMPILER V8.16   TIMRPWM                                                               02/17/2009 20:15:18 PAGE 1   


C51 COMPILER V8.16, COMPILATION OF MODULE TIMRPWM
OBJECT MODULE PLACED IN .\bin\TimrPWM.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE src\TimrPWM.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND PRINT(.\
                    -bin\TimrPWM.lst) OBJECT(.\bin\TimrPWM.obj)

line level    source

   1          #include<reg51.h>
   2          #include"inc/define.h"
   3          #include"inc/config.h"
   4          #include"inc/timrpwm.h"
   5          
   6          
   7          static u8 tmr_sel;
   8          /* PWM输出引脚电平指示  1:高   0:低 */
   9          u8 pin_level = 1;
  10          
  11          u8 hgh_h,hgh_l;
  12          u8 low_h,low_l;
  13          
  14          /******************************************************
  15          *说明:对用于产生PWM的定时器进行初始化
  16          *函数名称:pwm_init
  17          *参数:
  18          *tmr:指定用于产生PWM的定时器  0:定时器0   其他:定时器1 
  19          *baud:脉冲频率
  20          *rate:脉冲占空比
  21          *返回值:
  22          *其他:
  23          *********************************************************/
  24          void pwm_init(u8 tmr,u16 baud,u8 rate)
  25          {
  26   1              hgh_h = (u32)(65536 - (F_CPU/baud)*(rate/100.0))/256;   
  27   1              hgh_l = (u32)(65536 - (F_CPU/baud)*(rate/100.0))%256;
  28   1              low_h = (u32)(65536 - (F_CPU/baud)*(1 - rate/100.0))/256;       
  29   1              low_l = (u32)(65536 - (F_CPU/baud)*(1 - rate/100.0))%256;
  30   1      
  31   1              if(1==tmr || 0==tmr)
  32   1                      tmr_sel = tmr;
  33   1              else 
  34   1                      tmr_sel = 1;
  35   1              if(1 == tmr_sel)
  36   1              {       
  37   2                      TMOD &= 0x0F; 
  38   2                      TMOD |= 0x10;   /* 定时器1方式1:16位手动装载模式 */
  39   2                      if(1 == pin_level)
  40   2                      {
  41   3                              TH1 = hgh_h;
  42   3                              TL1 = hgh_l;
  43   3                      }
  44   2                      else
  45   2                      {       
  46   3                              TH1 = low_h;
  47   3                              TL1 = low_l;
  48   3                      }
  49   2      
  50   2                      EA    = 1;       /* 开启全局中断        */
  51   2                      ET1   = 1;   /* 开启定时器1中断 */
  52   2                      TR1   = 1;   /* 启动定时器1 */
  53   2              }
  54   1              else    /* 0 == tmr_sel */ 
C51 COMPILER V8.16   TIMRPWM                                                               02/17/2009 20:15:18 PAGE 2   

  55   1              {               
  56   2                      TMOD &= 0xF0; 
  57   2                      TMOD |= 0x01;   /* 定时器0方式1:16位手动装载模式 */
  58   2                      if(1 == pin_level)
  59   2                      {
  60   3                              TH0 = hgh_h;
  61   3                              TL0 = hgh_l;
  62   3                      }
  63   2                      else
  64   2                      {
  65   3                              TH0 = low_h;
  66   3                              TL0 = low_l;
  67   3                      }
  68   2      
  69   2                      EA    = 1;       /* 开启全局中断        */
  70   2                      ET0   = 1;   /* 开启定时器0中断 */
  71   2                      TR0   = 1;   /* 启动定时器0 */
  72   2              }
  73   1      }
  74          
  75          
  76          /*****************************************************
  77          *说明:使用定时器0产生PWM时起作用
  78          *函数名称:Timer0_ISR
  79          *参数:
  80          *返回值:
  81          *其他:
  82          *******************************************************
  83          void Timer0_ISR(void) interrupt 1
  84          {
  85                  if(0 == pin_level)
  86                  {
  87                          pin_level = 1;
  88                          TH0 = low_h;    
  89                          TL0 = low_l;
  90                  }
  91                  else
  92                  {
  93                          pin_level = 0;
  94                          TH0 = hgh_h;    
  95                          TL0 = hgh_l;
  96                  }
  97                  
  98                  PWMPort = (pin_level << PWM_PIN );
  99          }
 100          *******************************************************/
 101          /*****************************************************
 102          *说明:使用定时器1产生PWM时起作用
 103          *函数名称:Timer1_ISR
 104          *参数:
 105          *返回值:
 106          *其他:
 107          *******************************************************/
 108          void Timer1_ISR(void) interrupt 3
 109          {
 110   1              if(0 == pin_level)
 111   1              {
 112   2                      pin_level = 1;
 113   2                      TH1 = low_h;    
 114   2                      TL1 = low_l;
 115   2              }
 116   1              else
C51 COMPILER V8.16   TIMRPWM                                                               02/17/2009 20:15:18 PAGE 3   

 117   1              {
 118   2                      pin_level = 0;
 119   2                      TH1 = hgh_h;    
 120   2                      TL1 = hgh_l;
 121   2              }
 122   1      
 123   1              PWMPort = (pin_level << PWM_PIN); 
 124   1              
 125   1      }


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