导航:首页 > 操作系统 > 单片机ad转换的程序

单片机ad转换的程序

发布时间:2025-03-26 07:08:00

⑴ STC12C5A60S2 AD转换,转换结果怎么算

在使用STC12C5A60S2单片机进行AD转换时,需要将转换结果整合起来。我们首先定义一个int类型的变量a,将ADC_RES的值赋给a,即a = ADC_RES。

由于ADC_RES是高位,而低两位存储在ADC_RESL中,因此需要将a左移两位,操作为a <<= 2。接下来,我们需要将ADC_RESL中的低两位合并到a中。首先,从ADC_RESL中提取低两位,存储在一个char类型的变量b中,即b = ADC_RESL & 0x03。

最后,我们将b的值加到a中,即a += b。此时,a的值即为AD转换的结果,总共10位。

10位的最大值是1023,对应数模转换参考电压的高电平,而0则对应低电平。例如,如果参考电压是5V,当读取到a = 1023时,这意味着采样得到的电压为5V。通过这种比例关系,可以计算出采样电压的具体值。

括号内的内容在STC手册中很常见,用于表示该值具有8位,序号从0到7。这意味着在处理AD转换结果时,需要仔细考虑位移和合并的过程。

⑵ 单片机AD转换用的这段程序意思是什么

ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch ;//开始转换

这是用STC单片机内部A/D转换电路进行A/D转换时,要给A/D控制寄存器ADC_CONTR写启动转换命令,ADC_CONTR是ADC控制寄存器,其中的每一位的作用见下图,而这行语句前面肯定要有定义每一位状态的语句,或用#define宏定义了各位的值。

⑶ 单片机AD和DA转换具体过程是怎么样的

单片机的AD转换过程是将模拟信号转换为数字信号。比如,以8位的AD转换为例,假设输入范围为0~5V,那么这5V会被划分为256份,每份的电压值为5/256V,大约为0.0195V。这也就是AD转换的精度。因此,最小一份的电压为0.0195V左右。如果输入信号为5V,那么它将占据256份中的全部份额,AD转换后输出的数字信号为16进制的0xff。

如果输入信号为3.1V,那么它将占据的份数为3.1除以每份5/256,结果大约为158.72份。由于AD转换器只能输出整数,因此输出结果为158份,即0x9e。由此产生的误差约为0.72份,即0.72*5/256V,大约为0.014V左右。

当AD转换器的位数增加至10位时,每份的电压值将变为5/1024V,精度大幅提高。DA转换过程则是将数字信号转换为模拟信号。其原理与AD转换类似,只是方向相反。不明白的地方可以继续提问。

⑷ 请教stc自带ad的51单片机的使用方法

#include<reg52.h>#include<intrins.h>
#define uchar unsigned char#define uint unsigned int
sfr ADC_CONTR = 0xbc; //ADC控制寄存器
sfr ADC_RES = 0xbd; //ADC转换结果高八位寄存器
sfr ADC_LOW2 = 0xbe; //ADC转换结果低两位寄存器
sfr P1ASF = 0x9d; //P1口模拟功能控制寄存器

#define ADC_POWER 0x80 //ADC电源控制位
#define ADC_FLAG 0x10 //ADC结束标志位
#define ADC_START 0x08 //ADC启动标志位
#define ADC_SPEEDLL 0x00 //540个时钟周期
#define ADC_SPEEDL 0x20 //360个时钟周期
#define ADC_SPEEDH 0x40 //180个时钟周期
#define ADC_SPEEDHH 0x60 //90 个时钟周期

void InitUart();
void SendData(uchar);
void Delay(uint n);
void InitADC();

uchar ch=0; //ADC通道选择
void main()
{
InitUart(); //初始化串口
InitADC(); //初始化ADC
IE = 0xa0; //打开总中断

while(1);}
/*ADC中断函数*/
void ads_isr() interrupt 5 using 1
{
ADC_CONTR&=!ADC_FLAG; //将ADC结束标志位清零

SendData(ch); //将对应ADC通道号发送给电脑 SendData(ADC_RES); //将转换结果发送给电脑
if(++ch > 7)ch = 0; //下一个ADC通道 ADC_CONTR = ADC_POWER|ADC_SPEEDLL|ADC_START|ch; //打开ADC电源、转换时间540个时钟周期、开始转换、选择通道号
}
/*初始化ADC寄存器*/
void InitADC()
{
P1ASF = 0xff; //定义p1口为ADC转换口
ADC_RES = 0;
ADC_CONTR = ADC_POWER|ADC_SPEEDLL|ADC_START|ch; //打开ADC电源、转换时间540个时钟周期、开始转换、选择通道号
Delay(2); //等待ADC上电稳定然后开始ADC转换?应该是先开电源,等待后再START,可能STC官方程序有问题
}

/*初始化串口*/
void InitUart()
{
SCON = 0x5a;
TMOD = 0x20;
TH1 = 0xfd; //在11.0592MHZ晶振下,波特率为9600
TL1 = 0xfd;
TR1 = 1;
}

/*串口发送数据*/
void SendData(uchar dat)
{
while(!TI);
TI = 0;
SBUF = dat;
}

/*延时函数*/
void Delay(uint n)
{
uint x;

while(n--)
{
x=5000;
while(x--);
}
}

注释原创

阅读全文

与单片机ad转换的程序相关的资料

热点内容
气球和粘土能做什么解压东西 浏览:781
wow正在登录服务器怎么回事 浏览:237
注册苹果id连接服务器出现问题什么意思 浏览:247
python学习udp 浏览:513
androidbinapk 浏览:122
pythonhtml图表 浏览:417
深航app买完票怎么选座位 浏览:726
中国建行信用卡app怎么看额度 浏览:574
idl代码编译多个文件 浏览:477
pythonc50 浏览:302
cs15控制命令 浏览:942
java坐标距离 浏览:126
新版安卓系统有什么功能 浏览:723
命令行参数空格 浏览:455
qtcreator编译库怎么添加库 浏览:656
安卓往上滑怎么变成好看的 浏览:272
下载的压缩文件用什么打开最好 浏览:35
磁盘加密容量变小怎么办 浏览:297
秦pdf 浏览:975
相对突出的区块链数据加密系统 浏览:930