pic12f675 ADC程序弄疯了,还是没有调通,谁有例程的给个啊,谢谢

2019-03-25 18:55发布


MPLAB X IDE 环境,编译器用xc8
pic12f675 芯片
GP1用作ADC输入,下面的程序调了3天没调通,返回的数据总是0或者0xffff,不知道问题在哪了
unsigned int ADCRead()
{
    unsigned int temp;
    ADON=1;
    GO_nDONE=1;  //adc start
    while(GO_nDONE);
    temp=ADRESH<<8+ADRESL;
    return(temp);
}

void ADCInit()
{
   TRISIO1=1;//ADC  //GP1输入
    ADCON0=0b10000100;    //右对齐,AN0
    ANSEL =0b00010010;     //Fosc/8
}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
foxpro2005
1楼-- · 2019-03-26 01:44
呵呵,我有12F683的, 很多年之前写的, 一个综合强大的例程
dingzy_2002
2楼-- · 2019-03-26 05:23
本帖最后由 dingzy_2002 于 2015-3-11 10:46 编辑

首先这句:temp=ADRESH<<8+ADRESL;要强制转换成int格式的
我给个例程吧(这是PIC16F887的):
/*---------------------------------------------
函数名: uint16_t adc10_conv(uint8_t ad_ch)
描述: AD转换函数(10位结果)
输入: 要进行转换的通道
输出: 转换后的数据
---------------------------------------------*/
uint16_t adc10_conv(uint8_t ad_ch)
{
uint16_t ad_value;        
ADFM  = 1;  //结果右对齐
ADCON0  =  ad_ch; //
ADON  = 1;  //打开AD模块
delay_5us;
GO  =  1;   //启动转换
while(GO) ;  //等待转换完成
GO  =  1;   //启动转换
while(GO) ;  //等待转换完成
ADON  = 0;  //关闭AD模块
ad_value = (uint16_t)(ADRESL | (ADRESH << 8));   //注意是10位的转换精度 value、temph应为unsigned int 变量
return(ad_value);
}
gmgmgm
3楼-- · 2019-03-26 05:39
dingzy_2002 发表于 2015-3-11 10:45
首先这句:temp=ADRESH
谢谢了,问题解决了,中间增加延时就一切OK了



fengqiang
4楼-- · 2019-03-26 07:20
 精彩回答 2  元偷偷看……
小@小哒哒何
5楼-- · 2019-03-26 12:22
你那边有pic12f675芯片的下载接口原理图吗?能给我传一份不?谢谢楼主了!857256004@qq.com这是我的邮箱 谢谢
woaieew
6楼-- · 2019-03-26 14:27
很好的例子 我也准备用PIC12F675 学习了 谢谢

一周热门 更多>