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