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

📄 sample.c

📁 Infineon单片机XC164CMADC模数转换模块和定时器中断例程
💻 C
字号:
#include "MAIN.H"
#define MaxChannel 12
unsigned int Setaimadcdata[MaxChannel]={0};
unsigned int StartTimerPoint[MaxChannel]={0};
unsigned int EndTimerPoint[MaxChannel]={0};
unsigned int   EvDelayTimer[MaxChannel][40]={0};

unsigned int  AimEvDelayTimer[MaxChannel]={0};
unsigned int bdata EvDelayTimerOnOutPutBit[MaxChannel]={0};
unsigned int EvOutPutBitReal[MaxChannel]={0};

unsigned int EvDelayTimerOnSet[MaxChannel]={0};
unsigned int AimEvDelayTimerOnSet[MaxChannel]={0};

unsigned int AdcDataOnDelayTimer[MaxChannel]={0};
unsigned int AdcDataOnBit[MaxChannel]={0};

	unsigned char i,j,k;
	unsigned int  testdata;

	sbit OutPutBit_VE1 = EvDelayTimerOnOutPutBit[0] ^ 0;  
	sbit OutPutBit_VE2 = EvDelayTimerOnOutPutBit[1] ^ 0;  
	sbit OutPutBit_VE3 = EvDelayTimerOnOutPutBit[2] ^ 0;  
	sbit OutPutBit_VE4 = EvDelayTimerOnOutPutBit[3] ^ 0;  
	sbit OutPutBit_VE5 = EvDelayTimerOnOutPutBit[4] ^ 0;  


	sbit OutPutBit_VE6 = EvDelayTimerOnOutPutBit[5] ^ 0;  
	sbit OutPutBit_VE7 = EvDelayTimerOnOutPutBit[6] ^ 0;  
	sbit OutPutBit_VE8 = EvDelayTimerOnOutPutBit[7] ^ 0;  
	sbit OutPutBit_VE9 = EvDelayTimerOnOutPutBit[8] ^ 0;  
	sbit OutPutBit_VE10 = EvDelayTimerOnOutPutBit[9] ^ 0;  
	sbit OutPutBit_VE11 = EvDelayTimerOnOutPutBit[10] ^ 0;  
	sbit OutPutBit_VE12 = EvDelayTimerOnOutPutBit[11] ^ 0;  
	
void InitSampleAllData()
{
	for(i=0;i<MaxChannel;i++)
	{
		 Setaimadcdata[i]=0;
		StartTimerPoint[i]=0;
		AimEvDelayTimer[i]=100;//20 ==1ms
		EvOutPutBitReal[i]=0;

		EvDelayTimerOnSet[i]=0;
		AimEvDelayTimerOnSet[i]=20;//20 ==1ms

		AdcDataOnDelayTimer[i]=0;
		AdcDataOnBit[i]=0;
		EvDelayTimerOnOutPutBit[i]=0;
		for(j=0;j<40;j++)
			EvDelayTimer[i][j]=0;
	}



}
void SampleAllCH()
{
ALARMLED2=!ALARMLED2;
	ADC_CIC_IR=0;
	ADC_vConfConvSingleMode(0);
	ADC_vStartConv();
	for(i=0;i<8;i++)
	{
		
		while(!ADC_CIC_IR);
		testdata=ADC_DAT;
		ADC_CIC_IR=0;
		ADC_vConfConvSingleMode(i+1);
		ADC_vStartConv();
		testdata=testdata&0x0ff0;
		testdata=testdata>>4;
	
		if(testdata>Setaimadcdata[i])
		{
			if(AdcDataOnBit[i]==0)
			{
				EvDelayTimer[i][EndTimerPoint[i]]=0;
				EndTimerPoint[i]++;
				AdcDataOnBit[i]=1;
				if(EndTimerPoint[i]>30&&StartTimerPoint[i]>0)
				{
					PSW_IEN        =  0;  //关中断
					EndTimerPoint[i]=EndTimerPoint[i]-StartTimerPoint[i];
					for(k=0;k<EndTimerPoint[i];k++)
					{
						EvDelayTimer[i][k]=EvDelayTimer[i][StartTimerPoint[i]+k];
						
					}
					StartTimerPoint[i]=0;
					PSW_IEN        =  1;//开中断
				}
			}
		}
		else
			AdcDataOnBit[i]=0;
		
	}
	ADC_CIC_IR=0;
	ADC_vConfConvSingleMode(10);
	ADC_vStartConv();
  	for(i=10;i<14;i++)
	{

		while(!ADC_CIC_IR);
		testdata=ADC_DAT;
		ADC_CIC_IR=0;
		ADC_vConfConvSingleMode(i+1);
		ADC_vStartConv();
		testdata=testdata&0x0ff0;
		testdata=testdata>>4;
		
		j=i-2;
		if(testdata>Setaimadcdata[j])
		{
			if(AdcDataOnBit[j]==0)
			{
				EvDelayTimer[j][EndTimerPoint[j]]=0;
				EndTimerPoint[j]++;
				AdcDataOnBit[j]=1;
				if(EndTimerPoint[j]>30&&StartTimerPoint[j]>0)
				{
					PSW_IEN        =  0;  //关中断
					EndTimerPoint[j]=EndTimerPoint[j]-StartTimerPoint[j];
					for(k=0;k<EndTimerPoint[j];k++)
					{
						EvDelayTimer[j][k]=EvDelayTimer[i][StartTimerPoint[j]+k];
						
					}
					StartTimerPoint[j]=0;
					PSW_IEN        =  1;//开中断
				}
			}
		}
		else
			AdcDataOnBit[j]=0;
	}


}

