当前位置:
文档之家› STC单片机AD转换程序设计
STC单片机AD转换程序设计
}
b A c1G J+j p h L0ADC_CONTR &= 0xF7; //1111,0111令ADC_START = 0,关闭A/D转换,电子爱好者社区V q3O.I Z T
return (ADC_DATA); //返回A/D转换结果
Z ^ R#E$h0}
X1x A n,f I*L"R+q L9M0电子爱好者社区!L U)X O z M \ w `
//断开P1.0,P1.1内部上拉电阻
8W | K N q;K R? ?1{&E0while(1)电子爱好者社区8L-[;t [9R v
{电子爱好者社区5b L r h O }4B
get_AD_result(0);
7q4` p [*u x ~ I0delay(200);电子爱好者社区6K s)@ X:] F
void main()
F C'l4H \+u!F;L k v0{
M [:h W ?1m @)y x0P1 = P1 | 0x03; // 0000,0011,P1.0,P1.1为A/D转换,即通道0与1
&E R5x#c G v)m @0P1_ADC_EN = 0x03; //0000,0011, P1的P1.0,P1.1设置为A/D转换输入脚电子爱好者社区P;i s V0o c m\ w
$O Q#N/`#l:E&K I0#define uint unsigned int ;
6D5Y t C(j m%b d7n3b ? w0void delay(uchar delay_time) //延时函数电子爱好者社区:^2L+n Y T7w5?*[
{
R"r%v K)]*h l \ i2h0uchar n;
sfr ADC_DATA = 0来自C6; //A/D转换结果寄存器
f/j V d:g8l J0sfr P1M0=0x91;电子爱好者社区$K"r.e,v y q
sfr P1M1=0x92;电子爱好者社区:h(l3x w I%v*C | q4M
#define uchar unsigned char ;
get_AD_result(1);电子爱好者社区5L M/L0{8v,N1R8]
delay(200);
\6` ~-u h A G Y q%a w0}
V M l H5y H z o8z n0}
#include <reg52.H>电子爱好者社区,@3s w)[%N a
#include <intrins.H>电子爱好者社区+[$o2C r R M F W f6o
sfr P1_ADC_EN = 0x97; //A/D转换功能允许寄存器
] _ f+Q w1Z0sfr ADC_CONTR = 0xC5; //A/D转换控制寄存器电子爱好者社区z8N K M A S |
电子爱好者社区(Q _4t#x&m O c ?
uchar get_AD_result(uchar channel)电子爱好者社区3O p8~ ] { K _
{电子爱好者社区p z K2^ n'p
uchar AD_finished = 0; //存储A/D转换标志电子爱好者社区0` R:?,y;A N/}.k q z
E&S.X G:t V0uint m;
P,s { z q j0for (n=0;n<delay_time;n++)电子爱好者社区+i/Q D/X!C+u"E*A Z
{
t m y m X I+b0for(m=0;m<10000;m++);
0d p v x O O k+u B0}
p/k(j _5` g+e.k0}电子爱好者社区,v o N [3e l9_
ADC_DATA = 0;电子爱好者社区K5f [ x {-q Y$S%}0S+L2v
ADC_CONTR = channel; //选择A/D当前通道电子爱好者社区c$M2F w#a e Y
delay(1); //使输入电压达到稳定
%B2}+})Q1i L1i n'_/Z0ADC_CONTR |= 0x08; //0000,1000令ADC_START = 1,启动A/D转换电子爱好者社区5@ w(~!Y r2t u"B
AD_finished = 0;电子爱好者社区d l d W+Q2s xh)M
while ( AD_finished == 0 ) //等待A/D转换结束
z m @ b q b$J a0{电子爱好者社区z g [&p,y/l K F
AD_finished = (ADC_CONTR & 0x10); //0001,0000, ADC_FLAG ==1测试A/D转换结束否电子爱好者社区Y K+`/]'R-I