📄 pwm.lst
字号:
C51 COMPILER V7.06 PWM 11/28/2008 09:29:06 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE PWM
OBJECT MODULE PLACED IN PWM.OBJ
COMPILER INVOKED BY: d:\Keil2\C51\BIN\C51.EXE PWM.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*
2 1、学习目的:利用定时器产生PWM,了解原理和使用方法
3 2、硬件要求:LED灯 定时器
4 3、试验现象:LED灯由亮到灭,由灭到亮逐步变化,也就是调光现象
5 */
6
7 #include <reg52.h>
8
9 sbit LED = P1^2;
10 unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms
11 unsigned char PWM_ON ;//定义高电平时间
12 void delay(unsigned int cnt)
13 {
14 1 while(--cnt);
15 1 }
16
17 main()
18 {
19 1 bit Flag;
20 1
21 1 TMOD |=0x01;//定时器设置 0.1ms in 12M crystal
22 1 TH0=(65536-100)/256;
23 1 TL0=(65536-100)%256;//定时0.1mS
24 1 IE= 0x82; //打开中断
25 1 TR0=1;
26 1
27 1 CYCLE = 10;// 时间可以调整 这个是10调整 8位PWM就是256步
28 1 while(!Flag)
29 1 {
30 2 delay(20000); //延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效果
31 2 PWM_ON++; //这个使用较长延时,以便能看清楚变化过程
32 2 if(PWM_ON == CYCLE)
33 2 { //这个里可以添加其他程序 如到最亮时候控制设备
34 3 Flag=1;
35 3 }
36 2 }
37 1
38 1 while(Flag) //亮度递减 同上,是个相反的过程
39 1 {
40 2 delay(20000);
41 2 PWM_ON--;
42 2 if(PWM_ON == 0)
43 2 {
44 3 Flag=0;
45 3 }
46 2 }
47 1 }
48 /********************************/
49 /* 定时中断 */
50 /********************************/
51 void tim(void) interrupt 1 using 1
52 {
53 1 static unsigned char count; //
54 1 TH0=(65536-100)/256;
55 1 TL0=(65536-100)%256;//定时0.1mS
C51 COMPILER V7.06 PWM 11/28/2008 09:29:06 PAGE 2
56 1
57 1 if (count==PWM_ON)
58 1 {
59 2 LED = 1; //灯灭
60 2 }
61 1 count++;
62 1 if(count == CYCLE)
63 1 {
64 2 count=0;
65 2 if(PWM_ON!=0) //如果左右时间是0 保持原来状态
66 2 LED = 0;//灯亮
67 2
68 2 }
69 1
70 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 104 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -