打印
[点读笔/故事机应用]

两个pic16f877a的ad转换的C程序

[复制链接]
1792|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhouhuanの|  楼主 | 2016-7-16 13:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,下面是两个pic16f877a的ad转换的C程序:
void STACKC()   //  current sampling
{
    int stackc_i=6;
    ADCON0=0x81;
    for(; stackc_i>0; --(stackc_i))
    {
        ;
    }
    ADGO=1;
    while(ADGO==1)
    {
        ;
    }

    STACK_CO=STACK_C;
    STACK_C=ADRESH;
    if(STACK_CO==0)STACK_C= STACK_C;
    else  STACK_C= STACK_C*0.25+ STACK_CO*0.75;
}


void STACKC()
{
    unsigned char i=0;
    int temp_stackc[10],min=0,max=0,SUM=0;
    while(i<10)
    {
        ADCON0=0x81;

        delay30us() ;
        ADGO=1;
        while(ADGO==1)
        {
            ;
        }
        temp_stackc[i]= ADRESH;
        if(i==0)
        {
            min=temp_stackc[0];
            max=temp_stackc[0];
            SUM=temp_stackc[0];
        }
        else
        {
            min=(temp_stackc[i]<min ?temp_stackc[i]:min);
            max=(temp_stackc[i]>max ?temp_stackc[i]:max);
            SUM=SUM+temp_stackc[i];
        }
        i++;
    }
    STACK_C =(SUM-max-min)/8;
}

请问这两个函数有啥区别吗?是不是第二个有了一个滤波的,第一个没有滤波??谢谢!!
沙发
bbapple| | 2016-7-16 14:03 | 只看该作者
这两个函数都做了一定的软件滤波处理算法,但实际能否达到有效的滤波效果则不得而知。

使用特权

评论回复
板凳
handleMessage| | 2016-7-16 14:05 | 只看该作者
我觉得这这需要根据你自己的要求去确定吧、

使用特权

评论回复
地板
wanglaojii| | 2016-7-16 14:11 | 只看该作者

ADGO=1;
    while(ADGO==1)
    {
        ;
    }

使用特权

评论回复
5
laozhongyi| | 2016-7-16 14:13 | 只看该作者
wanglaojii 发表于 2016-7-16 14:11
ADGO=1;
    while(ADGO==1)
    {

不建议这样死等,可以先做点别的事再去判断么。

使用特权

评论回复
6
zhouhuanの|  楼主 | 2016-7-16 14:18 | 只看该作者
laozhongyi 发表于 2016-7-16 14:13
不建议这样死等,可以先做点别的事再去判断么。

难道要在中断里实现啊??

使用特权

评论回复
7
zhouhuanの|  楼主 | 2016-7-16 14:18 | 只看该作者
还有个问题,为什么在程序里没有见到ADRESL位的数据呢?难道强制采用ADRESH用作8位的了?

使用特权

评论回复
8
_gege| | 2016-7-16 14:21 | 只看该作者
zhouhuanの 发表于 2016-7-16 14:18
还有个问题,为什么在程序里没有见到ADRESL位的数据呢?难道强制采用ADRESH用作8位的了? ...

10位的取高字节作为8位用的吧。。

使用特权

评论回复
9
Mozarts| | 2016-7-16 14:27 | 只看该作者
zhouhuanの 发表于 2016-7-16 14:18
难道要在中断里实现啊??

不需要中断啊,你可以做些别的什么事,比如说,调用一个函数,回头再过来等,这样就可以节省一些时间,可以处理一些事情了呀。

使用特权

评论回复
10
Listate| | 2016-7-16 14:29 | 只看该作者
做一个AD需要十几、几十微秒时间,这个浪费了太可惜。

使用特权

评论回复
11
zhouhuanの|  楼主 | 2016-7-16 14:34 | 只看该作者
Listate 发表于 2016-7-16 14:29
做一个AD需要十几、几十微秒时间,这个浪费了太可惜。

不过现在暂时还用这个,公司里有测试过的。

使用特权

评论回复
12
zhouhuanの|  楼主 | 2016-7-16 14:35 | 只看该作者
非常感谢大家给出的宝贵意见,多谢了。

使用特权

评论回复
13
zhouhuanの|  楼主 | 2016-7-19 19:46 | 只看该作者
bbapple 发表于 2016-7-16 14:03
这两个函数都做了一定的软件滤波处理算法,但实际能否达到有效的滤波效果则不得而知。 ...

可以模拟测试看看啊。

使用特权

评论回复
14
zhouhuanの|  楼主 | 2016-7-19 19:46 | 只看该作者
handleMessage 发表于 2016-7-16 14:05
我觉得这这需要根据你自己的要求去确定吧、

恩 这个可能真的不是很好说明白的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

1557

帖子

2

粉丝