3671|6

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

PIC单片机两路模拟量编程求助 [复制链接]

哪位大神能帮忙给个PIC单片机两路模拟量的编程例子学习一下啊,谢谢

最新回复

tWord adc10_conv(tByte ad_ch)  详情 回复 发表于 2016-12-30 22:12
点赞 关注
 

回复
举报

5221

帖子

239

TA的资源

管理员

沙发
 
帮你呼叫丁丁版主
@dingzy_2002
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

637

帖子

2

TA的资源

版主

板凳
 
要汇编的还是C的?
一、汇编例程(PIC16F883):
①主程序(节选自我自己的一款车用仪表程序)
;-----------------
;油量AD转换及累加
        MOVLW        FUEL_CH       
        CALL        AD_CONV
        ADDWF        FUEL_DA_COMPL        ;数据与上50MS平均数据进行平均
        MOVFW        ADRESH
        BTFSC        STATUS,C
        INCF        ADRESH,W
        ADDWF        FUEL_DA_COMPH
        RRF        FUEL_DA_COMPH
        RRF        FUEL_DA_COMPL

        MOVFW        FUEL_DA_COMPL        ;平均后的数据进行累加
        ADDWF        FUEL_DAL
        MOVFW        FUEL_DA_COMPH
        BTFSC        STATUS,C
        INCF        FUEL_DA_COMPH,W
        ADDWF        FUEL_DAH
②子程序
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
;32微秒延时,并开启AD转换,检测AD转换成功子程序
;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
AD_CONV:        MOVWF        ADCON0
        BSF        ADCON0,ADON
        CLRF        R7
        DECFSZ        R7
        GOTO        $-1
        BSF        ADCON0,GO_DONE
        BTFSC        ADCON0,GO_DONE
        GOTO        $-1
        BSF        STATUS,RP0
        MOVFW        ADRESL
        CLRF        STATUS
        BCF        ADCON0,ADON
        RETURN
 
 
 

回复

637

帖子

2

TA的资源

版主

4
 
本帖最后由 dingzy_2002 于 2016-8-25 09:28 编辑

二、C语言版:
①运算函数
void        ad_opt(void)
{
        uint8_t        ang_da,comp_da,ang_value=0,count;
        uint16_t        i;
//油量AD转换并累加:
        i=adc10_conv(fuel_ch);
        fuel_data_add+=i;
        if(fuel_ad_max                 fuel_ad_max=i;
        if(fuel_ad_min>i)
                fuel_ad_min=i;
}
②子函数:
/*---------------------------------------------
        函数名:        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)        ;                //等待转换完成
        ADON                =        0;                //关闭AD模块

        ad_value        = (uint16_t)(ADRESL | (ADRESH << 8));   //注意是10位的转换精度 value、temph应为unsigned int 变量
        return(ad_value);
}
/*---------------------------------------------
        函数名:        uint16_t adc8_conv(uint8_t ad_ch)
        描述:        AD转换函数(8位结果)
        输入:        要进行转换的通道
        输出:        转换后的数据
---------------------------------------------*/
uint8_t        adc8_conv(uint8_t ad_ch)
{
        ADFM                =        0;                //结果左对齐
        ADCON0         =         ad_ch;        //
        ADON                =        1;                //打开AD模块
        delay_5us;
        GO         =         1;                        //启动转换
        while(GO)        ;                //等待转换完成
        ADON                =        0;                //关闭AD模块
        return(ADRESH);
}
/*---------------------------------------------*/
/*文件结束*/
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

5
 
我这个程序可以显示两路AD采集,希望对你有所帮助

pic-adc-chenggong-liangluxianshi.rar

1.79 MB, 下载次数: 54

 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢分享!正在学习.....
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

7
 
tWord adc10_conv(tByte ad_ch)
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表