📄 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 + -