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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9363|回復(fù): 5
收起左側(cè)

STC單片機(jī)比較器用作AD例程

[復(fù)制鏈接]
ID:138575 發(fā)表于 2016-12-19 10:56 | 顯示全部樓層 |閱讀模式
STC單片機(jī)比較器用作AD例程
0.png
所有源程序下載:
比較器做AD用.zip (49.18 KB, 下載次數(shù): 123)

部分源碼預(yù)覽:
  1. //工作頻率為20M
  2. #include <STC15F2K60S2.H>
  3. #include <intrins.h>
  4. #include"CMP-AD.H"
  5. #include"math.h"
  6. #define uint unsigned int
  7. #define ulint unsigned long int
  8. #define uchar unsigned char
  9. //對ADC控制寄存器ADC_CONTR進(jìn)行位定義 (ADC_CONTR寄存器不能進(jìn)行位操作)
  10. #define ENABLE_IAP  0x82   //if SYSCLK<20MH
  11. #define ADC_POWER   0x80            //ADC電源控制位
  12. #define ADC_FLAG    0x10            //ADC完成標(biāo)志
  13. #define ADC_START   0x08            //ADC起始控制位
  14. #define ADC_SPEEDLL 0x00            //540個(gè)時(shí)鐘
  15. #define ADC_SPEEDL  0x20            //360個(gè)時(shí)鐘
  16. #define ADC_SPEEDH  0x40            //180個(gè)時(shí)鐘
  17. #define ADC_SPEEDHH 0x60            //90個(gè)時(shí)鐘
  18. #define CH6          6
  19. sfr ADC_LOW2=0XBE;          //ADC低2位結(jié)果
  20. //sbit P_ADC=P3^3;     //定義比價(jià)器的輸出口
  21. sbit P_ADC=P1^4;     //定義比價(jià)器的輸出口
  22. sbit power=P3^3;     //主電源開機(jī)使能位
  23. sbit in_ac=P3^2;     //AC輸入電壓類型 1:AC60V  0:AC90v
  24. sbit smg1=P1^5;
  25. sbit smg2=P1^6;
  26. sbit smg3=P1^7;
  27. uchar ch=0;
  28. uchar i_t2;
  29. uint t0val;                         //定時(shí)器0的初值
  30. uint t2val;          //定時(shí)器2的初值   
  31. uint adc_scal;       //AD量程
  32. uint adc_count;      //比較結(jié)果為高計(jì)數(shù)
  33. uint adc_duty;       //ADC計(jì)數(shù)周期
  34. uint adc_val;        //ADC值
  35. bit  adc_ok;                 //ADC轉(zhuǎn)換完成標(biāo)志
  36. uchar ok_count;      //AD采集次數(shù)
  37. bit  one_ok;         //取樣完成標(biāo)志
  38. ulint val1,val2;     //中間臨時(shí)值
  39. uint rmsval;         //輸入電壓有效值
  40. uchar smgval[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  41. uchar temp[4];
  42. uchar i;
  43. //1ms延時(shí)子程序
  44. void delay(uint x)  
  45. {uint a,b;
  46. for (a=x; a>0;a--)  
  47.   for (b=100;b>0; b--);
  48. }
  49. //AD初始化程序
  50. void intad()
  51. {        ch=0;
  52.     P1ASF = 0x01 ;                  //設(shè)置P1口為AD口
  53.     ADC_RES = 0;                    //清除結(jié)果寄存器
  54.     ADC_CONTR = ADC_POWER | ADC_SPEEDHH | ADC_START | ch;
  55.     delay(2);

  56. }
  57. //讀取AD結(jié)果
  58. int getad()
  59. {ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ch|ADC_START;
  60. _nop_();
  61. _nop_();
  62. _nop_();
  63. _nop_();
  64. while(!(ADC_CONTR&ADC_FLAG)) ;
  65. ADC_CONTR=~ADC_CONTR;
  66. return ((uint)((uint)(ADC_RES<<2)+(uint)(ADC_LOW2)));
  67. }
  68. //主程序初始化
  69. void int_main()   
  70. {
  71. intad();
  72. P3M1=0;
  73. P3M0=0XFF;
  74. P1M1=0;
  75. P1M0=0Xf0;
  76. /////////////
  77. power=0;
  78. in_ac=1;                         //剛上電時(shí)候先關(guān)閉主電源
  79. P5M1=0XFF;
  80. P5M0=0;                                  //P54 P55設(shè)為高阻狀態(tài)
  81. adc_scal=500;                  //AD量程
  82. adc_duty=adc_scal;
  83. //P3M0=0X80;              //P33為強(qiáng)推挽模式  P32為準(zhǔn)雙向口模式
  84. CMPCR1=0;             //比價(jià)器寄存器1初始化
  85. CMPCR2=0;             //比較器寄存器2初始化
  86. CMPCR1&=~PIS;                  //選擇P55腳為比較器的正極輸入端
  87. CMPCR1|= NIS;         //選擇P54腳為比較器的負(fù)極輸入端
  88. CMPCR1&=~CMPOE;                  //禁止比較器的結(jié)果輸出
  89. CMPCR2&=~INVCMPO;          //比機(jī)器結(jié)果正常輸出
  90. CMPCR2|=DISFLT;          //不使能比較器輸出0.1us濾波
  91. CMPCR2&=~LCDTY;       //比較器結(jié)果不去抖 直接輸出
  92. CMPCR1|=CMPEN;        //使能比機(jī)器
  93. t0val=55536;          //定時(shí)器0定時(shí)時(shí)間為0.5ms
  94. t2val=45536;                  //定時(shí)器0定時(shí)時(shí)間為1ms
  95. TH0=t0val>>8;
  96. TL0=t0val;
  97. T2H=t2val>>8;
  98. T2L=t2val;
  99. AUXR=0X94;                           //定時(shí)器0的速度為傳統(tǒng)8051的12倍,即不分頻  允許定時(shí)器2運(yùn)行 速度為1分頻
  100. //IE2|=ET2;             //定時(shí)器2中斷開啟

  101. TMOD=0;               //定時(shí)器0工作模式為16位自動重裝
  102. ET0=1;                                  //允許T0中斷
  103. TR0=1;                //定時(shí)器0使能
  104. PT0=1;                //定時(shí)器0中斷為最高優(yōu)先級中斷
  105. EA=1;                 //開啟總中斷
  106. }
  107. main()
  108. {
  109. int_main();
  110. while(1)
  111. {
  112. //if(adc_ok==1)
  113. {
  114.   adc_ok=0;
  115.   temp[0]=rmsval/100;
  116.   temp[1]=rmsval%100/10;
  117.   temp[2]=rmsval%100%10;
  118. }
  119. P3=smgval[temp[0]];
  120. smg1=1;
  121. delay(5);
  122. smg1=0;
  123. P3=smgval[temp[1]];
  124. smg2=1;
  125. delay(5);
  126. smg2=0;
  127. P3=smgval[temp[2]];
  128. smg3=1;
  129. delay(5);
  130. smg3=0;

  131. }
  132. }
  133. //定時(shí)器中斷0入口
  134. void t0() interrupt 1
  135. {

  136. ulint ls1,ls2,ls3;
  137.   i_t2++;
  138. ls1=getad();
  139. ls2=ls1*ls1;
  140. val1=val1+ls2;
  141. if(i_t2>=200)
  142. {
  143.   i_t2=0;
  144.   ls3=sqrt(val1/200);
  145.   val1=0;
  146.   rmsval=ls3*90/594          ;
  147. }

  148. }



復(fù)制代碼


相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2017-1-3 02:07 | 顯示全部樓層
51黑有你更精彩!!
回復(fù)

使用道具 舉報(bào)

ID:202142 發(fā)表于 2017-5-18 13:02 | 顯示全部樓層
感謝分享~~~~
回復(fù)

使用道具 舉報(bào)

ID:155467 發(fā)表于 2021-10-4 17:27 | 顯示全部樓層
樓主,你的getad() 函數(shù)里面用的都是stc自帶的ADC功能,而不是用比較器進(jìn)行adc轉(zhuǎn)換。
回復(fù)

使用道具 舉報(bào)

ID:973749 發(fā)表于 2022-1-13 22:48 | 顯示全部樓層
代碼好亂啊,分幾個(gè)模塊吧
回復(fù)

使用道具 舉報(bào)

ID:1092895 發(fā)表于 2023-10-11 20:43 | 顯示全部樓層
根本不是利用比較器實(shí)現(xiàn)ADC
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 男女羞羞视频网站 | 久久97精品 | 欧美视频三区 | 成人一区二区在线 | 一级爱爱片| 久久国产区 | 国内精品久久久久 | 国产不卡视频 | 毛片免费看的 | 三级av网址 | 国产精品入口麻豆www | 91免费视频| 看一级毛片 | 亚洲男人天堂网 | 性高湖久久久久久久久 | 国产在线不卡视频 | 日韩精品在线播放 | 一区二区三区欧美在线 | 亚洲不卡 | dy天堂| 国产一区二区三区免费视频 | 久久99国产精一区二区三区 | 国产精品久久久久久久久图文区 | 欧区一欧区二欧区三免费 | 精品久久国产 | 国产一区黄色 | a级免费黄色片 | 欧美视频一区二区三区 | 99视频入口 | 久久天堂网 | 亚洲综合首页 | 久久网国产 | 欧美激情一区二区三区 | 亚洲一区二区三区 | 日韩欧美在线观看 | 色婷婷国产精品 | 希岛爱理在线 | 免费av手机在线观看 | 91免费视频| 免费麻豆视频 | 欧美精品久久久久 |