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();
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
gaolf_2012
1楼-- · 2020-02-06 13:36
延时程序如果用休眠,看门狗定时唤醒的方式,那么会降低功耗。
880705lpdhr
2楼-- · 2020-02-06 18:53
mark               
喜羊羊
3楼-- · 2020-02-06 23:35
 精彩回答 2  元偷偷看……
wanggoals
4楼-- · 2020-02-07 04:52
现在有性价比更高的PIC12F1501
liyiui
5楼-- · 2020-02-07 07:54
PIC 的性价比还是高
colin2018
6楼-- · 2020-02-07 10:32
wanggoals 发表于 2016-11-8 17:59
现在有性价比更高的PIC12F1501

PIC12F1501什么价格?

一周热门 更多>