lml198694的笔记 https://bbs.21ic.com/?522233 [收藏] [复制] [RSS] 本博客主要记录学习感悟与经验。欢迎各位的指点与交流啊!!!!!!!!

日志

c8051f330系列单片机AD转换.

已有 2574 次阅读2008-7-21 10:53 |个人分类:51单片机|系统分类:单片机

根据最近自己学习的C8051F330单片机.写了一个关于AD转换的程序,但是在调试的时候,总是发现其精度没有我想象中的高,不知道是不是因为自己所用的万用表不准,还是因为我的基准电压不够,其测试的结果总是比用万用表测试的相差那么0.1V左右.想了好久了,就是没有解决的了啊.我想大概是因为万用表的精度还不过的原因应该是主要原因.呵呵.还是再调试..............


主要是将数据通过串口传到上位机上来显示.


其基本的代码如下:


#include<c8051f330.h>
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);
  }
 }


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (8 个评论)

梦戏相思 2008-10-14 17:39
希望能一起交流, 如果方便请到WWW.XHL.COM.CN;和大家交流,这里高手云集,也有很多新手; 这个网站很好! 顶

QUOTE:
以下为lml198694的回复: [emot]2[/emot]
回复 jacky 2008-12-22 05:28
大哥给我发一个啊!@ 原理图. 谢谢了! 邮箱: yesboys@126.com
梦戏相思 2009-2-24 04:35
收藏!学习学习; 用双斜率可以使AD更精确
梦戏相思 2009-2-24 04:38
不知道可不可以发一份你的,带注解的详细程序给学习学习;可以的话麻烦发一份给我,谢谢!! lyh1127@yeah.net
回复 star1116 2009-3-18 02:36
请问问题解决了没有呀? 你这里为什么发送时间延迟这么久呀?

QUOTE:
以下为lml198694的回复: 我要的A/D的转换速率不需要很快,所以在延时上没有很注意,转换精度跟时延好象没有关系把。


QUOTE:
以下为lml198694的回复: 我要的A/D的转换速率不需要很快,所以在延时上没有很注意,转换精度跟时延好象没有关系把。
komahe 2009-5-28 09:16
请问一下楼主,这ADC和sar时钟有什么关系吗?[emot]7[/emot]
穿越灵魂 2009-7-8 12:37
lz给个原理图吧,谢谢 xdjam@163.com
回复 LG 2009-7-28 06:41
的确是一个好网站,作者的心得对我来说也蛮有用!