程式設計用微控制器和定時器產生矩形波要求頻率50khz佔空比2 1設微控制器的fosc

2021-03-27 07:34:19 字數 4313 閱讀 9185

1樓:阿挺時代

是什麼微控制器假設是51,

sbit led=p1^0;

void main()

void t0_time() interrupt 1if(b==3)}

用c51微控制器和內部定時器來產生矩形波,要求頻率為100hz,佔空比為2:1,如何理解?

2樓:匿名使用者

矩形波就是邏輯電平0和1的轉換。用術語說你要做的就是一個簡單的pwm訊號發生器。頻率很好理解,就是週期的倒數。

其週期為1/100s,是10ms。那麼10ms完成一個波形的變換。佔空比2:

1,那麼高電平與低電平的時間佔週期的比例為2:1,就是高電平為2/3*10 ms,低電平時間為1/3*10ms,這樣就完成了一個完整的波形。如此往復就可以達到要求。

利用定時器完成高低電平的時間定時,用io口進行高低的電平的轉換就可以了!

3樓:匿名使用者

100hz的矩形波,週期就是10ms,佔空比2:1,就是高的部分佔10ms的2/3,低的部分佔10ms的1/3。理解了嗎?

用微控制器和內部定時器來產生矩形波

4樓:學而_無止境

由於你沒說用什麼微控制器,所以我用51的寫的(12t),鍾頻率為12mhz是不可能完成頻率為100khz,佔空比為2:1(高電平時間較長),因為你的機器週期是1us

是中斷裡面最少都要花上7us,按你的提意高電平為6.6666....us,低電平為3.3333.....us,所以無法完成,而且用晶振算出來還有小數,更不能過到了。

下面的程式請用48m的晶振,高電平為約6.us,低電平為約3.us,頻率為100khz,佔空比為約為2:

1,用51(12t)微控制器是很難達到你要值的。除非的要的頻率再低。cpu頻率再加高。

現在應該明白了吧!

#include

sbit pwm=p2^0;

void t0_t() interrupt 1else

}void main()

5樓:匿名使用者

使用atmega16-16ai微控制器,晶振為12mhz,讓微控制器工作於fpwm模式,icr1=120,這樣pwm的頻率就是100khz了,然後設定ocr1a=80,這樣佔空比就是66.6%,即高電平時間是低電平時間的2倍。

所以1l和2l說的都很正確,用51微控制器來實現時很困難的,需要換個微控制器。

6樓:

100khz的週期是10us,12mhz晶振51的指令週期是1us,所以很緊張,你的微控制器不能在幹別的了,只能執行如下的程式(假設從p1.0輸出脈衝):

lab1: clr p1.0 ;1us

nop ;1us

nop ;1us

setb p1.0 ;1us

nop ;1us

nop ;1us

nop ;1us

nop ;1us

jmp lab1 ;2us

因為只能精確到1us,所以佔空比沒那麼準,大約7:3

7樓:依米

如果用pic微控制器就好多了,自帶pwm和分頻器,四行程式就夠了!

8樓:

週期為10us,分3份,51那有那麼精確的?

編寫從微控制器的p1.0 產生頻率為50khz等寬矩形波的執行程式.要求使用定時器/計數

9樓:q是

50000hz,也就是1/50000=20us,所以,在定時器中定義初始值

th0=(65535-200)/256;

tl0=(65535-200)%256;

然後開ea=1;

tr0=1;

就可以了哦。

10樓:匿名使用者

用中斷設定好時間到時候翻轉就可以了

微控制器內部定時產生頻率為100khz等寬矩形波,晶振頻率為12mhz,如何程式設計?

利用微控制器的定時器t0令p1.2引腳輸出2ms的矩形波,要求佔空比為1:2(高電平持續時間短)微控制器為12mhz。

11樓:皇冠電子設計

可以借鑑輸出pwm波的一般方法,要用到兩個定時器,第一個用來確定整個波的週期,例如你這裡的2ms,第二個用來確定高電平的時間,例如你這裡的1/3ms,  過程大概是這樣的:啟動第一個定時器,把電平拉高,緊接著啟動第二個定時器,當第二個計數滿了之後,把電平拉低,關閉第二個定時器,這時就出來了一個週期的波,你重複這個過程就出來連續波了,  關於定時器初值和中斷向量那些你再去找找資料吧,一言兩語說不清楚

