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

📄 tmrpwm.lst

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


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

line level    source

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

  55   2              }
  56   1              else    /* 0 == tmr_sel */ 
  57   1              {
  58   2                      hgh_h0 = (u32)(65536 - (F_CPU/baud)*(rate/100.0))/256;  
  59   2                      hgh_l0 = (u32)(65536 - (F_CPU/baud)*(rate/100.0))%256;
  60   2                      low_h0 = (u32)(65536 - (F_CPU/baud)*(1 - rate/100.0))/256;      
  61   2                      low_l0 = (u32)(65536 - (F_CPU/baud)*(1 - rate/100.0))%256;
  62   2                              
  63   2                      TMOD &= 0xF0; 
  64   2                      TMOD |= 0x01;   /* 定时器0方式1:16位手动装载模式 */
  65   2                      if(1 == level1)
  66   2                      {
  67   3                              TH0 = hgh_h0;
  68   3                              TL0 = hgh_l0;
  69   3                      }
  70   2                      else
  71   2                      {
  72   3                              TH0 = low_h0;
  73   3                              TL0 = low_l0;
  74   3                      }
  75   2      
  76   2                      EA    = 1;       /* 开启全局中断        */
  77   2                      ET0   = 1;   /* 开启定时器0中断 */
  78   2                      TR0   = 1;   /* 启动定时器0 */
  79   2              }
  80   1      }
  81          
  82          
  83          /*****************************************************
  84          *说明:使用定时器0产生PWM时起作用
  85          *函数名称:Timer0_ISR
  86          *参数:
  87          *返回值:
  88          *其他:
  89          *******************************************************/
  90          void Timer0_ISR(void) interrupt 1
  91          {
  92   1              if(SerialP0 < (SerialL0 * 8))
  93   1                      SerialP0++;
  94   1              else 
  95   1                      SerialP0 = 0;
  96   1              level0 = SerialD0[SerialP0/8] & (1 << (SerialP0%8));
  97   1      
  98   1              if(0 == level0)
  99   1              {
 100   2                      TH0 = low_h0;   
 101   2                      TL0 = low_l0;
 102   2              }
 103   1              else
 104   1              {
 105   2                      TH0 = hgh_h0;   
 106   2                      TL0 = hgh_l0;
 107   2              }
 108   1              
 109   1              PWM0_Port = (level0 << PWM0_PIN );
 110   1      }
 111          
 112          /*****************************************************
 113          *说明:使用定时器1产生PWM时起作用
 114          *函数名称:Timer1_ISR
 115          *参数:
 116          *返回值:
C51 COMPILER V8.16   TMRPWM                                                                02/17/2009 17:12:49 PAGE 3   

 117          *其他:
 118          *******************************************************/
 119          void Timer1_ISR(void) interrupt 3
 120          {
 121   1              if(SerialP1 < (SerialL1 * 8))
 122   1                      SerialP1++;
 123   1              else 
 124   1                      SerialP1 = 0;
 125   1              level1 = SerialD1[SerialP1/8] & (1 << (SerialP1%8));
 126   1      
 127   1              if(0 == level1)
 128   1              {
 129   2                      TH1 = low_h1;   
 130   2                      TL1 = low_l1;
 131   2              }
 132   1              else
 133   1              {
 134   2                      TH1 = hgh_h1;   
 135   2                      TL1 = hgh_l1;
 136   2              }
 137   1      
 138   1              PWM1_Port = (level1 << PWM1_PIN); 
 139   1              
 140   1      }


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