gagaguojia 发表于 2012-3-26 14:47:45

PIC12F675----8管脚单片机的ad转换小程序

将GPIO0采集电压通过ad转换成8位2进制数,其中高4位用连接在管脚GPIO1 2 4 5上的led显示出来

//引用头文件
#include<pic.h>

//符号变量替换
#define         u8                 unsigned char
#define         u16         unsigned int

//用c语言嵌套汇编来实现 “喂狗”
#defineclrwdt()   asm("CLRWDT")

//全局变量声明
u8 ad_jieguo;
void yanshi(void)//延时子函数
{
        u8i;
        u16 j;
        for(j=500;j>0;j--)
        {
                for(i=100;i>0;i--)
                {
                        clrwdt();
                }
        }       
}

void yanshi1(void)//延时子函数
{
        u8k;       
        for(k=20;k>0;k--)
        {
                clrwdt();
        }
       
}

void init(void)
{
        CMCON=0X07;//比较器关闭
        ANSEL=0X01;//GP0为模拟输入 设GP1到GP3都为数字IO口
        ADCS0=1;//A/D转换时钟设为 内部专用时钟
        ADCS1=1;
        OPTION=0X80;//禁止GPIO上拉
        TRIS0=1;//GP0口设为输入
        TRIS1=0;
        TRIS2=0;
        TRIS4=0;
        TRIS5=0;
        ADFM=0;//AD结果左对齐
       
       
}

u8 run_ad(void)
{
        ADON=1;//开启转换器 开始采样
        yanshi1();
        GODONE=1;
        while(GODONE==1)
        {
                ;
        }
        return ADRESH;       
}

void led_xianshi(void)
{
        ad_jieguo=ADRESH>>4;
        GPIO=~( ((ad_jieguo&0x01)<<1) | ( (ad_jieguo&0x02) <<1) |( (ad_jieguo&0x04)<<2) |( (ad_jieguo&0x08)<<2));       
}

void main(void)
{
        init();//初始化
        while(1)//循环
        {
                run_ad();
                led_xianshi();
                yanshi();
        }
}

gaolf_2012 发表于 2012-3-26 20:13:48

延时程序如果用休眠,看门狗定时唤醒的方式,那么会降低功耗。

880705lpdhr 发表于 2013-7-29 09:08:30

mark               

喜羊羊 发表于 2016-11-3 20:58:58

顶起,正需要,感谢分享。

wanggoals 发表于 2016-11-8 17:59:34

现在有性价比更高的PIC12F1501

liyiui 发表于 2016-11-9 15:26:43

PIC 的性价比还是高

colin2018 发表于 2016-11-9 15:28:54

wanggoals 发表于 2016-11-8 17:59
现在有性价比更高的PIC12F1501

PIC12F1501什么价格?

wanggoals 发表于 2016-11-9 16:50:47

colin2018 发表于 2016-11-9 15:28
PIC12F1501什么价格?

立创商城就有售,百片以上2.7
页: [1]
查看完整版本: PIC12F675----8管脚单片机的ad转换小程序