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

📄 ad.c

📁 PIC19F946下的AD测试程序
💻 C
字号:
/*流程:
1. 配置A/D 模块:
? 配置模拟/ 数字I/O (通过ANSEL 寄存器)
? 配置参考电压(通过ADCON0 寄存器)
? 选择A/D 输入通道(通过ADCON0 寄存器)
? 选择A/D 转换时钟(通过ADCON1 寄存器)
? 使能A/D 模块(通过ADCON0 寄存器)
2. 需要时,配置A/D 中断:
3. 等待所需的采集时间。
4. 启动转换: 将GO/DONE 位(ADCON0<1>)置1
5. 等待A/D 转换完成 查询GO/DONE 位是否被清零(禁止中断);
6. 读取一对A/D结果寄存器(ADRESH:ADRESL),
7. 如需再次进行A/D 转换,根据需要返回步骤1 或
步骤2。将每位的A/D 转换时间定义为TAD,在
下一次采集开始前至少需要等待2 个TAD。
*/
#include <pic.h>
union adres
{
  int y1;
  unsigned char adre[2];
}adresult;					//定义一个共用体,用于存放A/D转换的结果

unsigned char AD_Flag=0;
unsigned char AD_Delay_count=0;
int sampletime; 
int idlenop;
int flag;
#define ad_finish ADCON0&&0b00000010
//系统各I/O口初始化子程序
void initial()
{
	TRISB=0x00;
    PORTB=0X00;
}
//A/D转化初始化子程序
void ad_init()
{
	TRISA0=1;				 //设置RA0为输入方式
    ANS0=1;             	 //RCS
	
	ADCON0 = 0x01;             //OPEN AD CHANGE  左对齐,参考电压Vcc  使能 Ad
	ADCON1=0b01100000;			//转换结果右移,及ADRESH寄存器的高6位为"0"  最高采样频率  fosc/64
	ADIE=0;				     //inhabit	A/D转换中断允许
	ADIF=0;

}
void Deal_AD()
{
   adresult.adre[0]=ADRESL;
   adresult.adre[1]=ADRESH;	//读取并存储A/D转换结果,A/D转换的结果通过共
       						//用体的形式放入了变量y1中   
//	if(adresult.y1>0x90)
	PORTB=ADRESL;				
}

void main()
{
di();
  ad_init();
 ei();
 for(sampletime=0;sampletime<=100;sampletime++)
		    {
		    	idlenop=0;
		    } 

  while(1)
    {
	   

		ADCON0=ADCON0|0X02;      //start AD conversion
	    while(GODONE==1);
        Deal_AD();

        for(sampletime=0;sampletime<=1000;sampletime++)
		       {
		        idlenop=0;
		       }
		      ADCON0=ADCON0|0X02;//间隔一定时间启动AD采样,间隔时间是不使AD采样过于频繁 
    }

CMCON0=0x07;    //关闭比较器
ANSEL=0x0;      //选择porta为数字IO口
TRISA0=0;
RA0=0;



}

⌨️ 快捷键说明

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