发新帖我要提问
123
返回列表
打印
[PIC®/AVR®/dsPIC®产品]

急:救助大神 PIC16F886

[复制链接]
楼主: TANGS
手机看帖
扫描二维码
随时随地手机跟帖
41
TANGS 发表于 2014-4-23 10:10
= = 好像很少用PIC16F886的

你qq是多少

使用特权

评论回复
42
TANGS|  楼主 | 2014-4-23 10:57 | 只看该作者
wangtao478552 发表于 2014-4-23 10:53
你qq是多少

452680703

使用特权

评论回复
43
wangtao478552| | 2014-4-23 11:07 | 只看该作者
/*引脚:
*      RA0即AN0配置为模拟输入,接力传感器
*      RA3即AN3配置为模拟输入,接红外传感器
*      RB4配置为数字输出,接LED灯
*/
#include<pic.h>

#define uchar unsigned char
#define uint unsigned int

void Init();             //IO口初始化函数
void Ad_Init();         //ADC初始化函数
uint DataProces();     //数据处理函数

void main()
{
        uint    vf=0,vr=0;

        Init();
        Ad_Init();

        ADCON0bits.GO=1;        //启动第一次AD转换

        while(1)
        {
            while(PIR1bits.ADIF==0);    //等待ADC转换完成
            PIR1bits.ADIF=0;            /*ADC中断标志位清零*/

            switch (ADCON0bits.CHS)                     //判断是哪个通道转换完成
            {
                case 0:                                    //如果是AN0通道
                       vf=DataProces();                     //力传感器电压mV
                       ADCON0bits.CHS=0x03;                //配置到AN3通道
                       break;
                case 1: break;
                case 2: break;
                case 3:                                 //如果是AN3通道
                       vr=DataProces();                 //红外传感器电压值mV
                       ADCON0bits.CHS=0x00;            //配置到AN0通道
                       break;
            }

            if(vf<=1600 && vr<=38)            //对两个电压值mV进行判定
            {
                RB4=1;                         //点亮LED
            }
            else
                RB4=0;                         //熄灭LED

            ADCON0bits.GO=1;                        //启动AD转换
        }
}

void Init()//输出io口初始化
{
        TRISBbits.TRISB4=0;               /*设置RB4为输出*/
        ANSELHbits.ANS11=0;               /*设置AN11为数字通道*/
}

void Ad_Init()//ad转换IO寄存器设置
{
        TRISA|=0x09;                /*设置RA0,RA3为输入*/
        ANSEL|=0x09;                /*设置RA0,RA3为模拟通道*/
        ADCON0=0x41;                //Fosc/8,ADON,AN0
        ADCON1=0x00;                //结果左对齐,参考电压为VDD,VSS   
        PIR1bits.ADIF=0;            /*ADC中断标志位清零*/
}

uint DataProces()//把AD采样值处理为电压值(mV)
{
    uint temp=0;
    float v=0;

    temp=ADRESH;                      //从ADC中取出12位的采样值
    temp=(temp<<2)+(ADRESL>>6);
    v=(float)(temp+1)/204.8;          //采样值转换成电压V
    v=v*1000;                         //将电压值转换为mV单位

    return (int)v;
}

使用特权

评论回复
44
grasswolfs| | 2014-4-23 12:02 | 只看该作者
TANGS 发表于 2014-4-23 10:10
= = 好像很少用PIC16F886的

除了包含一个头文件,C和单片机型号关系不大啊,16F877系列的

使用特权

评论回复
45
TANGS|  楼主 | 2014-4-23 12:05 | 只看该作者
grasswolfs 发表于 2014-4-23 12:02
除了包含一个头文件,C和单片机型号关系不大啊,16F877系列的

那个MPLAB好像不包含它的头文件。。。然后我不会找。。。

使用特权

评论回复
46
grasswolfs| | 2014-4-23 12:06 | 只看该作者
TANGS 发表于 2014-4-23 12:05
那个MPLAB好像不包含它的头文件。。。然后我不会找。。。

为什么要选型选这个,应该是有开发板吧?开发板里面的资料找找啊

使用特权

评论回复
47
grasswolfs| | 2014-4-23 12:06 | 只看该作者
TANGS 发表于 2014-4-23 12:05
那个MPLAB好像不包含它的头文件。。。然后我不会找。。。

哪个版本的MPLAB,编译提示什么?

使用特权

评论回复
48
TANGS|  楼主 | 2014-4-23 12:16 | 只看该作者
grasswolfs 发表于 2014-4-23 12:06
哪个版本的MPLAB,编译提示什么?

我下载了V8 跟 X IDE 两个 就是老师让我去网上找那种现有的代码运行 然后我没看到跟我用同一个PIC的,我就把里面别人PIC的代号给换了。。。 然后好像就是提示没说没检测到我指定要用PIC16F886好像是这样吧。。。

使用特权

评论回复
49
grasswolfs| | 2014-4-23 12:56 | 只看该作者
乱,你自己都理不清,帮不了你

使用特权

评论回复
50
aiyaxiansheng| | 2014-4-24 15:34 | 只看该作者
说实话,不懂

使用特权

评论回复
51
chenyu988| | 2014-4-28 14:27 | 只看该作者
我现在有个项目居然要用pic basic语言编写,更无语

使用特权

评论回复
52
TANGS|  楼主 | 2014-4-29 09:33 | 只看该作者
chenyu988 发表于 2014-4-28 14:27
我现在有个项目居然要用pic basic语言编写,更无语

你姓xiong吗

使用特权

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

本版积分规则