您的位置 首页 解答

巧设pic877a单片机的AD转化模块

//由于AD采样的值不断地变化,我们用C语言的关键词volatile来定义AD采样过程的临时变量。volatileunsignedintad0_res,ad1_res,ad2_…

//因为AD 采样的值不断地改变,咱们用C言语的关键词volatile来界说AD采样进程的暂时变量。

volatile unsigned int ad0_res,ad1_res,ad2_res=0;//寄存AD初始化值

//下面临其进行初始化,为了具有统一性,我将RA、RE口均进行初始化。

/**********************************************************
*AD成果为10位精度,从0-1023、
*在使用时必设定ADCON1=0X80;存贮方式为((ADRESH<<8)+(ADRESL)).
*AD通道的挑选是从0开端的如:0->RA01->RA1 ….6->RE2.7->RE3
***********************************************************/

void
ad_init (void)
{
INTCON = 0X00;
ADIF = 0X00;
ADCON1 = 0x80;
ADCON0 = 0X81; //十位成果有必要高为8位
TRISA = 0X0FF;//默以为AD输入

TRISE= 0X0FF;//默以为AD输入
PORTA = 0X00;
ADON = 1;
}

//这是一个延时函数

void
delay(unsigned int x)
{
unsigned int a, b;
a = (2*x/8);
for(a; a>0; a–);
for(b=5; b>0; b–);
}

//下面这个函数便是详细采样AD的成果值,它一个很好的妙用

unsigned int //回来一个整型值
read_ADresult(unsigned char channel)//通道转化
{
channel &= 0x07;// 读出当时通道的值
ADCON0 &= 0x85;// 清一切通道
ADCON0 |= (channel<<3);//10 xxx 001 将当时通道对应的值赋予ADCON0
delay(30);
ADGO = 1;
while(ADGO) continue;
return(ADRESH << 8)+(ADRESL);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/252392.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部