最近有个项目要用到PIC10F222这个芯片,本来以为这个料很简单的,现在确卡在AD转换这里,发出来请坛子的兄弟帮忙看看怎么回事。
功能描述,芯片采集一个模拟电压值,这个值的范围大概是0.3V-5V之间,当采集的值小于1.8V时,驱动一个电机,当大于2.8V时,关闭电机。现在通电之后模拟输入量接AN1,并且在AN1能测得有2.0V以上的电压,可是芯片采集到的电压经过换算大概只有0.6V,也就是这个芯片的内部绝对参考电压值。以下是程序:
void Initialization(void)//初始化程序
{
OPTION = 0XC7; //时钟分频比1:256。
TRIS = 2; //GP1使能模拟输入
ANS0 = 0; //数字输出
ANS1 = 1; //模拟输入
CHS1 = 1; //选择1号通道
TMR0 = 0;
}
void delay (void)//延时程序
{
if(TMR0>=250)//64ms延时
{
TMR0 = 0;
AD_FLAG = 1;//64MS转换一次
}
}
void AD_OPEN (void)//AD转换程序
{
if(AD_FLAG)//AD转换标示位
{
AD_FLAG = 0;//清零标志位
AD_OVER_FLAG = 1;//AD转换开启标志位
ADON = 1;
GO = 1;
}
if(AD_OVER_FLAG)//AD转换开启标志位
{
if(!GO)
{
AD_TEMP = ADRES;//AD转换结果保存
AD_OVER_FLAG = 0;//AD转换开启标志位清零
MOTO_OPEN_FLAG = 1;//电机控制标志位
}
}
}
void MOTO_OPEN (void)//电机控制程序
{
if(MOTO_OPEN_FLAG)
{
MOTO_OPEN_FLAG = 0;
if(AD_TEMP <=90)
{
MOTO_OUT = 1;
}
if(AD_TEMP >=150)
{
MOTO_OUT = 0;
}
}
main()
{
Initialization();//初始化程序
while(1)
{
delay ();//延时程序
AD_OPEN ();//AD程序
MOTO_OPEN ();//电机控制程序
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我前面已经选择了CHS1 = 1,也就是说我已经选择了1号通道。
谢谢,现在好了,正确的用法应该是,CHS1 = 0,CHS0 = 1;.
一周热门 更多>