![]() |
樓主學(xué)習(xí)心態(tài)還是蠻好的 但學(xué)習(xí)的方法并不對 一有問題就問,不管問題有多簡單,總之是覺得不懂都要問 可是,學(xué)習(xí)本身就是去學(xué)你本身不會的東西呀,你都會了,還學(xué)什么呢? "如果高效簡單"這個問題是如何產(chǎn)生的? 是你想要高效簡單還是項目要求?或者是作業(yè)要求的? 編程并不是高效簡單就是好的 就拿定時器中斷來說, 使能一些相關(guān)中斷,人家都是: EX0=1; ET0=1; EA=1; EX1=1; ET1=1, 為什么不用IE=0x8f;呢?難道這一條語句不更加"高效簡單"嗎? 看出這里頭有什么不同嗎? STC15最高效的PWM用片上的PWM功能,而不是用定時器,如果片上沒有,那就換單片機,價錢差不多一樣的 如果一定要用定時器,最高效的是匯編語言,但匯編不一定會簡單 |
24到100us 的變化增量是多少? 1us?5us?10us?不同增量對單片機的速度要求很不一樣 |
設(shè)PWM周期是T,脈沖寬度是P,PW1、PW2這兩個相差180度的輸出。 做個定時中斷,中斷周期=T1,保證:T=2*N*T1,T>P;N由你選,要保證占空比好調(diào)節(jié)就行了!實際只要做到N是P、T/2、的公約數(shù)即可。 調(diào)置一個計數(shù)器X。 中斷服務(wù)程序: 1、X=X+1;中斷計數(shù),處理脈沖寬度,占空比的時機。 2、當(dāng)X=T時,清X=0;即一個周期完成從頭再計。 3、當(dāng)X=0時,置PW1=1;相位0度,PW1開始。 4、當(dāng)X=P時,清PW1=0;PW1正脈沖結(jié)束。 5、X=T/2時,置PW2=1;相位180度,PW2開始。 6、X=(T/2+P) MOD T 時,清PW2=0;PW2正脈沖結(jié)束。 注,分兩種情況處理PW2正脈沖結(jié)束時間: P<T/2時,X=T/2+P 時PW2正脈沖結(jié)束 P>=T/2時,X=T/2+P-T=P-T/2 時PW2正脈沖結(jié)束; 簡單吧。 |
Powered by 單片機教程網(wǎng)