PIC单片机C语言程序设计(14)
TRISA=0X07;
ADCON0=0X81;// 打开通道0 作数据采样
PORTA=0XFF;
ADRESH=0;
ADRESL=0;// 转换结果寄存器清零
INTCON=0x00;// 关闭所有中断
GIE=1;// 打开总中断
PEIE=1;// 打开第一外围中断
ADIE=1;// 打开AD 中断
ADIF=0;// 清除AD 中断标志位
}
以下是中断服务函数:
void interrupt AD(void)
{
unsigned int ad_1=0;
// 定义一个ad 转换结果寄存器
if(k16)
{
ADIF=0; // 清楚AD 标志位
ad_1=(ADRESH0X03)*256+ ADRESL;
// 读取AD 转换结果
ad_sum=ad_sum+ad_1;
k++;
if(k16)
ADGO=1; // 启动AD
}
if(k==16)
{
ad_1=ad_sum/16;
if( b>16)
{
if(ad_1>ad_temp)
ad_1=ad_1-ad_temp;
else if(ad_1ad_temp)
ad_1=ad_temp-ad_1;
else if(ad_1==ad_temp)
ad_1=0;
AD_
value=(float)(ad_1);
}
d=1;
ad_sum=0;
k=0;
if(b32)
{
b++;
ADGO=1;
}
if(b==15)
ad_temp=ad_1;
}
}
上述A/D 转换的C 程序,初学时有些难度,但结合A/D 转换相关的专用寄存器功能,也不难理解的,待下次连载15,笔者对A/D 转换方法,还有一些说明的,读者可以关注。
评论