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

单片机AD转换用的这段程序意思是什么,第1张

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

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

STC是10位AD转换,结果存在高八位和低两位两个寄存器里

ADC_RES : 0BDH ;ADC高八位转换结果

ADC_LOW2 : 0BEH ;ADC低二位转换结果

低两位就2位最大就3(11)其余位都是无效的,所以处理时需要做如下处理。

unsigned int res_ad;

res_ad=ADC_RES<<8+ADC_LOW2&0x03;

ORG 0000H

LJMP MAIN

ORG 0013H

LJMP PTM

MAIN: MOV TCON,#04H ;外部中断1设为下降沿触发

SETB EX1 ;开启外部中断1

SETB EA ;开启总中断

MOV A,#0F8H

MOV DPTR,#0EFF8H ;外围口EFF8H

MOVX @DPTR,A ;将F8H送外围口

LOOP: ACALL DALY

MOV A,#0F8H

MOV DPTR,#0EFF8H ;同上

MOVX @DPTR,A ;同上

AJMP LOOP

DALY: MOV R7,#250

DJNZ R7,$

RET

PTM: MOV DPH,#0EFH ;同上同一个外围口

MOVX A,@DPTR ;读取该口的值

MOV P1,A ;送P1(或许是显示吧)

RETI

END

你这个虽然有规律,属于镜像交换,简单移位做不到。

下面用old代表原数,new代表新数

char old,new;//定义两个变量

old=原数; // 将ABCDEFGH赋给old;如:old=0xf0;

new=0;

for(i=0;i<8;i++)

{

new<<=1;

if((old&0x01)==0x01) new|=0x01;

old>>=1;

}

执行后新数new,就是你要的镜像交换的数,这时new就等于HGFEDCBA

用心回答,望你采纳。

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

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

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

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

---------

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

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

以上就是关于单片机AD转换用的这段程序意思是什么全部的内容,包括:单片机AD转换用的这段程序意思是什么、STC单片机内部AD转换的问题、单片机ad转换实验,本人学渣,有程序,但不知道怎么用,明天实验验收求大神等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存