找回密码
 注册
搜索
查看: 637|回复: 0

[讨论] 发个PIC单片机模拟采集的代码(1)!

[复制链接]
发表于 2009-3-25 20:53:35 | 显示全部楼层 |阅读模式
main.c

//CPU:16F676
//CRSTAL:internal 4M

#include "led.c"
#include "LB_fuc.c"
__CONFIG(0x0194);//配置位的最后3位是晶振输入方式,本例RA4 RA5作为普通引脚,最后3位为100
int AdcIn;
void initadc()
{
//禁用AD转换
ADON=0;
//选择RA0为ad输入端
ANSEL=0x00;
ANS0=1;
CHS2=0;
CHS1=0;
CHS0=0;

//选择采样频率
ADCS2=1;
ADCS1=0;
ADCS0=0;
//参考电压选择
VCFG=0;
//采样结果右对齐
ADFM=1;
//清ADC中断标志
ADIF=0;
//使能ADC中断
ADIE=1;
//开启ADC
ADON=1;
//外设中断使能  一定要要,请看中断原理图
PEIE=1;


}

void initport()
{
//不启用timer1
TMR1ON=0;

//比较器关断,这3位影响RA1  RA2  RA3是否可作为数字IO引脚
CM2=1;
CM1=1;
CM0=1;

//RA1   RA4  RA5  数字输出引脚
TRISA1=0;
TRISA4=0;
TRISA5=0;

RA1=0;
RA4=1;
RA5=1;

//PORTC 数字输出引脚
TRISC=0x00;
PORTC=0x00;
}

void init_device()
{
di();
//GIE=0;//关全局中断             
initadc();
initport();
ei();
//GIE=1;//开全局中断      
}
#pragma interrupt_level 1
interrupt ADC_INT()
{
unsigned char tmp;
ADIF=0;
AdcIn=ADRESL;            //先读低8位,非常重要
tmp=ADRESH;
AdcIn|=(int)tmp << 8; //读高2位,左移8位放入变量中
}


unsigned char CalAnToPercent(int AVIN)
{
unsigned char tmp;
int tmp1;
if (AVIN>1024) AVIN=1024;

tmp1=AVIN*25/256;
tmp=(unsigned char)tmp1;
return tmp;

}

void main(void)
{
int LBVal;
init_device();
init_LBBuf();
init_LED();
GODONE=1;//启动一次AD转换
//NumToBuf(120);
while(1)
{
di();
  LBVal=LB_Fuc(AdcIn);
ei();
NumToBuf(CalAnToPercent(LBVal));
    Dispaly();
   GODONE=1;//启动一次AD转换
}
}
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-8 06:21 , Processed in 0.044740 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表