如何以8051運用delay的方法產生PWM波形~C語言

我想以8051產生PWM的方式控制馬達,假設我輸入10度的轉角命令.但我馬達目前只轉到5度.這個時候,輸入不等於輸出(有誤差).這個時候我需要改變PWM的頻率(假設PWM頻率範圍是1kHz~100kHz)使我的馬達轉的快一點.那在C語言的程式上我要如何寫才能達到delay時間會隨著我誤差的改變而改變(誤差越大delay時間越短)~看書看了好久還是找不到要怎麼解決這個問題..

PS:沒辦法使用中斷

void main(void)

{

PWM=1;

delay();

PWM=0;

delay();

}

void delay()

{

??????

}

2 Answers

Rating
  • 2 decades ago
    Favorite Answer

    你可以使用組合語言在C當中,這樣因該誤差就很小了吧,先到C51看一下吧。

    http://www.keil.com/support/man/docs/c51/c51_asm.h...

    Right click on the file in the Project Window — Files tab 你的主程式按右鍵*.C

    Choose Options for... to open Options — Properties page 選Options for...

    Enable Generate Assembler SRC file 將Generate Assembler SRC file點選

    Enable Assemble SRC file. 將Assemble SRC file點選

    寫法:

    #pragma asm

    MOV P1,R7

    MOV P1,#0

    #pragma endasm

    這樣就可以了

    2006-05-23 12:06:52 補充:

    你可以找相關資料喔,因為在c語言加入組合語言是比較難的,所以很多人都看不懂,但是只要你搞懂,那因該沒什麼程式可以難倒你了^^

    2006-05-23 12:12:37 補充:

    void delay1(unsigned char i)

    {

    while(--i);

    }

    SRC檔的內容,這個是用c比較準的一個程式,可以試著用。

    _delay1:

    USING0

    ?C0012:

    DJNZ R7,?C0012

    ?C0014:

    RET

    2006-05-23 12:13:46 補充:

    i delay time/us

    1 5

    2 7

    3 9

    Source(s): 8051是我的工作
  • 1 decade ago

    不好意思 可以問一下 peecehood time/us 1/5 2/7 3/9 ,1 5,2 7,3 9,15 27 39 是哪一個阿

    是時間/機械週期嗎

Still have questions? Get your answers by asking now.