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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

利用STC12LE5404AD單片機(jī)的AD和定時(shí)器輸出頻率和占空比可調(diào) 附視頻

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:94955 發(fā)表于 2018-11-11 10:20 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
題目:利用STC12LE5404AD單片機(jī)的AD和定時(shí)器輸出頻率和占空比可調(diào)。
功能:當(dāng)調(diào)節(jié)頻率時(shí),占空比不變;調(diào)節(jié)占空比時(shí),頻率不變。
輸出范圍:10~500Hz , 5%~95%
電路描述:
      1、手里現(xiàn)有STC12LE5204AD,所以使用它。要借鑒的朋友,根據(jù)自己的單片機(jī)資源調(diào)整;
      2、現(xiàn)成的晶振頻率為18.432MHz。根據(jù)自己手里的晶振使用,不需要通訊的話,可以使用12MHz或者24MHz的晶振,好計(jì)算周期。
      3、使用單片機(jī)的A/D采樣口為P1.6和P1.7端口(可以自己選擇)。使用精密電位器,兩個(gè)固定端,一個(gè)接地,一個(gè)3.3V電源;可調(diào)端接一個(gè)0.1uF的電容對地,然后通過一個(gè)2kΩ電阻接入單片機(jī)A/D采樣端口。
      4、P3.7口輸出(方波自己布PCB線路,可以自己選擇輸出口)

使用A/D采樣的值(0~FF)去改變定時(shí)器的值實(shí)現(xiàn)占空比和頻率調(diào)節(jié)。

最終性能有一點(diǎn)偏差,調(diào)節(jié)頻率時(shí),占空比有小范圍波動。代碼總長度為0E78H。望各位大俠勿噴,求指點(diǎn)迷津。

單片機(jī)源程序:
  1. #include "reg51.h"

  2. #include "intrins.h"
  3. #define FOSC    18432000L

  4. typedef unsigned char BYTE;
  5. typedef unsigned int WORD;

  6. sfr ADC_CONTR   =   0xBC;           //ADC control register
  7. sfr ADC_RES     =   0xBD;           //ADC high 8-bit result register
  8. sfr ADC_LOW2    =   0xBE;           //ADC low 2-bit result register
  9. sfr P1ASF       =   0x9D;           //P1 secondary function control register
  10. sfr AUXR        =   0x8e;
  11. sbit out=P3^7;
  12. //sbit led1=P1^5;
  13. /*Define ADC operation const for ADC_CONTR*/
  14. #define ADC_POWER   0x80            //ADC power control bit
  15. #define ADC_FLAG    0x10            //ADC complete flag
  16. #define ADC_START   0x08            //ADC start control bit
  17. #define ADC_SPEEDLL 0x00            //420 clocks
  18. float i=100,j=100;
  19. float k=0,d,f,t,t1,t2;
  20. WORD xms;
  21. void InitADC();
  22. void SendData(BYTE dat);
  23. BYTE GetADCResult(BYTE ch);
  24. void Delay(WORD n);
  25. void ShowResult(BYTE ch);
  26. void Timer0Init();
  27. void Delay_xms(WORD xms);
  28. void main()
  29. {
  30.     InitADC();                      //Init ADC sfr
  31.   out=1;
  32.     while (1)
  33.     {
  34.         ShowResult(6);              //Show Channel6
  35.         ShowResult(7);              //Show Channel7
  36.     i = GetADCResult(6);
  37.     f = GetADCResult(7);
  38.      _nop_();                        //Must wait before inquiry
  39.          _nop_();
  40.    if(i<15) i=15;
  41.    else if(i>240) i=240;
  42.    if(f<5) f=5;
  43.    else if(f>240) f=250;
  44.          _nop_();
  45.          _nop_();
  46.    t=256/f;
  47.    d=i/256;
  48.    t1=d*t*100;
  49.    t2=(1-i/256)*t*100;
  50.        _nop_();                        //Must wait before inquiry
  51.          _nop_();
  52.   
  53.          _nop_();
  54.          _nop_();
  55.     out  =1;
  56.     Delay_xms(t1);
  57.     out = 0;
  58.     Delay_xms(t2);
  59.   
  60.    
  61.     }
  62. }
  63. BYTE GetADCResult(BYTE ch)
  64. {
  65.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
  66.     _nop_();                        
  67.     _nop_();
  68.     _nop_();
  69.     _nop_();
  70.     while (!(ADC_CONTR & ADC_FLAG));
  71.     ADC_CONTR &= ~ADC_FLAG;      
  72.     return ADC_RES;               
  73. }

  74. void InitADC()
  75. {
  76.     P1ASF = 0xc0;                   //Open 8 channels ADC function
  77.     ADC_RES = 0;                    //Clear previous result
  78.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
  79.     Delay(2);                       //ADC power-on and delay
  80. }
  81. void SendData(BYTE dat)
  82. {
  83.     while (!TI);                    //Wait for the previous data is sent
  84.     TI = 0;                         //Clear TI flag
  85.     SBUF = dat;                     //Send current data
  86. }
  87. void Delay(WORD n)
  88. {
  89.     WORD x;
  90.     while (n--)
  91.     {
  92.         x = 5000;
  93.         while (x--);
  94.     }
  95. }
  96. void Timer0Init(void)  //1????@18.432MHz
  97. {
  98. AUXR &= 0x7F;
  99. TMOD &= 0xF0;  
  100. TMOD |= 0x01;
  101. TL0 = 0x00;
  102. TH0 = 0xFA;
  103. TF0 = 0;
  104. TR0 = 1;
  105. }
  106. void Delay_xms(WORD xms)
  107. {
  108.     WORD nms;
  109.   nms=xms*140;
  110.   while (nms--)
  111.     {
  112.        Timer0Init();
  113.     }
  114. }
復(fù)制代碼



全部資料51hei下載地址:
視頻.rar (10.77 MB, 下載次數(shù): 14)

評分

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

查看全部評分

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频一区在线观看 | 日韩不卡一区二区 | 亚洲中午字幕 | 亚洲国产成人精品久久久国产成人一区 | 4h影视| 国产激情一区二区三区 | 观看av | 久久久久久久久国产成人免费 | 中文字幕精品一区二区三区在线 | 黄色片在线网站 | 亚洲一区在线日韩在线深爱 | 日本不卡免费新一二三区 | 亚洲第一视频网站 | 午夜国产一级片 | 久久精品99国产精品 | 毛片一区 | 国产天天操 | 成人免费在线观看 | 中文字幕av在线 | 欧美激情在线一区二区三区 | 国产99免费 | 天天欧美 | 嫩草影院网址 | 2018国产精品 | 国产精品区一区二 | 国内精品久久精品 | 91精品国产综合久久久久 | 亚洲人在线 | 国产又色又爽又黄又免费 | 中文字幕亚洲一区二区va在线 | 亚洲精品视频在线播放 | 中文字幕在线一区二区三区 | 成年人在线观看 | 欧美久久一区 | 狠狠艹 | 亚洲欧美国产毛片在线 | 中文字幕一区在线观看视频 | 福利网站在线观看 | 国产精品亚洲视频 | 色888www视频在线观看 | 久久久一区二区三区 |