unsigned int WhichCHannel=0;
unsigned int WhichCH_Timer=0;


unsigned int WhichCHannel_EvOn=0;


unsigned int WhichCHannel_AdcOn=0;
void GPT1_T3 (void) interrupt  0x23 {//using _FAST_ABANK1_/*S_RBANK*/  {
	GPT12E_T3=0xfc18;
	ALARMLED1=!ALARMLED1;
	for(WhichCHannel_AdcOn=0;WhichCHannel_AdcOn<MaxChannel;WhichCHannel_AdcOn++)
		if(AdcDataOnBit[WhichCHannel_AdcOn])
			AdcDataOnDelayTimer[WhichCHannel_AdcOn]++;

    	for(WhichCHannel=0;WhichCHannel<MaxChannel;WhichCHannel++)
    	{
		for(WhichCH_Timer=	StartTimerPoint[WhichCHannel];
		WhichCH_Timer<EndTimerPoint[WhichCHannel];WhichCH_Timer++)
			EvDelayTimer[WhichCHannel][WhichCH_Timer]++;


		if(EvDelayTimer[WhichCHannel][StartTimerPoint[WhichCHannel]]>=AimEvDelayTimer[StartTimerPoint[WhichCHannel]])
		{
			EvDelayTimerOnOutPutBit[WhichCHannel]=1;
			EvDelayTimerOnSet[WhichCHannel]=0;
			StartTimerPoint[WhichCHannel]++;
			EvDelayTimer[WhichCHannel][StartTimerPoint[WhichCHannel]]=0;
		}
    	}

	for(WhichCHannel_EvOn=0;WhichCHannel_EvOn<MaxChannel;WhichCHannel_EvOn++)
		if(EvDelayTimerOnOutPutBit[WhichCHannel_EvOn])
			EvDelayTimerOnSet[WhichCHannel_EvOn]++;
		if(EvDelayTimerOnSet[WhichCHannel_EvOn]>AimEvDelayTimerOnSet[WhichCHannel_EvOn]+AdcDataOnDelayTimer[WhichCHannel_EvOn])
		{	
			EvDelayTimerOnOutPutBit[WhichCHannel_EvOn]=0;
			EvDelayTimerOnSet[WhichCHannel_EvOn]=0;
			AdcDataOnDelayTimer[WhichCHannel_EvOn]=0;
		}



	EV1 = OutPutBit_VE1;
	EV2 = OutPutBit_VE2;
	EV3 = OutPutBit_VE3;
	EV4 = OutPutBit_VE4;
	EV5 = OutPutBit_VE5;
	EV6 = OutPutBit_VE6;

	EV7 = OutPutBit_VE7;
	EV8= OutPutBit_VE8;
	EV9 = OutPutBit_VE9;
	EV10 = OutPutBit_VE10;
	EV11 = OutPutBit_VE11;
	EV12 = OutPutBit_VE12;

}

void GPT1_T2 (void) interrupt  0x22 {//using _FAST_ABANK1_/*S_RBANK*/  {
GPT12E_T2=0xfc18;


}

void GPT1_T4 (void) interrupt  0x24 {//using _FAST_ABANK1_/*S_RBANK*/  {
GPT12E_T4=0xfc18;

}

⌨️ 快捷键说明

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