如何用C8051F340的PCA產生頻率可調的PWM 希望有程式,謝謝

2025-03-14 20:20:16 字數 3144 閱讀 7373

1樓:14一縷暖陽

#include

#define uchar unsigned char

#define uint unsigned int

void port_init (void);

void pca_init (void);

bit pca_flag;

uint pwm=0;

void main (void)

pca0md &=0x40; /關閉看門狗。

oscicn |=0x03; /雹坦逗輪/使用內部12m晶振。

port_init ()埠初始化。

pca_init ()pca初始設為16位脈寬。

ea=1;while (1)

void port_init (void)

p0skip = 0xff; /源指桐/跳過p0口。

p1skip = 0x03; /跳過。

xbr1 = 0x42; /將pca輸出配置到腳。

p1mdout |=0x04; /配置為推輓輸出。

void pca_init (void)

unsigned int cex0_compare_value ;

pca0cn = 0x00; /stop counter; clear all flags

pca0md = 0x08; /use sysclk as time base

pca0cpm0 = 0xc2; /module 0 = 16-bit pwm mode and

configure initial pwm duty cycle = 60%

cex0_compare_value = 65536 - 65536 *

pca0cpl0 = cex0_compare_value & 0x00ff);

pca0cph0 = cex0_compare_value & 0xff00)>>8;

cr = 1;

佔空比為60% pwm=65536-65536*;

在這改變佔空比就能改變輸出pwm

怎麼讓微控制器(c8051f340)產生一定佔空比的pwm波形

2樓:藏在水中的人

在這個程式中 佔空比=(65536-pwm)/65536要讓佔空比為60% pwm=65536-65536*;

只要下面程式 就可以產生pwm了不需要中斷的void pca0_init (void)

c8051f410如何用pca產生4路pwm波,誰有程式,求賜教。我的郵箱[email protected]

3樓:網友

一般是通過計數來控制,仔細看一下晶元關於pwm的使用,重點在原理和暫存器的使用。

c8051f330能否用pca計數方式輸出佔空比和頻率都能連續調節的pwm?怎麼實現?

4樓:網友

那就是佔空比的設定問題,你把相應的暫存器設定好了就行,還有就是你用定時器溢位做時鐘源就好了,就可以按你的要求得到你要的頻率了。記住那個時鐘源的配置暫存器要設定正確。

你要是看下資料手冊就更好一點,那個計數器你弄懂了就好弄一點?》@

關於c8051f912 的pca產生16位pwm的演算法

5樓:網友

用pca的16位pwm必須計滿65536個系統週期(系統時鐘不分頻,最大25m)才能產生乙個週期的pwm,所以頻率很低,想要頻率更高的只能降低pwm精度,在精度要求不高的情況下可以使用8位pwm,如果你既想pwm精度比8位高又要頻率大點還有一種方法,使用普通定時器的模式0,13位定時器模式,使用軟體方式產生pwm,其他的不使用外接晶元沒辦法。

還有就是可以考慮換一款晶元,比如c8051f120通過pll主頻可以達到100m,或者直接換stm32,**比c8051f的還便宜點呢。

用stc微控制器的pca做定時器,輸出pwm

6樓:網友

cmod = 0x00 ;pca空閒時執行,時鐘fosc/12,遮蔽溢位中斷。

ccon = 0x40 ;pca計數器啟動,清零各個中斷請求標誌位。

ccapm0 = 0x49 ;pca模組0設定為軟體定時器比較捕捉功能。

epcalvd = 1 ;pca比較中斷允許。

pca模組中斷服務程式(輸出控制)

if(ccf0 = 1)

ccf0 = 0x00;//pca模組0中斷標誌,由硬體置位,必須由軟體清0

ccon = 0x40;//pca計數器允許計數,清0各個中斷請求標誌位。

xhout = !xhout;//自定義的輸出高低電平標誌。

if (xhout==1)

pwmout = 1;//置位pwm輸出管腳。

ccap0l = ccap0l + mc1l;//脈衝1低位。

ccap0h = ccap0h + mc1h;//脈衝1高位。

else pwmout = 0;//復位pwm輸出管腳。

ccap0l = ccap0l + mc0l;//脈衝0低位。

ccap0h = ccap0h + mc0h;//脈衝0高位。

你看哪個簡單。

7樓:每每

放入忒讓人發貨人投入費用投入。

微控制器c8051f340如何接收從別的微控制器傳送過來的pwm波,並進行佔空比分析?

8樓:網友

基本上,只要對所接收訊號的高低電平分別計時,兩者的和就是週期,然後就能計算佔空比了。

一般來說,計時所用的點數要非常密集,才能得到較為精確的結果。換言之,計時越精確,結果越精確。

例如,同樣是1ms的脈寬,你用1us和10us來計時,兩者所得到的結果,誤差的區別就非常大了。

9樓:

需要知道佔空比,執行傳引數就可以了啊,通過乙個普通io,模擬iic或者spi就可以將引數傳過來,8051要直接識別佔空比很難,也可以使用微分電路,將其轉換成直流訊號,然後ad取樣,間接判斷佔空比。

10樓:

這個問題我遇到過,可以這麼解決,用cap捕獲單元,不佔用微控制器定時器,在中斷程式中計時高低電平,計算佔空比即可,非常簡單。

C如何用FORM1顯示FORM2,然後將FORM2中的TEXTBOX中的值返回給FORM

form1 裡面建個label1 和乙個button1解決方案資源管理器 新增個新建項 windows窗體 叫form2裡面放個 textbox1和乙個button1下面是 form1裡面 button1 click事件 private void button1 click object sende...

如何用c語言表示數的小數次方,如何用c語言表示乙個數的小數次方

用pow 即可 例 求16的平方根,輸出4,double型 include main include include int main 在c語言中怎樣表示乙個數的 n 次方 c語言中計算乙個數的n次方可以用庫函式pow來實現。函式原型 double pow double x,double y 舉例如...

C語言的UI,如何用c語言設計介面?

1.可以自己編寫介面,十分麻煩要畫線,按鈕陰影,自己設計響應事件。vc提供的mfc是windows的,linux的話能可以用qt 與mfc類似的類庫 2.不是的,別的平台也可以,只是要注意相容性.3.學到什麼程度看你自己要幹什麼,如果要找工作,那麼先c c 然後如果你要linux就學 unix c ...