单片机中的AD采样大概是如何用语句实现的 如能贴一段实现的C语言语句最好了。

单片机中的AD采样大概是如何用语句实现的 如能贴一段实现的C语言语句最好了。,第1张

看你用什么芯片了-

但是一般步骤都如下:

1,选择AD通道,也就是选择某一入口(一般有8个入口的,任选一个都可以)

2,设置转换方式,一般有触发转换或者软件转换-(比如C8051F系列带有定时器2定时转换-另一种也可以选择软件转换,就是向BUSY寄存器写1来触发转换等)-

3,选择转换得到的数据是几位,一般都是12位(00 0000 0000)除去后8位是数据,前2位系统自动补0-

4,可选中断-

5,开始转换-(比如用定时器2的话,就直接启动TR2=1就行了-)

6,查询转换结束标志,(或者进入中断)任何单片机AD转换完都有转换结束标志的-

7,读取转换得到的数值,一般都会有两个寄存器分别存有高位和低位的-

8,保存好数值!结束-

-

51的目前我在用,关系到机密,就不发代码给你了!

发一个以前我实验时候写的ARM7给你吧!

/-------------------------------------------------------------------

ADC初始化

------------------------------------------------------------

1:ADCR

//SEL=1000:选择引脚P030,通道AD03

//CLKDIV=13(55Mhz/45Mhz)

//BURST(位16=0)软件启动,

//CLKS(19-17:000)10位转换,

//START(26-24=001):立即启动,

//EDGE=0:下降启动;

--------------------------------------------------------------------------/

void ADC_Inite()

{

//AD0CR=(1<<27)|(0x01<<24)|(1<<21)|(0x0<<19)|(0x0C<<8)|(0x08);

AD0CR=(0x01<<24)|(1<<21)|(0x0<<19)|(0x0C<<8)|(0x08);

}

/-------------------------------------------------------------------

ADC启动

------------------------------------------------------------------/

#define ADC_Start() AD0GSR|=(0x01<<24)

/-------------------------------------------------------------------

ADC等待

------------------------------------------------------------------/

int ADC_GetValue()

{

//while(((0x01&(AD0GDR<<1))&0x01)==0)

int ax,cx;

cx=0x0000F000;

do{

ax =AD0GDR;

cx--;

}while(((ax&0x80000000)==0)&&cx);

return (ax>>6)&0x3FF;

}

把300V电压,接到两个的电阻分电路上,电阻串联有分压作用。一端接地的电阻上分压为0~5V,假如电阻取10K,那么大电阻就应该是590K。电压分压比为300/5=60倍,所以,用AD采集0~5V电压,得到数字量,换算成电压为Ⅴd,再计算出被测电压Vx=60Vd。所以,写程序很简单,主要是A/D转换程序并转换为电压Vd。

你的开发板上的单片机是STC89C52,这个89系列的单片机是没有内部A/D电路的,要进行AD采集电压,要外配A/D转换芯片,这AD芯片不同,采集的程序就不同的。

如下图所示,STC89系列单片机的内部配置,画红杠一列AD为空。

STC单片机从STC12系列开始才有内部AD电路的,你可以换一个STC12C5A60S2的单片机,带有内部AD的,可以替换你开发板上的STC89C52,这样,就可以用来练习A/D转换程序了。至于串口发送程序,你前面已经提问过了,那A/D转换程序,去STC官网下载,官网上有很多A/D转的例程,可以下载的。下图就是STC官网的资料目录。

STC单项片机说明文档里有例子

下面是我的采集程序,采三次,求平均值:

void adchange()//AD采集程序,采集3路

{

uchar temp7,temp8,temp9,temp10,temp11,temp12;

uint tempa,tempb,tempc,tempd;

ADC_CONTR=ADC_CONTR|0X80; //10000000 开启转换电源

Delay1ms(1); //延时,等待内部电源稳定

//P1M0=P1M0|0X07; //设置p10 P11和 p13所在通道为开/漏模式

//P1M1=P1M1|0X07;

ADC_CONTR=0xe0; //11100000 开启P10通道开始转换

Delay25us(10); //延时一端时间,使输入电压达到稳定

ADC_DATA =0x00; //清A/D转换结果寄存器

ADC_LOW2 =0x00;

ADC_CONTR |= 0x08; //ADC_START=1,开始转换

while(!(ADC_CONTR&0x10)); //0001,0000 等待A/D转换结束

temp7=ADC_DATA; //读取转换结果

temp8=ADC_LOW2;

ADC_DATA =0x00; //清A/D转换结果寄存器

ADC_LOW2 =0x00;

ADC_CONTR=ADC_CONTR&0xe7; //将ADC_FLAG软件清零

Delay25us(1);

ADC_CONTR |= 0x08; //ADC_START=1,开始转换

while(!(ADC_CONTR&0x10)); //0001,0000 等待A/D转换结束

temp9=ADC_DATA; //读取转换结果

temp10=ADC_LOW2;

ADC_CONTR=ADC_CONTR&0xe7; //将ADC_FLAG软件清零

Delay25us(1);

ADC_DATA =0x00; //清A/D转换结果寄存器

ADC_LOW2 =0x00;

ADC_CONTR |= 0x08; //ADC_START=1,开始转换

while(!(ADC_CONTR&0x10)); //0001,0000 等待A/D转换结束

temp11=ADC_DATA; //读取转换结果

temp12=ADC_LOW2;

ADC_CONTR=ADC_CONTR&0xe7; //将ADC_FLAG软件清零

Delay25us(1);

ADC_DATA =0x00; //清A/D转换结果寄存器

ADC_LOW2 =0x00;

tempa=(temp74+temp8);//真烦人,但必须这么算,一次算会出错

tempb=(temp94+temp10);

tempc=(temp114+temp12);

tempd=tempa+tempb+tempc;

temp1=(tempd+1)/3;

。。。。。。其它两路略

//P1M0=P1M0&0X00; //设置P1口为普通I/O模式,以便用P1口显示数据。

//P1M1=P1M1&0X00;

}

以上就是关于单片机中的AD采样大概是如何用语句实现的 如能贴一段实现的C语言语句最好了。全部的内容,包括:单片机中的AD采样大概是如何用语句实现的 如能贴一段实现的C语言语句最好了。、请问51单片机ad采集电压0-300v降压转变成0-5v范围内,降压部分原理图和程序应该怎么写、stc89c52rc怎么编程利用AD采集电压值串口发送到电脑呢,找不到示例程序,不知道该怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9782905.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存