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

2020-02-06 10:00发布

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

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

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

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

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

void yanshi1(void)  //延时子函数
{
        u8  k;       
        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();
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。