打印
[PIC®/AVR®/dsPIC®产品]

PIC_AD采集求助

[复制链接]
807|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hyx728920|  楼主 | 2016-4-14 19:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是程序内容:

#include <pic.h>

#define RLY_UP GPIO4
#define RLY_DOWN GPIO2
#define UP_IN GPIO5
#define DOWN_IN GPIO3
#define AUTO GPIO1

__CONFIG(0x3FC4);

unsigned char ADC ()
{
    unsigned char ADH,ADL,AD_value;
        char i = 0;
        ADCON0 = 0x1; //结果左对齐,VDD参考电压,ANS0模拟输入,并开启AD转换器         
        for (i=0;i<25;i++)        //采样延时
        {}
        GO = 1;         //开始AD转换
    while(GO);         //等待转换结束
        ADCON0 = 0;         //关闭AD转换器并停止转换
    ADH=ADRESH;                //取得高8位
        ADL=ADRESL;                //取得低8位
    AD_value=(ADH<<2)+(ADL>>6);                //计算结果并存入 AD_value
    return AD_value;                //返回AD_value的值
}

void main (void)
{       
        unsigned char va;
        CMCON = 0x07;        //关闭比较器
        ANSEL = 0x31;        //内部RC,AN3设置为模拟量输入,其它为数字IO
        TRISIO = 0x2B;        //0/2入其它输出
        RLY_UP = 0;
        RLY_DOWN = 0;        //初始化端口

        T0CS = 0;//时钟选择(内部指令周期时钟CLKOUT)
        PSA = 0;  //将预分频器分配给TMR0
        PS2 = 1;
        PS1 = 1;
        PS0 = 1;  //分频比设置为1:256
        T0IE = 1;//开TMR0中断

while (1)
        {
        va = ADC ();                //调用ADC函数
        if (va>16)
                {
                RLY_UP = 0;
                RLY_DOWN = 0;
                        }

        if (UP == 0)
                {
                RLY_UP = 1;
                while (UP == 0);
                        }

                }       

}
UP按键按下RLY_UP=1,一直按着一直输出1,若va>16则RLY_UP=0.请教各位前辈该如何实现,小弟是初学。
如何在不使用AD中断的情况下实时查询AD值,上面的程序如果UP按键一直按着,就会一直输出RLY_UP=1,出不来了。
沙发
robin_chen559| | 2016-4-14 20:29 | 只看该作者
要不加个定时器计算次数吧

使用特权

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

本版积分规则

2

主题

4

帖子

0

粉丝