已知8051微控制器的fosc=12mhz,請利用定時器0方式二讓p1.2輸出矩形波。其矩形波高電平寬50us,低電平寬250 5

12樓:

*** 0000h

ljmp main

*** 000bh;以下是定時器0中斷處復理cjne r7,#00h,higho;如果制r7不為bai0,跳轉到輸出

du低電zhi

平處setb p1.2;如果r7為0,輸出高電平ljmp testo ;跳轉到test0,對r7進行dao處理higho:;輸出低電平

clr p1.2;輸出低電平

testo:

inc r7 ;r7自加一

cjne r7,#05h,exit ;如果r7不等於5,直接退出mov r7,#00h ;如果r7等於5,則清零r7exit:

reti ;退出中斷

*** 0030h

main:

mov r7,#00h;r7作為脈衝高低電平計數,初始清零mov tmod,#02h;定時器0工作於方式2mov th0,#0ceh;定時器0初值,50us中斷一次mov tl0,#0ceh

setb et0;開啟定時器0中斷

setb ea;開啟總中斷

setb tr0;啟動定時器0

ljmp $;死迴圈end

51微控制器晶振頻率12mhz,程式設計實現p1.0輸出頻率為2khz,佔空比為50%的方波,使用定時器

13樓:匿名使用者

#include

#define uchar unsigned charuchar num;

sbit p10=p1^0;

void t0isr() interrupt 3}main()

設80c51微控制器的晶振頻率為12mhz,試程式設計輸出頻率為100mhz,佔空比2:10的矩形波

14樓:匿名使用者

8051微控制器12m晶振要輸出100m頻率的脈衝是不可能實現的,晶振才12m,你拿什麼來得到100m的矩形波?!

15樓:古鎮河

老實人這麼多的嗎?。。。。我覺得樓主明顯就是打錯了,應該是輸出100hz的波。。。。。。。

16樓:匿名使用者

微控制器本身是無論如何都是做不到了。。。

如果一定要做,就試試微控制器+頻率發生晶片。

可以參考這個資料!

17樓:匿名使用者

這個也太難了,可能沒有人能做到,12mhz 與 100mhz 什麼概念,

51 微控制器 做不到。

18樓:cindere鞡

你好:但就用12mhz的微控制器時不可能輸出100mhz頻率的波形的,因為,微控制器最快的速度也才是1us,而且加上指令,速度就好幾微妙去了,就算用定時器做,拋開誤差不說,最大也只能輸出1mhz的波。

希望我的回答能幫助到你。

19樓:源嬋湛聰

;如下即可:

***0000h

movtmod,

#01h

setb

tr0lp1:

setb

p1.0

movr2,

#6loop:

movth0,

#(65536

-16666)

/256

movtl0,

#(65536

-16666)

mod256

jnbtf0,

$clr

tf0clr

p1.0

djnz

r2,loop

sjmp

lp1end

微控制器中斷實驗,微控制器定時器中斷實驗 程式(組合語言)不要c語言的

include 包含52微控制器暫存器定義的標頭檔案 函式功能 主函式 void main void 函式功能 外中斷t0的中斷服務程式 void int0 void interrupt 0 外中斷0的中斷編號為0 這是一個外中斷led實驗,你看看吧 中斷實驗有幾種,譬如外部中斷0,1,定時器中斷 ...

51微控制器定時器初值公式中的256是什麼

256換成十六進位制數就是ffh,也就是一個位元組數全部計滿時的資料!手打不易,如有幫助請採納,謝謝!用方式1時,16位的初值要分解成高8位 低8位,分別存放到 th0 tl0。對256求模,也就是除以 256 得到的整數商,這就是高八位。對256求餘,也就是除以 256,得到的餘數,這就是低八位。...

請問這段微控制器組合語言程式(關於定時器延時)是什麼意思

delay mov r3,14h 迴圈20次mov tmod,10h 定時器1工作於模式1 16位定時器 mov th1,3ch 賦初值,50毫秒溢位一次mov tl1,0b0h setb tr1 啟動定時器1 lp1 jbc tf1,lp2 溢位位為1,則清0後轉移到lp2 sjmp lp1 否則...