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

📄 em78p372n_ad_int.c

📁 义隆EM78P372N资料
💻 C
字号:
//**************************************************************************
//以下的程序是用中断方式实现P50的AD转换,并把转换的结果存储在 
//D_ADDATAL和D_ADDATAH中,采用内部VDD作为参考电压。
//**************************************************************************
//MCU:EM78P372N
//Oscillator:IRC 4MHz
//Clock:2
//WDT: Disable
//编译软件:eUIDE version 1.02.09.07

#include "EM78P372N.H"       //EM78P372N的头文件
#define DISI()  _asm{disi}
#define WDTC()  _asm{wdtc}
#define NOP()   _asm{nop}
#define ENI()   _asm{eni}
#define SLEP()   _asm{slep}
#define uchar  unsigned char
unsigned int D_ADDATA1H  @0X20:bank 0;
unsigned int D_ADDATA1L  @0X21:bank 0;
void AD_CALI_P(void);
extern int IntVecIdx; //occupied 0x10:rpage 0
void main()
{

	WDTC();
	DISI();
	SCR=0X7F;					//选择主频,4MHz
	P5CR=0XFF;					//P50设为输入
	AISR=1;						//P50/ADC0引脚作为ADC0输入口
	ADCON=0X08;					//打开AD电源,并选择ADC0输入口
	AD_CALI_P();				//调用AD子程序
	WDTCR|=0X20;				//使能AD中断
	ENI();
	ADRUN=1;					//使能AD转换
	while(1);
	
	
}
void AD_CALI_P()
{
	unsigned char cnt;
	cnt=0x07;
	ADOC=0XF8;				//使能ADC位校正功能
	do
	{
		ADRUN=1;			//开始AD转换
		while(ADRUN==1);	//等待AD转换完成
		cnt--;
		if(!SIGN)			//offset 负电压
		{
		 	ADOC+=0X08;
		}
		else 				//offset 正电压
		{
		 	ADOC-=0X08;
		}
		if(cnt==0)
		{
			cnt=0x07;
			if(SIGN)
			{
				ADOC=0X80;
			}
			else
			{
				CALI=0;
			}
		}
	}while((ADDATA1H||ADDATA1L)&&CALI);
	CALI=0;		
}
void _intcall ALLInt(void) @ int 
{     
  switch(IntVecIdx)
  {
    case 0xD:
    if	(ADIF==1)
    {
    	ADIF=0;
    	D_ADDATA1H=ADDATA1H;
		D_ADDATA1L=ADDATA1L;		//保存AD转换值
	}
    break;
  } 	
}



void _intcall ADC_l(void) @ 0x0C:low_int 3
{
 _asm{MOV A,0x2};
}

⌨️ 快捷键说明

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