當前位置:編程學習大全網 - 編程語言 - 如何用51單片機定時器產生壹個頻率為20kHz,占空比可調的PWM?

如何用51單片機定時器產生壹個頻率為20kHz,占空比可調的PWM?

# include & ltreg52.h & gt//包含頭文件,壹般不需要更改。頭文件包含特殊功能寄存器的定義。

sbit key 1 = p3^1;//定義速度控制按鈕

sbit PWM = p1^5;//定義調速端口

無符號字符循環;//定義周期。如果數字x參考時序時間為10,則周期為10x0.1 ms。

無符號字符PWM _ ON//定義高電平時間。

/******************************************************************/

/*延遲功能*/

/******************************************************************/

無效延遲(無符號整數)

{

while(-CNT);

}

/******************************************************************/

/*主函數*/

/******************************************************************/

主()

{

無符號字符PWM _ Num//定義檔位。

TMOD | = 0x 01;//定時器設置為12M晶體中的1ms。

TH0 =(65536-1000)/256;

TL0 =(65536-1000)% 256;//計時1毫秒

IE = 0x82//打開中斷

TR0 = 1;

周期= 10;//時間可以調整。這是10步。調整周期為10 ms,8位PWM為256步。

while(1)

{

如果(!KEY1)

{

延時(20000);

如果(!KEY1)

{

PWM _ num++;

if(PWM _ Num = = 4)PWM _ Num = 0;

開關(PWM_Num){

情況0:P0 = 0x 06;PWM _ ON = 0;打破;//高電平持續時間

案例1:P0 = 0x5B;PWM _ ON = 4;打破;

情況二:P0 = 0x4FPWM _ ON = 6;打破;

情況三:P0 = 0x66PWM _ ON = 8;打破;

默認:break

}

}

}

}

}

/******************************************************************/

/*定時器中斷功能*/

/******************************************************************/

void tim(void)中斷1使用1

{

靜態無符號字符計數;//

TH0 =(65536-1000)/256;

TL0 =(65536-1000)% 256;//計時1毫秒

if (count==PWM_ON)

{

PWM = 1;//燈滅了

}

count++;

if(計數==周期)

{

count = 0;

if(PWM_ON!=0) //如果左右時間為0,保持原來的狀態。

PWM = 0;//燈亮了

}

}

  • 上一篇:回文詩的語言講究有那些?
  • 下一篇:通達信函數大全(整理)
  • copyright 2024編程學習大全網