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

📄 funcint.c

📁 本人编写的无线电话程序,给予PIC18C801设计,包括了uCOS的移植以及菜单,自己设计的拼音注入法,完整地一级汉字库,希望对大家有所帮助
💻 C
字号:
//#include <p18c801.h>
#include "includes.h"
#include "funcint.h"
void isr_null(void);
/************************************************************
 * This part of code is incharge of setting ISR and process *
 * low level interrupt according to the "intvec_l".
 * As to the high level version, currently only one IRQ is 
 * serviced for its critical restriction on time and resource
 ************************************************************/
#pragma udata ISRTBL  = 0x80
void (* intvec_h)(void);
void (* intvec_l[MAX_LISR])(void);

#pragma code MYCODE
void isr_init(void){
	INT8U i;
	//Close all the interrupts enable, priority and flag
	INTCON	= 0;
	INTCON2 = 0;
	INTCON3	= 0;
	IPR2	= 0;
	IPR1	= 0;
	PIR2	= 0;
	PIR1	= 0;
	PIE2	= 0;
	PIE1	= 0;
	RCONbits.IPEN 		= 1;	//Enable interrupt priority

	for(i=0;i<MAX_LISR; i++){
		intvec_l[i]=isr_null;
	}
	intvec_h = isr_null;
}

INT8U isr_set(INT8U irq,void(* isr)(void)){
	if(irq < MAX_LISR){
		intvec_l[irq] = isr;
		return(TRUE);
	}
	else{
		if(irq == INT_HIGHP){
			intvec_h = isr;
			return(TRUE);
		}
		else
			return(FALSE);
	}
}

void LowLevelIntProc(void){
	//TMR0
	if(~INTCON2bits.TMR0IP){
		if(INTCONbits.TMR0IE & INTCONbits.TMR0IF){
			(*intvec_l[INT_TMR0])();
			INTCONbits.TMR0IF = 0;
		}
	}
	//TMR1 as a special case
	//TMR2
	if(~IPR1bits.TMR2IP){
		if(PIE1bits.TMR2IE & PIR1bits.TMR2IF){
			(*intvec_l[INT_TMR2])();
			PIR1bits.TMR2IF = 0;
		}
	}
	//TMR3
	if(~IPR2bits.TMR3IP){
		if(PIE2bits.TMR3IE & PIR2bits.TMR3IF){
			(*intvec_l[INT_TMR3])();
			PIR2bits.TMR3IF = 0;
		}
	}
	//RX
	if(~IPR1bits.RCIP){
		if(PIE1bits.RCIE & PIR1bits.RCIF){
			(*intvec_l[INT_RX0])();
			PIR1bits.RCIF = 0;
		}
	}
	//TX
	if(~IPR1bits.TXIP){
		if(PIE1bits.TXIE & PIR1bits.TXIF){
			(*intvec_l[INT_TX0])();
			PIR1bits.TXIF = 0;
		}
	}
	//RB
	if(~INTCON2bits.RBIP){
		if(INTCONbits.RBIE & INTCONbits.RBIF){
			(*intvec_l[INT_RB])();
			INTCONbits.RBIF = 0;
		}
	}
	//INT2
	if(~INTCON3bits.INT2IP){
		if(INTCON3bits.INT2IE & INTCON3bits.INT2F){
			(*intvec_l[INT_EINT2])();
			INTCON3bits.INT2IF = 0;
		}
	}
}

//A null ISR, do nothing
void isr_null(void){
	Nop();
}

⌨️ 快捷键说明

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