stc12c5a60s2单片机自带的ad转换怎么使用,没财富了。20财富奖励
看那手册理解不了啊,能给个编程的思路吗,比如说先初始化P1口,然后做什么。。然后又做什么。。。还有一个问题就是,比如说我要用P10口接线出来测电压,然后我想把测到的电压转...
看那手册理解不了啊,能给个编程的思路吗,比如说先初始化P1口,然后做什么。。然后又做什么。。。
还有一个问题就是,比如说我要用P10口接线出来测电压,然后我想把测到的电压转换之后通过P2口输出,接到LED,应该怎么编程。。。
哪个chs0 chs1 chs2 这三个通道的选择 跟P1ASF有什么关联。。。。混乱啊现在。急需大神帮助 展开
还有一个问题就是,比如说我要用P10口接线出来测电压,然后我想把测到的电压转换之后通过P2口输出,接到LED,应该怎么编程。。。
哪个chs0 chs1 chs2 这三个通道的选择 跟P1ASF有什么关联。。。。混乱啊现在。急需大神帮助 展开
1个回答
展开全部
chs0 chs1 chs2,是三位二进制数,0~7,对应P1口的引脚号P1.0~P1.7,如P1.1作模拟量输入,则 chs2 chs1 chs0 =001,这是在启动转换和读转换结果时要写到ADC_CONTR寄存器的值。
而P1ASF是用8个位对应每个引脚,则P1ASF=0000 0010,即P1.1作模拟量输入。
想把测到的电压转换之后通过P2口输出,接到LED,是想用8个LED显示吗,这显示的是8位二进制数,而A/D转换的结果是10位二进制数,即是00 0000 0000~11 1111 1111,对应的十进制数是0-1023。所以,最好还是用4位数码管直接显示这十进制数更直观。
做A/D转换时,先初始化P1ASF寄存器。
实现A/D转换要写一个子程序:
unsigned int adc_in(unsigned char n)//n为模拟量输入位通道值,即chs2 chs1 chs0
三位二进制数的值,0~7
{ ADC_CONTR = 0xe8 + n; //启动转换,设置转换速度
while((ADC_CONTR&0x10)==0) ; //等待转换结束
return(ADC_RES*4+ADC_RESL); //读转换结果
}
子程序返回无符号的整形数,即转换结果。
再定义转换结果的变量:
unsigned int ADCX;
在主程序中调用:
ADCX=adc_in(n); //这个n 就是chs2 chs1 chs0的值
调用子程序后得到的转换结果就在ADCX中。
而P1ASF是用8个位对应每个引脚,则P1ASF=0000 0010,即P1.1作模拟量输入。
想把测到的电压转换之后通过P2口输出,接到LED,是想用8个LED显示吗,这显示的是8位二进制数,而A/D转换的结果是10位二进制数,即是00 0000 0000~11 1111 1111,对应的十进制数是0-1023。所以,最好还是用4位数码管直接显示这十进制数更直观。
做A/D转换时,先初始化P1ASF寄存器。
实现A/D转换要写一个子程序:
unsigned int adc_in(unsigned char n)//n为模拟量输入位通道值,即chs2 chs1 chs0
三位二进制数的值,0~7
{ ADC_CONTR = 0xe8 + n; //启动转换,设置转换速度
while((ADC_CONTR&0x10)==0) ; //等待转换结束
return(ADC_RES*4+ADC_RESL); //读转换结果
}
子程序返回无符号的整形数,即转换结果。
再定义转换结果的变量:
unsigned int ADCX;
在主程序中调用:
ADCX=adc_in(n); //这个n 就是chs2 chs1 chs0的值
调用子程序后得到的转换结果就在ADCX中。
更多追问追答
追问
能加个QQ吗457308895 热心的朋友
追答
都给你这么多的内容了,还不理解呀。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询