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转换实验,本人学渣,有程序,但不知道怎么用,明天实验验收求大神等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)