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

📄 isr.c

📁 c编写的嵌入式程序源码
💻 C
字号:
/*************************************************************/
//中断服务程序模块
//1.CAN中断服务程序;
//2.ADC中断服务程序;
/*************************************************************/

#include "common.h"

extern struct Acquired getdata;
extern struct Flag fla;
extern struct Data dat;

unsigned int buffer1;
unsigned int buffer2;
unsigned int buffer3;
unsigned int buffer4;

/*************************************************************/
//CAN中断服务程序
void __attribute__((interrupt,no_auto_psv)) _C1Interrupt(void)
{
	IFS1bits.C1IF = 0;         //清零CAN中断
	if (C1INTFbits.TX2IF)
	{
		C1INTFbits.TX2IF = 0;
	}
	else if (C1INTFbits.TX1IF)
	{
		C1INTFbits.TX1IF = 0;
	}
	else if (C1INTFbits.TX0IF)
	{
		C1INTFbits.TX0IF = 0;
	}

	if(C1INTFbits.RX0IF)
	{         
		C1INTFbits.RX0IF = 0; 	
		buffer1 = C1RX0B1;
    	buffer2 = C1RX0B2; 
    	buffer3 = C1RX0B3; 
    	buffer4 = C1RX0B4;
		C1RX0CONbits.RXFUL = 0;
		if ((buffer1==0x0000) && (buffer2==0x1111) && (buffer3==0x2222) && (buffer4==0x3333)) 
    	{
			LATDbits.LATD9 = 1; 
			int j;
        	for(j = 0; j < 10000; j++){}
        	LATDbits.LATD9 = 0;  
		}
  	}
	else if(C1INTFbits.RX1IF)
	{
		C1INTFbits.RX1IF = 0; 
		buffer1 = C1RX1B1;
    	buffer2 = C1RX1B2; 
    	buffer3 = C1RX1B3; 
    	buffer4 = C1RX1B4;
		C1RX1CONbits.RXFUL = 0;
		if ((buffer1==0x0000) && (buffer2==0x1111) && (buffer3==0x2222) && (buffer4==0x3333)) 
    	{
		    LATDbits.LATD3 = 1; 
			int j;
        	for(j = 0; j < 10000; j++){}
        	LATDbits.LATD3 = 0; 
		} 
	}    
}
/*************************************************************/
//ADC中断服务程序						
void __attribute__((__interrupt__,auto_psv)) _ADCInterrupt(void)
{
	IFS0bits.ADIF=0;				//清零ADC中断
	if(getdata.Read_ADCtimes < 4)			//转换四次后读数
	{
		Read_ADC(getdata.Read_ADCtimes);
		getdata.Read_ADCtimes++;
		if(getdata.Read_ADCtimes == 4)
		{
			getdata.Read_ADCtimes = 0;
			Get_Data();
		}			
	}	
}

/**********************************************************************/
void __attribute__((__interrupt__, auto_psv)) _T1Interrupt(void)
{
	TMR1 = 0;
	IFS0bits.T1IF = 0;
	if(fla.Time_Flag < 15)			//转换15次后读数
	{
		fla.Time_Flag++;
		if(fla.Time_Flag == 15)
		{
			fla.Time_Flag = 0;
			dat.possession = (unsigned int)(0.32*dat.posstime);      //0.32=0.2*12*4/30000
			int i = 1;
			for( i = 1; i <= dat.flow; i++ )
			{
            	C1TX0B1 = dat.flow; 
            	C1TX0B2 = dat.possession;
    	    	C1TX0B3 = dat.speed[i];
     	    	C1TX0B4 = dat.shape[i];
	     		C1TX0CONbits.TXREQ = 1; 
				dat.flow = 0;
    			dat.possession = 0;
				dat.speed[i]  = 0;
				dat.shape[i] = 0;
				dat.posstime = 0;
			}
		}			
	}	

}
/*************************************************************/

⌨️ 快捷键说明

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