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

📄 pwm.lst

📁 51单片机控制舵机PWM程序
💻 LST
字号:
C51 COMPILER V9.00   PWM                                                                   08/26/2011 14:26:26 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE PWM
OBJECT MODULE PLACED IN pwm.OBJ
COMPILER INVOKED BY: K:\keil uVision4\C51\BIN\C51.EXE pwm.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "PWM.h"
   2          
   3          uchar baseTimeCounter = 0;              // 定时器0的基本定时时间
   4          uchar steeringEngineAngle = STEERING_ENGINE_ANGLE;      //角度标识
   5          
   6          /******************************************************************
   7           - 功能描述:1ms精度的延迟函数
   8           - 参数说明:  
   9           - 返回说明:
  10           - 示例:  
  11           - 修改记录:
  12           - 注意事项:适用于11.0592M的晶振频率。
  13          ******************************************************************/
  14          void Delay_1ms(uint ms)//延时
  15          {
  16   1              uint i, j;
  17   1      
  18   1              for (i=0; i<ms; i++)
  19   1              {
  20   2                      for (j=0; j<125; j++);
  21   2              }
  22   1      }
  23          
  24          /******************************************************************
  25           - 功能描述:设定定时器0的定时时间为0.5ms
  26           - 参数说明:  
  27           - 返回说明:
  28           - 示例:  
  29           - 修改记录:
  30           - 注意事项:适用于11.0592M的晶振频率。
  31          ******************************************************************/
  32          void Init_Timer0(void)  //定时器初始化
  33          {       
  34   1              // 设定定时器0工作在方式1(16位定时器模式)
  35   1              TMOD = 0x01;    
  36   1              // 设定定时器0的定时时间
  37   1              TH0 = (65535-460)/256;
  38   1              TL0 = (65535-460)%256;  //11.0592MZ晶振,0.5ms
  39   1              // 开中断
  40   1              ET0 = 1;
  41   1              EA = 1;
  42   1              // 开启定时器
  43   1              TR0 = 1;
  44   1      }
  45          
  46          /******************************************************************
  47           - 功能描述:产生所需要的PWM波
  48           - 参数说明:  
  49           - 返回说明:
  50           - 示例:  
  51           - 修改记录:
  52           - 注意事项:适用于11.0592M的晶振频率。
  53          ******************************************************************/
  54          void Timer0_Interrupt() interrupt 1 //中断程序
  55          {        
C51 COMPILER V9.00   PWM                                                                   08/26/2011 14:26:26 PAGE 2   

  56   1              // 重载定时器0
  57   1              TH0 = (65535-460)/256;  
  58   1              TL0 = (65535-460)%256;
  59   1      
  60   1              if (baseTimeCounter < steeringEngineAngle)      //判断0.5ms次数是否小于角度标识
  61   1              {
  62   2                      PWM0 = 1;                  //确实小于,PWM输出高电平
  63   2              }
  64   1              else
  65   1              {
  66   2                      PWM0 = 0;                  //大于则输出低电平
  67   2              }
  68   1      
  69   1              baseTimeCounter += 1;          //0.5ms次数加1
  70   1              if (baseTimeCounter == 40)
  71   1              {
  72   2                      baseTimeCounter = 0;
  73   2              }
  74   1      }
  75          
  76          /******************************************************************
  77           - 功能描述:通过按键调整PWM波的占空比->舵机的角度
  78           - 参数说明:  
  79           - 返回说明:
  80           - 示例:  
  81           - 修改记录:
  82           - 注意事项:每次增加/减少的角度为45°
  83          ******************************************************************/
  84          void KeyScan(void)              //按键扫描
  85          {       
  86   1              #if (ADJUST_STEERING_ENGINE_MODE == KEY_SET_POINT)
  87   1              {
  88   2                      // 增加角度
  89   2                      if (KEY1 == 0)                          // 角度增加按键是否按下
  90   2                      {
  91   3                              Delay_1ms(10);                                  // 延时消抖
  92   3                              if (KEY1 == 0)                          // 确实按下
  93   3                              {       
  94   4                                      baseTimeCounter = 0;                            // 按键按下 则20ms周期从新开始
  95   4              
  96   4                                      steeringEngineAngle++;                  // 高电平时间增加0.5ms->角度增加45°                    
  97   4                                      if(steeringEngineAngle == 12)
  98   4                                      {
  99   5                                              steeringEngineAngle = 11;       // 已经是180度,则保持
 100   5                                      }
 101   4              
 102   4                                      while (KEY1 == 0);      // 等待按键放开
 103   4                              }
 104   3                      }
 105   2                      // 减少角度
 106   2                      if (KEY2 == 0)                          // 角度减小按键是否按下
 107   2                      {
 108   3                              Delay_1ms(10);                                  // 延时消抖
 109   3                              if (KEY2 == 0)
 110   3                              {       
 111   4                                      baseTimeCounter = 0;
 112   4              
 113   4                                      steeringEngineAngle--;          // 角度标识减1                  
 114   4                                      if(steeringEngineAngle==0)
 115   4                                      {
 116   5                                              steeringEngineAngle=1;          // 已经是0度,则保持
 117   5                                      }
C51 COMPILER V9.00   PWM                                                                   08/26/2011 14:26:26 PAGE 3   

 118   4              
 119   4                                      while (KEY2 == 0);              // 等待按键放开
 120   4                              }
 121   3                      }
 122   2              }
 123   1              #endif
 124   1      }


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