c8051f330系列单片机AD转换作者lml198694日期2008-7-2110:53:002推荐根据最近自己学习的C8051F330单片机写了一个关于AD转换的
c8051f330系列单片机AD转化. 作者 lml198694 日期 2008-7-21 10:53:00
依据最近自己学习的C8051F330单片机.写了一个关于AD转化的程序,但是在调试的时分,总是发现其精度没有我幻想中的高,不知道是不是由于自己所用的万用表禁绝,仍是由于我的基准电压不行,其测验的成果总是比用万用表测验的相差那么0.1V左右.想了好久了,便是没有解决的了啊.我想大约是由于万用表的精度还不过的原因应该是主要原因.呵呵.仍是再调试…………..
主要是将数据经过串口传到上位机上来显现.
其根本的代码如下:
#i nclude
typedef unsigned char uint8;
#define clk 24500000
sfr16 adc0=0xbd;
void delay(uint8 time)
{
uint8 i;
while(–time)
{
for(i=0;i<125;i++);
}
}
void systemclk(void)
{
RSTsrc=”/0X04″;
OSCICN=0X83;
}
void port(void)
{
P0MDOUT=0X30;
P1MDIN=0x00;
XBR0=0X01; //将发送位设置为推挽输出。
XBR1=0X40;
}
void timer(void)
{
TMOD = 0x20;
CKCON = 0X00; //体系时钟12分频。 波特率为9600
TH1 = 0x96;
}
void uart(void)
{
SCON0=0X10;//承受答应。
}
void AD_start(void)
{
ADC0CN=0X00; //选用AD0BUSY发动。
REF0CN=0X0b; //选用内部基准电压VDD. // REF0CN=0X03;
AMX0P=0X08; //P1.0口采样。
AMX0N=0X11;//单端输入方法。
ADC0CF=((clk/3000000)-1)<<3;//设置SAR时钟为3M。
ADC0CF |=0X00; //设置为右对齐状况。
AD0EN=1; //AD转化为活泼状况。
}
void begin(void)
{
systemclk();
port();
timer();
uart();
AD_start();
}
void main(void)
{
PCA0MD &=~0x40;
PCA0MD =0X00;
begin();
TR1=1;
TI0=0;
AD0INT=0; //清零。
while(1)
{
AD0BUSY=1;
while(AD0INT==0);
ADC0H &=0X03;
SBUF0=ADC0H;
while(TI0==0);
TI0=0;
delay(200);
SBUF0=ADC0L;
while(TI0==0);
AD0BUSY=0;
TI0=0;
delay(200);
}
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/261014.html