⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 18f_ad.c

📁 PIC18F458的AD采集源程序
💻 C
字号:
//************************************************
//用18f6585写的5通道ad程序,2006-9-22调试通过
//************************************************
#include<p18f6585.h>
#include<math.h>
void Int_tmr0(void);
void ad_init(void);
void initial(void);

int count,res[5];
union adres
{
	int				y1;
	unsigned char	adre[2];
}adresult;//使用联合来存放ad转换的结果

//ad初始化
void ad_init(void)
{
	ADCON0bits.ADON=1;//ad转换器工作
	ADCON1=0x82;//选择5个口均为模拟输入
	PIR1bits.ADIF=0;
	TRISA=0x2f;//RA4为输出,其他均为输入
}
//主程序初始化
void initial(void)
{
	INTCON=0xa0;//开放总中断和T0中断
	INTCON2bits.TMR0IP=1;//tmr0高优先中断
	TMR0L=0x01;
	TMR0H=0x00;//装初值
	T0CON=0x87;//使能tmr0,16位,预分频位256
	TRISB=0;//设置输出为0
	PORTB=0x00;
	count=0;
}


void main(void)
{
	ad_init();
	initial();
	INTCONbits.GIE=1;
	ADCON0bits.GO=1;
	while(1)
	{
	;	
	}
}
#pragma code InterruptVectorHigh=0x08//从中断向量地址跳转的服务程序
void InterruptVectorHigh(void)
{
	_asm
	goto	Int_tmr0//跳转要执行的子程序
	_endasm
}
//定时中断来读取5通道的ad转换值
#pragma code
#pragma interrupt Int_tmr0
void Int_tmr0()
{
	unsigned char	i;
	INTCONbits.TMR0IF=0;//清除中断标志
	for(i=0;i<5;i++)//循环读取5路ad转化值
	{
		ADCON0bits.GO=1;			
		ADCON0=ADCON0||i<<3;
		do{;}
		while(PIR1bits.ADIF==0);
		PIR1bits.ADIF=0;
		adresult.adre[0]=ADRESL;
		adresult.adre[1]=ADRESH;
		adresult.y1=res[i];
	}
	TMR0L=0x01;
	TMR0H=0x00;//装初值

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -