论坛风格切换切换到宽版
  • 7655阅读
  • 5回复

请给一个STC12C2052AD单片机AD转换的C程序 [复制链接]

上一主题 下一主题
离线bg2gc
 
发帖
971
只看楼主 倒序阅读 0楼 发表于: 2008-06-17
请给一个stc12c2052ad单片机ad转换的c程序
  厂家给的手册上只有stc12c2052ad单片机ad转换的汇编程序,哪位老师请给一个stc12c2052ad单片机ad转换的c程序
  谢谢               bg2gc/3
离线bd7bq
发帖
1491
只看该作者 1楼 发表于: 2008-06-17
unsigned char read_adc(unsigned char channel)
{
     //将p1.0--p1.1设置成适合ad转换的模式
     adc_contr = adc_contr|0x80;           //1000,0000打开a/d转换电源
     delay_10ms(2);                   //20ms
     adc_contr = adc_contr&0xe0;           //1110,0000 清adc_flag,adc_start位和低3位
     adc_contr = adc_contr&0xf8|channel;     //设置当前通道号
     delay_10ms(1);                   //延时使输入电压达到稳定
     adc_data = 0;                   //清a/d转换结果寄存器
      adc_contr = adc_contr|0x08;           //0000,1000adcs = 1,启动转换
     do { ; } while((adc_contr & 0x10)==0);   //0001,0000等待a/d转换结束
     adc_contr = adc_contr&0xe7;           //1110,0111清adc_flag和adc_start位,停止a/d转换
     return adc_data;
}

main()里要加上设置adc的端口,如)1.0,p1.1设为adc口的话:
     p1m0 = 0x03;             //0000,0011用于a/d转换的p1.x口,先设为开漏
     p1m1 = 0xc3;             //0000,0011p1.0--p1.1先设为开漏。断开内部上拉电阻
离线bg2gc
发帖
971
只看该作者 2楼 发表于: 2008-06-17
感谢bd7bq老师的答复
73!
离线BG4VEO
发帖
68
只看该作者 3楼 发表于: 2008-06-17
记号一下,stc的这款是几位的ad?
离线bg2gc
发帖
971
只看该作者 4楼 发表于: 2008-06-18
离线小比尔/5
发帖
2582
只看该作者 5楼 发表于: 2008-06-18
这是我写的:
调用法:val=getadval(通道号);
转换前要先初始化。初始化函数为:initadc();

#include "stc12c5410ad.h"

#define uchar unsigned char

void initadc();
uchar getadval(uchar);

void initadc()
{
     uchar i,j;
     adc_contr|=0x80;
     for(i=20;i>0;i--) for(j=250;j>0;j--);
}

uchar getadval(uchar ch)
{
     uchar lastp1m0,lastp1m1,i,m_mask;
     code uchar mtab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
     lastp1m0=p1m0;
     lastp1m1=p1m1;
     ch&=0x07;
     m_mask=mtab[ch];
     p1m0|=m_mask;
     p1m1|=m_mask;
     adc_contr&=0xf0;
     adc_contr|=ch;
     for(i=250;i>0;i--);      //待输入电压稳定后开始转换
     adc_contr|=0x08;
     while((adc_contr&0x10)==0);
     adc_contr&=0xe7;
     p1m0=lastp1m0;
     p1m1=lastp1m1;
     return adc_data;
}