用c語言編譯pwm波
『壹』 單片機C語言PWM的典型程序謝謝
利用定時器控制產生占空比可變的PWM波,是單片機應用中常見的技術。通過調節PWM值,可以控制電機的轉速,實現加速或減速的功能。當按下K1鍵時,PWM值增加,占空比減小,電機減速;按下K2鍵時,PWM值減小,占空比增加,電機加速。如果PWM值增加到最大值或減小到最小值,蜂鳴器將報警。
以下是實現上述功能的典型程序代碼:
首先,定義必要的位變數和函數。K1和K2分別對應增加和減少PWM值的按鍵,BEEP表示蜂鳴器。PWM初始值設為0x7F。
在主函數中,初始化埠和定時器。設置定時器0的1ms延時常數,定時器1用於脈寬調節。通過按鍵控制PWM值的增減,當PWM值達到最大或最小值時,蜂鳴器發出警報。
定時器0中斷服務程序用於設置定時器0的頻率,啟動輸出。定時器1中斷服務程序則用於設置定時器1的脈寬,結束輸出。
蜂鳴器子程序用於產生短促的蜂鳴聲。延時子程序用於實現毫秒級的延時,確保程序運行的穩定性和准確性。
通過上述程序,可以實現對PWM波的精確控制,進而實現對電機速度的調節。
『貳』 PIC單片機輸出PWM波的C語言源程序
#ifndef __PWM__H__
#define __PWM__H__
void pwm_ccp1(unsigned char a,unsigned char b);
void pwm_ccp2(unsigned char a,unsigned char b);
#endif
void pwm_ccp1(unsigned char a,unsigned char b) //左邊PWM
//CCP1 模塊的 PWM 工作方式,周期為(b+1)*4*Tosc*(TMR2前分頻值)=b+1 us //pwm高電平=a:CCP1CON(第四五位)Tosc*(TMR2前分頻值)
//pwm高電平=a:CCP1CON(第四五位)Tosc*(TMR2前分頻值)
{ //a>b時有最高轉速
CCPR1L=a; //* 設置工作循環的高 8bit 為 a
CCP1CON=0X0C; //0000 1100 設置 CCP1 為 PWM 工作方式,且工作循環的低 bit2 為 11*/
CCP1IE=0;; //* 禁止總中斷和外圍中斷 */
PR2=b; //* 設置 PWM 周期 */
TRISC2=0; //* 設置 RC2/CCP1 為輸出 */
T2CON=0X04; //* 0000 1000前分頻比為 1:1 ,後分頻器1:2,打開 TMR2 ,同時輸出 PWM 信號 */
}
void pwm_ccp2(unsigned char a,unsigned char b) //右邊PWM
//CCP2 模塊的 PWM 工作方式,周期為(b+1)*4*Tosc*(TMR2前分頻值),
//pwm高電平=a:CCP2CON(第四五位)Tosc*(TMR2前分頻值)
{
CCPR2L=a; //* 設置工作循環的高 8bit 為 a
CCP2CON=0X0C; //* 設置 CCP2 為 PWM 工作方式,且工作循環的低 bit2 為 11*/
CCP2IE=0; //* 中斷屏蔽
PR2=b; //* 設置 PWM 周期 */
TRISC1=0; //* 設置 RC1/CCP2 為輸出 */
T2CON=0X04; //* 前分頻比為 1 ,打開 TMR2 ,同時輸出 PWM 信號 */
}
『叄』 51單片機測量PWM波的占空比的C語言程序
用定時器產生程序如下:
unsigned
int
a=0
,b=10;
void
main()
{
tmod=0x01;
th0=(65536-50000)/256;
tl0=(65536-50000)%256;
ea=1;
et0=1;
tr0=1;
}
void
pwm()
interrupt
1
{
th0=(65536-50000)/256;
tl0=(65536-50000)%256
;
a++;
p1^1=0;
if(a=20)
{
a=0;
}
if(a=b)
{
p1^1=1;
}
}
調節a
,b的值即可調節占空比,程序框架就是這樣,具體自己改吧