標(biāo)題: 51單片機(jī)產(chǎn)生一個(gè)450khz,4.5V的pwm波的程序怎樣設(shè)初值 [打印本頁]
作者: tim5529519 時(shí)間: 2018-7-17 23:40
標(biāo)題: 51單片機(jī)產(chǎn)生一個(gè)450khz,4.5V的pwm波的程序怎樣設(shè)初值
1. #include<reg51.h>
2. #define uint unsigned int//定義uint為無符號(hào)整形
3. #define uchar unsigned char//宏定義,同上
4.
5. sbit PWM=P2^0;// P2.0輸出pwm
6. uchar time; // 定義占空比的變量
7.
8. void main()
9. {
10. TMOD=0x01;//定時(shí)器0工作方式1
11. TH0=? 這兩個(gè)初值該怎樣設(shè)置
12. TL0=?
13. EA=1;//開總中斷
14. ET0=1;//開定時(shí)器0中斷
15. TR0=1;//啟動(dòng)定時(shí)器0
16. while(1)
17. {
18. }
19. }
20.
21. void tim0() interrupt 1
22. {
23. TR0=0;//賦初值時(shí),關(guān)閉定時(shí)器
24. TH0=0xff;//(65536-100)/256;//賦初值定時(shí)
25. TL0=0xf7;//(65536-100)%256;//0.01ms
26. TR0=1;//打開定時(shí)器
27.
28. time++;
29. if(time>=100) //1khz
30. time=0;
31. if(time<=30) //占空比%30,可改
32. PWM=1;
33. else PWM=0;
34. }
作者: game灬boy 時(shí)間: 2018-7-18 08:36
中斷里的th0 tl0與主函數(shù)要一致,450KHZ周期只有幾微妙吧,定時(shí)器指令時(shí)間都要耗費(fèi)這么多,產(chǎn)生那么高的頻率估計(jì)有夠嗆
作者: 哈瑟 時(shí)間: 2018-7-18 11:33
TH0=? TL0=?
作者: tim5529519 時(shí)間: 2018-7-18 12:16
那個(gè)主函數(shù)里面的忘了刪了,就是想知道頻率和初值設(shè)置的一個(gè)關(guān)系
作者: tim5529519 時(shí)間: 2018-7-18 12:17
等于多少呢?
作者: 陳cyx 時(shí)間: 2018-7-18 13:00
親51單片機(jī)應(yīng)該不能滿足你450khz的要求
作者: qinmiss 時(shí)間: 2018-7-18 13:43
要和下面的一樣 51單片機(jī) 正常一個(gè)定時(shí)器中斷滿時(shí)是65536us, 算一下你要定時(shí)的時(shí)間 就是你要減去的數(shù)字
作者: 哈瑟 時(shí)間: 2018-7-18 14:16
TH0=(65536-1)/256; TL0=(65536-1)%256; 這時(shí)應(yīng)該把time>=100改為time>=2(這是時(shí)鐘頻率為12Mhz下,頻率應(yīng)該是500KHZ,要得到450KHZ,你可以換個(gè)更大的晶振,計(jì)算方式和這一樣),表示中斷兩次如果要得到4.5V的PWM波需把占空比改為90%
作者: 哈瑟 時(shí)間: 2018-7-18 14:40
換個(gè)21.6Mhz(或10.8Mhz)的晶振,TH0=(65536-4(2))/256;TL0=(65536-4(2))/256;PWM占空比改為90%
作者: tim5529519 時(shí)間: 2018-7-18 15:30
哇太感謝了
作者: tim5529519 時(shí)間: 2018-7-18 15:34
那么此時(shí)中斷還是2次嗎?
作者: 哈瑟 時(shí)間: 2018-7-18 15:47
10.8Mhz是中斷兩次的,21.6Mhz是中斷四次的
作者: Mr.Xu2 時(shí)間: 2018-7-18 16:06
TH0=(65536-4(2))/256;TL0=(65536-4(2))/256
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |