📄 pwm.lst
字号:
C51 COMPILER V7.06 PWM 05/13/2009 13:37:34 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE PWM
OBJECT MODULE PLACED IN PWM.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE PWM.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*-----------------------------------------------
2 名称:PWM 调光
3 公司:上海浩豚电子科技有限公司
4 网站:www.doflye.cn
5 编写:师访
6 日期:2009.5
7 修改:无
8 内容:1、学习目的:利用定时器产生PWM,了解原理和使用方法
9 2、硬件要求:LED灯 定时器
10 3、试验现象:LED灯由亮到灭,由灭到亮逐步变化,也就是调光现象
11 ------------------------------------------------*/
12
13 #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
14
15 sbit LED = P1^2; //定义LED灯,通过LED显示调光效果
16 unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms
17 unsigned char PWM_ON ;//定义高电平时间
18 /******************************************************************/
19 /* 延时函数 */
20 /******************************************************************/
21 void delay(unsigned int cnt)
22 {
23 1 while(--cnt);
24 1 }
25 /******************************************************************/
26 /* 主函数 */
27 /******************************************************************/
28 main()
29 {
30 1 bit Flag;
31 1
32 1 TMOD |=0x01; //定时器设置 0.1ms in 12M crystal
33 1 TH0=(65536-100)/256;
34 1 TL0=(65536-100)%256; //定时0.1mS
35 1 IE= 0x82; //打开中断
36 1 TR0=1;
37 1
38 1 CYCLE = 10; // 时间可以调整 这个是10调整 8位PWM就是256步
39 1 while(!Flag)
40 1 {
41 2 delay(20000); //延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效果
42 2 PWM_ON++; //这个使用较长延时,以便能看清楚变化过程
43 2 if(PWM_ON == CYCLE)
44 2 { //这个里可以添加其他程序 如到最亮时候控制设备
45 3 Flag=1;
46 3 }
47 2 }
48 1
49 1 while(Flag) //亮度递减 同上,是个相反的过程
50 1 {
51 2 delay(20000);
52 2 PWM_ON--;
53 2 if(PWM_ON == 0)
54 2 {
55 3 Flag=0;
C51 COMPILER V7.06 PWM 05/13/2009 13:37:34 PAGE 2
56 3 }
57 2 }
58 1 }
59 /******************************************************************/
60 /* 定时器中断函数 */
61 /******************************************************************/
62 void tim(void) interrupt 1 using 1
63 {
64 1 static unsigned char count;
65 1 TH0=(65536-100)/256;
66 1 TL0=(65536-100)%256; //定时0.1mS
67 1
68 1 if (count==PWM_ON)
69 1 {
70 2 LED = 1; //灯灭
71 2 }
72 1 count++;
73 1 if(count == CYCLE)
74 1 {
75 2 count=0;
76 2 if(PWM_ON!=0) //如果左右时间是0 保持原来状态
77 2 LED = 0; //灯亮
78 2
79 2 }
80 1
81 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 + -