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