单片机做AD转换时双极性信号程序怎么处理

单片机做AD转换时双极性信号程序怎么处理,第1张

有些AD转换器,带有参考电压的输入端。

正确输入参考电压,该AD转换器就可以把负~正的电压,转换成二进制数字。

有些AD转换器,只能转换固定范围内的电压,那么就必须在前端电路中想办法。

加个运算放大器,就可以把电压的“放大”到所需要的电压范围,再AD转换即可。

---------

看来,你的AD转换器,能够正常进行转换,只是你的程序功能不足,不能正常处理“负”的重量。

那就修改程序呗,这还不是很容易理解的事。

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

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

同学,你的问题有问题

你是想问STC系列单片机的AD问题还是串口问题

你上面这段程序是51单片机串口初始化程序而不是AD程序。

51单片机串口初始化为

void COM_Init(void)

{

SCON = 0x50;

TMOD &= 0x0F;

TMOD |= 0x20;

PCON |= 0x80;

TH1 = 0xFD;

ES=1;EA=1;

TR1 = 1;

TI = 1;

}

AD转换程序

//定义与ADC有关的特殊功能寄存器

sfr ADC_CONTR =0xC5;

sfr ADC_DATA =0xC6;

sfr ADC_LOW2 =0xBE;

sfr P1M0 =0x91;

sfr P1M1 =0x92;

sbit p20 =P2^0;

void STC90CxxAD_delay(int timer) //延时函数

{

while(timer--);

}

int Ad_Change(char channel) //AD转换

{

int AD_Result_Temp = 0 ;

P1 = 0xff; //将P1口置高,为A/D转换作准备

ADC_CONTR = ADC_CONTR|0x80; //1000,0000打开A/D转换电源

P1M0 = 0x03; //0000,0011用于A/D转换的P1x口,先设为开漏

P1M1 = 0x03; //0000,0011P10--P11先设为开漏。断开内部上拉电阻

STC90CxxAD_delay(20); //20

ADC_CONTR = ADC_CONTR&0xE0; //1110,0000 清ADC_FLAG,ADC_START位和低3位

ADC_CONTR = ADC_CONTR|(channel); //设置当前通道号

STC90CxxAD_delay(1); //延时使输入电压达到稳定

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

ADC_LOW2 = 0;

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位,停止A/D转换

AD_Result_Temp = ((AD_Result_Temp|ADC_DATA)<<2)|(ADC_LOW2&0x03);

//保存返回AD转换的 结果

STC90CxxAD_delay(1); //

return AD_Result_Temp;

}

已调试通过,望对你有用

以上就是关于单片机做AD转换时双极性信号程序怎么处理全部的内容,包括:单片机做AD转换时双极性信号程序怎么处理、单片机AD转换用的这段程序意思是什么、STC单片机自带AD代码问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/10151648.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存