久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11242|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)兩種定時器方式輸出pwm原理分析與代碼實(shí)現(xiàn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:527981 發(fā)表于 2019-5-6 11:34 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
51單片機(jī)除了一部分型號可以自帶pwm波輸出,其他型號只有用軟件模擬輸出。而其中一般用定時器中斷的方式來設(shè)置。
第一種方式是用兩個相同周期的定時器來產(chǎn)生。
先產(chǎn)生兩個高低數(shù)字信號


兩個定時器輸出的信號值不一樣,但其初相相同。若先產(chǎn)生高電平,則后面的輸出全為低電平,同理相反。





如果這樣的話只有兩種輸出結(jié)果,要么恒為1要么恒為0沒有什么意義,而我們要實(shí)現(xiàn)占空比的話,只有控制其初相。




代碼實(shí)現(xiàn)
  1. #include<reg52.h>
  2. sbit abc=P1^3;
  3. void ab(int);
  4. void yanchi(int);
  5. int ac=0;
  6. void main(){
  7. int a=0;
  8. abc=1;
  9. TMOD=0X22;//設(shè)置兩個定時器的工作方式16位
  10. EA=1;
  11. while(1){
  12. yanchi(5);
  13. ab(a);
  14. a++;
  15. if(a==100)
  16. a=0;
  17. }

  18. }
  19. void ab(int a){//a為占空比,也就是上面兩個定時器輸出信號的時間差

  20. ET0=0;
  21. TR0=0;
  22. ET1=0;
  23. TR1=0;
  24. abc=1;
  25. TH0=(65536-1100)/256;
  26. TL0=(65536-1100)%256;
  27. TH1=(65536-a*11)/256;
  28. TL1=(65536-a*11)%256;
  29. ET0=1;
  30. TR0=1;
  31. ET1=1;
  32. TR1=1;
  33. }
  34. void T0TIME()interrupt 1
  35. {
  36. abc=1;
  37. TH0=(65536-1100)/256;
  38. TL0=(65536-1100)%256;
  39. }
  40. void T1TIME()interrupt 3
  41. {
  42. abc=0;
  43. TH1=(65536-1100)/256;
  44. TL1=(65536-1100)%256;
  45. }
  46. void yanchi(int a){
  47. int b,c;
  48. for(b=0;b<=a;b++)
  49. for(c=0;c<=110;c++);
  50. }
復(fù)制代碼

第二種實(shí)現(xiàn)方法只用一個定時器來實(shí)現(xiàn)
用一個定時器產(chǎn)生一個確定周期的數(shù)字信號,在其中斷程序中進(jìn)行操作,下面以產(chǎn)生兩路pwm信號來說明。
程序如下
  1. #include<reg52.h>
  2. sbit ja=P1^3;
  3. sbit ja1=P1^4;
  4. void pwmkz(int);
  5. void pwmkz1(int);
  6. void yanchi(int);
  7. int a=0,b=0;
  8. int c=0;
  9. void main(){
  10. int f=0;
  11. TMOD=0x22;
  12. TH0=(65536-11)/256;
  13. TL0=(65536-11)%256;
  14. EA=1;
  15. ET0=1;
  16. TR0=1;
  17. while(1){
  18. f+=5;
  19. if(f==100)
  20. f=0;
  21. pwmkz(f);
  22. yanchi(15);
  23. //pwmkz1(100);

  24. }

  25. }
  26. void pwmkz(int d){
  27. a=d;
  28. }
  29. void pwmkz1(int e){
  30. b=e;
  31. }
  32. void pwmdin()interrupt 1
  33. {
  34.   c++;
  35. TH0=(65536-11)/256;//初值控制中斷周期
  36. TL0=(65536-11)%256;//
  37. if(c==100)//100為控制輸出信號的周期的常量 輸出周期=中斷周期*100(可以改變)
  38. c=0;
  39. if(c<a)//a為第一路的占空比
  40. ja=1;//控制電平
  41. else
  42. ja=0;
  43. if(c<b)//b為第二路占空比
  44. ja1=1;
  45. else
  46. ja1=0;
  47. }
  48. void yanchi(int a){
  49. int b,c;
  50. for(b=0;b<=a;b++)
  51. for(c=0;c<=110;c++);
  52. }
復(fù)制代碼

捕獲3.PNG (22.02 KB, 下載次數(shù): 73)

捕獲3.PNG

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:483579 發(fā)表于 2019-5-12 14:17 來自手機(jī) | 只看該作者
謝謝分享。用兩個定時器怎么輸出占空比和頻率可調(diào)的pwm波呢?加下q27568737747可以嗎?
回復(fù)

使用道具 舉報

板凳
ID:527981 發(fā)表于 2019-5-24 22:48 | 只看該作者
寧小小 發(fā)表于 2019-5-12 14:17
謝謝分享。用兩個定時器怎么輸出占空比和頻率可調(diào)的pwm波呢?加下q27568737747可以嗎?

上面的第二種方式就是兩個同周期定時器,通過控制兩定時器啟動時間差來調(diào)節(jié)占空比,雖然說理論是這樣,但是上面的代碼總是不能輸出正確的pwm波,這個問題我也是很疑惑,你想產(chǎn)生pwm波的話,還是建議采用一個定時器來輸出。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品在线观看网站 | 在线免费观看a级片 | 国产高清一二三区 | 午夜精品一区二区三区三上悠亚 | 亚洲精品第一 | 国产欧美精品在线 | 一级毛片色一级 | 成人国产精品免费观看 | 日本午夜精品一区二区三区 | 日韩伦理一区二区三区 | 91在线免费视频 | 亚洲精品在线视频 | 91精品久久久久久久久中文字幕 | 国产精品久久久久久福利一牛影视 | 亚洲综合日韩精品欧美综合区 | 精国产品一区二区三区四季综 | 久久在线| 亚洲欧美在线观看 | 精品成人av| 亚洲欧美在线观看 | 最新超碰| 欧美专区在线 | 一级在线观看 | 丁香五月网久久综合 | 91在线视频免费观看 | 色婷婷av一区二区三区软件 | 欧美高清视频在线观看 | 一级a性色生活片久久毛片波多野 | 黄篇网址| 日韩精品在线看 | 精品国产亚洲一区二区三区大结局 | 伊人99 | 91精品国产综合久久小仙女图片 | av一二三区 | 国产精品爱久久久久久久 | 欧美理论在线观看 | 成人深夜小视频 | 亚洲精品成人网 | 人人草天天草 | 精品久久久网站 | 亚洲精品区 |