STC15W系列单片机最多有21个中断请求源,每个中断请求源都有相应的控制寄存器。要记忆下来是一个比较麻烦的事情,也没有必要。使用时临时去查手册,也比较麻烦费时,一劳永逸的办法是就是写库函数。新建两个文件,分别以stcint.h, stcint.c存入C51 Template文件夹下Library文件夹中。
需要说明的是:中断函数不可以像普通函数那样在头文件中声明,否则编译时会报错。请看下面例子:
/*stcint.h Designed by Bill Liu Version 0.0 Modified last by Bill Liu on 11/29/2021 */ #ifndef __STCINT_H_ #define __STCINT_H_ #include "mtype.h" #include "stc15w4k.h" void STC_Int0(void) interrupt 0; #endif
/*stcint.c Designed by Bill Liu Version 0.0 Modified last by Bill Liu on 11/29/2021 */ #include "stcint.h" void STC_Int0(void) interrupt 0 { } //End of STC_Int0(void)
/*main.c Designed by Bill Liu Version 0.0 Modified last by Bill Liu on 11/29/2021 */ #include "main.h" #include "stcint.h" void main() { while(1) { } } //End of main()
编译结果,如下:
编译出错,问题出在中断函数的声明。现在把中断函数的声明注释起来,再看下编译结果:
/*stcint.h Designed by Bill Liu Version 0.0 Modified last by Bill Liu on 11/29/2021 */ #ifndef __STCINT_H_ #define __STCINT_H_ #include "mtype.h" #include "stc15w4k.h" //void STC_Int0(void) interrupt 0; #endif
编译通过。 说明中断函数不用声明,直接在源程序中实现即可。另外需要说明的是,库函数中的中断函数没有实现代码,并被注释起来,需要用时,再去取消注释,添加实现代码,也可Copy到主程序中去实现。库函数主要是中断初始化函数,及中断标志位读写函数。
头文件如下:
/*stcint.h Designed by Bill Liu Version 0.0 Modified last by Bill Liu on 11/29/2021 */ #ifndef __STCINT_H_ #define __STCINT_H_ #include "mtype.h" #include "stc15w4k.h" //External INT/// /********************************************************************** Function: STC_Int0Init(BOOL intEnable, BOOL priority, BOOL falEdgeTrigger); Return value: void Discription: INT0 init Example: STC_Int0Init(1, 0, 0); //init to trigger interrupt at both of level rising edge & falling edge STC_Int0Init(1, 0, 1); //init to trigger interrupt at falling edge ***********************************************************************/ void STC_Int0Init(BOOL intEnable, BOOL priority, BOOL falEgeTrigger); /********************************************************************** Function: STC_Int1Init(BOOL intEnable, BOOL priority, BOOL falEdgeTrigger); Return value: void Discription: INT1 init Example: STC_Int1Init(1, 0, 0); //init to trigger interrupt at both of level rising edge & falling edge STC_Int1Init(1, 0, 1); //init to trigger interrupt at falling edge,priorrity level 0 ***********************************************************************/ void STC_Int1Init(BOOL intEnable, BOOL priority, BOOL falEgeTrigger); /********************************************************************** Function: STC_Int2Init(BOOL intEnable); Return value: void Discription: init INT2 Example: STC_Int2Init(1); //INT2 enable,trigger at falling edge STC_Int2Init(0); //INT2 disable ***********************************************************************/ void STC_Int2Init(BOOL intEnable); /********************************************************************** Function: STC_Int3Init(BOOL intEnable); Return value: void Discription: INT3 init Example: STC_Int2Init(1); //INT3 enable,trigger at falling edge STC_Int2Init(0); //INT3 disable ***********************************************************************/ void STC_Int3Init(BOOL intEnable); /********************************************************************** Function: STC_Int4Init(BOOL intEnable, BOOL priority); Return value: void Discription: INT4 init Example: STC_Int4Init(1, 0); //INT4 interrupt enable,priority level 0 STC_Int4Init(0, 0); //INT4 interrupt disable ***********************************************************************/ void STC_Int4Init(BOOL intEnable, BOOL priority); /Timer/ /********************************************************************** Function: STC_GetT0Flag(); Return value: ui8 Discription: get T0 counter overflow flag Example: ui8 t0flag = STC_GetT0Flag(); ***********************************************************************/ ui8 STC_GetT0Flag(); /********************************************************************** Function: STC_ClearT0Flag(); Return value: void Discription: cleart T0 counter overflow flag Example: STC_ClearT0Flag(); ***********************************************************************/ void STC_ClearT0Flag(); /********************************************************************** Function: STC_IntT0Init(BOOL intEnable, BOOL priority); Return value: void Discription: timer0 interrupt init Example: STC_IntT0Init(1, 0); //T0 interrupt enable,priority level 0 STC_IntT0Init(0, 0); //T0 interrupt disable ***********************************************************************/ void STC_IntT0Init(BOOL intEnable, BOOL priority); /********************************************************************** Function: STC_GetT1Flag(); Return value: ui8 Discription: get T1 counter overflow flag Example: ui8 t1flag = STC_GetT1Flag(); ***********************************************************************/ ui8 STC_GetT1Flag(); /********************************************************************** Function: STC_ClearT1Flag(); Return value: void Discription: cleart T1 counter overflow flag Example: STC_ClearT1Flag(); ***********************************************************************/ void STC_ClearT1Flag(); /********************************************************************** Function: STC_IntT1Init(BOOL intEnable, BOOL priority); Return value: void Discription: timer1 interrupt init Example: STC_IntT1Init(1, 0); //T1 interrupt enable,prioriyty level 0 STC_IntT1Init(0, 0); //T1 interrupt disable ***********************************************************************/ void STC_IntT1Init(BOOL intEnable, BOOL priority); /********************************************************************** Function: STC_IntT2Init(BOOL intEnable); Return value: void Discription: timer2 interrupt init Example: STC_IntT2Init(1); //T2 interrupt enable STC_IntT2Init(0); //T2 interrupt disable ***********************************************************************/ void STC_IntT2Init(BOOL intEnable); /********************************************************************** Function: STC_IntT3Init(BOOL intEnable); Return value: void Discription: timer3 interrupt init Example: STC_IntT3Init(1); //T3 interrupt enable STC_IntT3Init(0); //T3 interrupt disable ***********************************************************************/ void STC_IntT3Init(BOOL intEnable); /********************************************************************** Function: STC_IntT4Init(BOOL intEnable); Return value: void Discription: timer4 interrupt init Example: STC_IntT4Init(1); //T4 interrupt enable STC_IntT4Init(0); //T4 interrupt disable ***********************************************************************/ void STC_IntT4Init(BOOL intEnable); ///Serial port /********************************************************************** Function: STC_GetS1RiFlag(); Return value: ui8 Discription: get serial port1 receiving interrupt flag Example: ui8 tem = STC_GetS1RiFlag(); ***********************************************************************/ ui8 STC_GetS1RiFlag(); /********************************************************************** Function: STC_ClearS1RiFlag(); Return value: void Discription: clear serial port1 receiving interrupt flag Example: STC_ClearS1RiFlag(); ***********************************************************************/ void STC_ClearS1RiFlag(); /********************************************************************** Function: STC_GetS1TiFlag(); Return value: ui8 Discription: get serial port1 transmitting interrupt flag Example: ui8 tem = STC_GetS1TiFlag(); ***********************************************************************/ ui8 STC_GetS1TiFlag(); /********************************************************************** Function: STC_ClearS1TiFlag(); Return value: void Discription: clear serial port1 trnsmitting interrupt flag Example: STC_ClearS1TiFlag(); ***********************************************************************/ void STC_ClearS1TiFlag(); /********************************************************************** Function: STC_IntS1Init(BOOL intEnable, BOOL priority); Return value: void Discription: serial port1 interrupt init Example: STC_IntS1Init(1,0); //serial port1 interrupt enable,priority level 0 STC_IntS1Init(0,0); //serial port1 interrupt disable ***********************************************************************/ void STC_IntS1Init(BOOL intEnable, BOOL priority); /********************************************************************** Function: STC_GetS2RiFlag(); Return value: ui8 Discription: get serial port2 receiving interrupt flag Example: ui8 tem = STC_GetS2RiFlag(); ***********************************************************************/ ui8 STC_GetS2RiFlag(); /********************************************************************** Function: STC_ClearS2RiFlag(); Return value: void Discription: clear serial port2 receiving interrupt flag Example: STC_ClearS2RiFlag(); ***********************************************************************/ void STC_ClearS2RiFlag(); /********************************************************************** Function: STC_GetS2TiFlag(); Return value: ui8 Discription: get serial port2 transmitting interrupt flag Example: ui8 tem = STC_GetS2TiFlag(); ***********************************************************************/ ui8 STC_GetS2TiFlag(); /********************************************************************** Function: STC_ClearS2TiFlag(); Return value: void Discription: clear serial port2 trnsmitting interrupt flag Example: STC_ClearS2TiFlag(); ***********************************************************************/ void STC_ClearS2TiFlag(); /********************************************************************** Function: STC_IntS2Init(BOOL intEnable, BOOL priority); Return value: void Discription: serial port2 interrupt init Example: STC_IntS2Init(1,0); //serial port2 interrupt enable,priority level 0 STC_IntS2Init(0,0); //serial port2 interrupt disable ***********************************************************************/ void STC_IntS2Init(BOOL intEnable, BOOL priority); /********************************************************************** Function: STC_GetS3RiFlag(); Return value: ui8 Discription: get serial port3 receiving interrupt flag Example: ui8 tem = STC_GetS3RiFlag(); ***********************************************************************/ ui8 STC_GetS3RiFlag(); /********************************************************************** Function: STC_ClearS3RiFlag(); Return value: void Discription: clear serial port3 receiving interrupt flag Example: STC_ClearS3RiFlag(); ***********************************************************************/ void STC_ClearS3RiFlag(); /********************************************************************** Function: STC_GetS3TiFlag(); Return value: ui8 Discription: get serial port3 transmitting interrupt flag Example: ui8 tem = STC_GetS3TiFlag(); ***********************************************************************/ ui8 STC_GetS3TiFlag(); /********************************************************************** Function: STC_ClearS3TiFlag(); Return value: void Discription: clear serial port3 trnsmitting interrupt flag Example: STC_ClearS3TiFlag(); ***********************************************************************/ void STC_ClearS3TiFlag(); /********************************************************************** Function: STC_IntS3Init(BOOL intEnable); Return value: void Discription: serial port3 interrupt init Example: STC_IntS3Init(1); //serial port3 interrupt enable STC_IntS3Init(0); //serial port3 interrupt disable ***********************************************************************/ void STC_IntS3Init(BOOL intEnable); /********************************************************************** Function: STC_GetS4RiFlag(); Return value: ui8 Discription: get serial port4 receiving interrupt flag Example: ui8 tem = STC_GetS4RiFlag(); ***********************************************************************/ ui8 STC_GetS4RiFlag(); /********************************************************************** Function: STC_ClearS4RiFlag(); Return value: void Discription: clear serial port4 receiving interrupt flag Example: STC_ClearS4RiFlag(); ***********************************************************************/ void STC_ClearS4RiFlag(); /********************************************************************** Function: STC_GetS4TiFlag(); Return value: ui8 Discription: get serial port4 transmitting interrupt flag Example: ui8 tem = STC_GetS4TiFlag(); ***********************************************************************/ ui8 STC_GetS4TiFlag(); /********************************************************************** Function: STC_ClearS4TiFlag(); Return value: void Discription: clear serial port4 trnsmitting interrupt flag Example: STC_ClearS4TiFlag(); ***********************************************************************/ void STC_ClearS4TiFlag(); /********************************************************************** Function: STC_IntS4Init(BOOL intEnable); Return value: void Discription: serial port4 interrupt init Example: STC_IntS4Init(1); //serial port4 interrupt enable STC_IntS4Init(0); //serial port4 interrupt disable ***********************************************************************/ void STC_IntS4Init(BOOL intEnable); //ADC /********************************************************************** Function: STC_GetAdcFlag(); Return value: ui8 Discription: get ADC interrupt flag Example: ui8 tem = STC_GetAdcFlag(); ***********************************************************************/ ui8 STC_GetAdcFlag(); /********************************************************************** Function: STC_ClearAdcFlag(); Return value: void Discription: clear ADC interrupt flag Example: STC_ClearAdcFlag(); ***********************************************************************/ void STC_ClearAdcFlag(); /********************************************************************** Function: STC_IntAdcInit(BOOL intEnable, BOOL proirity); Return value: void Discription: ADC interrupt init Example: STC_IntAdcInit(1,0); //ADC interrupt enable, priority level 0 STC_IntAdcInit(0,0); //ADC interrupt disable ***********************************************************************/ void STC_IntAdcInit(BOOL intEnable, BOOL proirity); ///LVD/ /********************************************************************** Function: STC_GetLvdFlag(); Return value: ui8 Discription: get low voltage detected flag Example: ui8 tem = STC_GetLvdFlag(); ***********************************************************************/ ui8 STC_GetLvdFlag(); /********************************************************************** Function: STC_ClearLvdFlag(); Return value: void Discription: clear low voltage detected flag Example: STC_ClearLvdFlag(); ***********************************************************************/ void STC_ClearLvdFlag(); /********************************************************************** Function: STC_IntLvdInit(BOOL intEnable, BOOL proirity); Return value: void Discription: LVD interrupt init Example: STC_IntLvdInit(1,0); //LVD interrupt enable, priority level 0 STC_IntLvdInit(0,0); //LVD interrupt disable ***********************************************************************/ void STC_IntLvdInit(BOOL intEnable, BOOL proirity); ///SPI/// /********************************************************************** Function: STC_GetSPIFlag(); Return value: ui8 Discription: get SPI sinish flag Example: ui8 tem = STC_GetSPIFlag(); ***********************************************************************/ ui8 STC_GetSPIFlag(); /********************************************************************** Function: STC_ClearSPIFlag(); Return value: void Discription: clear SPI finish flag Example: STC_ClearSPIFlag(); ***********************************************************************/ void STC_ClearSPIFlag(); /********************************************************************** Function: STC_IntSpiInit(BOOL intEnable, BOOL proirity); Return value: void Discription: SPI interrupt init Example: STC_IntSpiInit(1,0); //SPI interrupt enable, priority level 0 STC_IntSpiInit(0,0); //SPI interrupt disable ***********************************************************************/ void STC_IntSpiInit(BOOL intEnable, BOOL proirity); /PCA/// typedef enum { SCCF0 = 0x01, SCCF1 = 0x02, SCCF2 = 0x04, SCF = 0x80 }PCA_INTSOURCE; /********************************************************************** Function: STC_GetPcaFlag(); Return value: ui8 Discription: get PCA counter overflow flag Example: ui8 tem = STC_GetPcaFlag(); ***********************************************************************/ ui8 STC_GetPcaFlag(); /********************************************************************** Function: STC_GetPCA0Flag(); Return value: ui8 Discription: get PCA0 interrupt flag Example: ui8 tem = STC_GetPCA0Flag(); ***********************************************************************/ ui8 STC_GetPCA0Flag(); /********************************************************************** Function: STC_GetPCA1Flag(); Return value: ui8 Discription: getPCA1 interrupt flag Example: ui8 tem = STC_GetPCA1Flag(); ***********************************************************************/ ui8 STC_GetPCA1Flag(); /********************************************************************** Function: STC_GetPCA2Flag(); Return value: ui8 Discription: get PCA2 interrupt flag Example: ui8 tem = STC_GetPCA2Flag(); ***********************************************************************/ ui8 STC_STC_GetPCA2Flag(); /********************************************************************** Function: STC_ClearPcaFlag(); Return value: void Discription: clear PCA interrupt flag Example: STC_ClearPcaFlag(); ***********************************************************************/ void STC_ClearPcaFlag(); /********************************************************************** Function: STC_IntPcaInit(BOOL intEnable, PCA_INTSOURCE msource, BOOL priority); Return value: void Discription: PCA interrupt init Example: STC_IntSpiInit(1,1,0); //PCA CF interrupt enable, priority level 0 STC_IntSpiInit(0,1,0); //PCA interrupt disable ***********************************************************************/ void STC_IntPcaInit(BOOL intEnable, PCA_INTSOURCE msource, BOOL priority); ///Comparator /********************************************************************** Function: STC_ClearCmpFlag(); Return value: void Discription: clear comparator interrupt flag Example: STC_ClearCmpFlag(); ***********************************************************************/ void STC_ClearCmpFlag(); /********************************************************************** Function: STC_IntCmpInit(BOOL nEnable, BOOL pEnable); Return value: void Discription: comparator interrupt init Example: STC_IntCmpInit(1,0); //comparator negtive edge INT enable, positive edge INT disable ***********************************************************************/ void STC_IntCmpInit(BOOL nEnable, BOOL pEnable); ///PWM FD /********************************************************************** Function: STC_PwmFdClearFlag(); Return value: void Discription: clear PWM found exception interrupt flag Example: STC_PwmFdClearFlag(); ***********************************************************************/ void STC_PwmFdClearFlag(); /********************************************************************** Function: STC_IntPwmFdInit(BOOL intEnable, BOOL priority); Return value: void Discription: PWM found exception interrupt init Example: STC_IntPwmFdInit(1,0); //PWM found exception interrupt INT enable, priority level 0 ***********************************************************************/ void STC_IntPwmFdInit(BOOL intEnable, BOOL priority); //PWM /********************************************************************** Function: STC_PwmClearFlag(); Return value: void Discription: clear PWM interrupt flag Example: STC_PwmClearFlag(); ***********************************************************************/ void STC_PwmClearFlag(); /********************************************************************** Function: STC_IntPwmInit(BOOL cResetIntEnable, BOOL priority); Return value: void Discription: PWM counter reset interrupt init Example: STC_IntPwmInit(1,0); ***********************************************************************/ void STC_IntPwmInit(BOOL cResetIntEnable, BOOL priority); /********************************************************************** Function: STC_IntPWM2Init(BOOL intT1, BOOL intT2, BOOL priority); Return value: void Discription: PWM2 interrupt init Example: STC_IntPWM2Init(1,0,0); ***********************************************************************/ void STC_IntPWM2Init(BOOL intT1, BOOL intT2, BOOL priority); /********************************************************************** Function: STC_IntPWM3Init(BOOL intT1, BOOL intT2, BOOL priority); Return value: void Discription: PWM3 interrupt init Example: STC_IntPWM3Init(1,0,0); ***********************************************************************/ void STC_IntPWM3Init(BOOL intT1, BOOL intT2, BOOL priority); /********************************************************************** Function: STC_IntPWM4Init(BOOL intT1, BOOL intT2, BOOL priority); Return value: void Discription: PWM4 interrupt init Example: STC_IntPWM4Init(1,0,0); ***********************************************************************/ void STC_IntPWM4Init(BOOL intT1, BOOL intT2, BOOL priority); /********************************************************************** Function: STC_IntPWM5Init(BOOL intT1, BOOL intT2, BOOL priority); Return value: void Discription: PWM5 interrupt init Example: STC_IntPWM5Init(1,0,0); ***********************************************************************/ void STC_IntPWM5Init(BOOL intT1, BOOL intT2, BOOL priority); /********************************************************************** Function: STC_IntPWM6Init(BOOL intT1, BOOL intT2, BOOL priority); Return value: void Discription: PWM6 interrupt init Example: STC_IntPWM6Init(1,0,0); ***********************************************************************/ void STC_IntPWM6Init(BOOL intT1, BOOL intT2, BOOL priority); /********************************************************************** Function: STC_IntPWM7Init(BOOL intT1, BOOL intT2, BOOL priority); Return value: void Discription: PWM7 interrupt init Example: STC_IntPWM7Init(1,0,0); ***********************************************************************/ void STC_IntPWM7Init(BOOL intT1, BOOL intT2, BOOL priority); #endif
源程序如下:
/*stcint.c Designed by Bill Liu Version 0.0 Modified last by Bill Liu on 11/29/2021 */ #include "stcint.h" /* /// void STC_Int0(void) interrupt 0 { } //End of STC_Int0(void) /// void STC_Int1(void) interrupt 2 { } //End of STC_Int1(void) /// void STC_Int2(void) interrupt 10 { } //End of STC_Int2(void) /// void STC_Int3(void) interrupt 11 { } //End of STC_Int3(void) /// void STC_Int4(void) interrupt 16 { } //End of STC_Int4(void) /// void STC_T0Int(void) interrupt 1 { } //End of STC_T0Int(void) /// void STC_T1Int(void) interrupt 3 { } //End of STC_T1Int(void) /// void STC_T2Int(void) interrupt 12 { } //End of STC_T2Int(void) /// void STC_T3Int(void) interrupt 19 { } //End of STC_T3Int(void) /// void STC_T4Int(void) interrupt 20 { } //End of STC_T4Int(void) /// void STC_S1Int(void) interrupt 4 { } //End of STC_S1Int(void) /// void STC_S2Int(void) interrupt 8 { } //End of STC_S2Int(void) /// void STC_S3Int(void) interrupt 17 { } //End of STC_S3Int(void) /// void STC_S4Int(void) interrupt 18 { } //End of STC_S4Int(void) /// void STC_ADCInt(void) interrupt 5 { } //End of STC_ADCInt(void) /// void STC_LvdInt(void) interrupt 6 { } //End of STC_LvdInt(void) /// void STC_SpiInt(void) interrupt 9 { } //End of STC_SpiInt(void) /// void STC_PCAInt(void) interrupt 7 { } //End of STC_PCAInt(void) /// void STC_CmpInt(void) interrupt 21 //comparator interrupt function { } //End of STC_CmpInt(void) /// void STC_PwmInt(void) interrupt 22 { } //End of STC_PwmInt(void) /// void STC_PwmFdInt(void) interrupt 23 { } //End of STC_PCAInt(void) */ ///External INT/ //******************************************************************** void STC_Int0Init(BOOL intEnable, BOOL priority, BOOL falEgeTrigger) { if(intEnable) { EA = 1; EX0 = 1; } else EX0 = 0; if(falEgeTrigger) IT0 = 1; else IT0 = 0; if(priority) PX0 = 1; else PX0 = 0; } //End of STC_Int0Init(BOOL intEnable, BOOL priority, BOOL dnEgeTrigger) //********************************************************************** void STC_Int1Init(BOOL intEnable, BOOL priority, BOOL falEdgeTrigger) { if(intEnable) { EA = 1; EX1 = 1; } else EX1 = 0; if(falEdgeTrigger) IT1 = 1; else IT1 = 0; if(priority) PX1 = 1; else PX1 = 0; } //End of STC_Int1Init(BOOL intEnable, BOOL priority, BOOL falEdgeTrigger) //********************************************************************** void STC_Int2Init(BOOL intEnable) { ui8 tem = INT_CLKO; if(intEnable) { EA = 1; SetBit(&tem, 4); } else ResetBit(&tem, 4); INT_CLKO = tem; } //End of STC_Int2Init(BOOL intEnable) //********************************************************************** void STC_Int3Init(BOOL intEnable) { ui8 tem = INT_CLKO; if(intEnable) { EA = 1; SetBit(&tem, 5); } else ResetBit(&tem, 5); INT_CLKO = tem; } //End of STC_Int3Init(BOOL intEnable) //********************************************************************** void STC_Int4Init(BOOL intEnable, BOOL priority) { ui8 tem = INT_CLKO; if(intEnable) { EA = 1; SetBit(&tem, 6); } else ResetBit(&tem, 6); INT_CLKO = tem; if(priority) { ui8 tem1 = IP2; SetBit(&tem1, 4); IP2 = tem1; } else { ui8 tem1 = IP2; ResetBit(&tem1, 4); IP2 = tem1; } } //End of STC_Int4Init(BOOL intEnable, BOOL priority) //Timer/ //********************************************************************** ui8 STC_GetT0Flag() { return TF0; } //End of STC_GetT0Flag() //********************************************************************** void STC_ClearT0Flag() { TF0 = 0; } //End of STC_ClearT0Flag() //********************************************************************** void STC_IntT0Init(BOOL intEnable, BOOL priority) { TF0 = 0; if(intEnable) { EA = 1; ET0 = 1; //T0 INT enable } else ET0 = 0; //T0 INT disable if(priority) PT0 = 1; else PT0 = 0; } //End of STC_IntT0Init(BOOL intEnable, BOOL priority) //********************************************************************** ui8 STC_GetT1Flag() { return TF1; } //End of STC_GetT1Flag() //********************************************************************** void STC_ClearT1Flag() { TF1 = 0; } //End of STC_ClearT1Flag() //********************************************************************** void STC_IntT1Init(BOOL intEnable, BOOL priority) { TF1 = 0; if(intEnable) { EA = 1; ET1 = 1; //T1 INT enable } else ET1 = 0; //T1 INT disable if(priority) PT1 = 1; else PT1 = 0; } //End of STC_IntT1Init(BOOL intEnable, BOOL priority) //********************************************************************** void STC_IntT2Init(BOOL intEnable) { ui8 tem = IE2; if(intEnable) { EA = 1; SetBit(&tem, 2); } else ResetBit(&tem, 2); IE2 = tem; } //End of STC_IntT2Init(BOOL intEnable) //********************************************************************** void STC_IntT3Init(BOOL intEnable) { ui8 tem = IE2; if(intEnable) { EA = 1; SetBit(&tem, 5); } else ResetBit(&tem, 5); IE2 = tem; } //End of STC_IntT3Init(BOOL intEnable) //********************************************************************** void STC_IntT4Init(BOOL intEnable) { ui8 tem = IE2; if(intEnable) { EA = 1; SetBit(&tem, 6); } else ResetBit(&tem, 6); IE2 = tem; } //End of STC_IntT3Init(BOOL intEnable) //Serial port/// //********************************************************************** ui8 STC_GetS1RiFlag() { return RI; } //End of STC_GetS1RiFlag() //********************************************************************** void STC_ClearS1RiFlag() { RI = 0; } //End of STC_ClearS1RiFlag() //********************************************************************** ui8 STC_GetS1TiFlag() { return TI; } //End of STC_GetS1TiFlag() //********************************************************************** void STC_ClearS1TiFlag() { TI = 0; } //End of STC_ClearS1TiFlag() //********************************************************************** void STC_IntS1Init(BOOL intEnable, BOOL priority) { RI = 0; TI = 0; if(intEnable) { EA = 1; ES = 1; } else ES = 0; if(priority) PS = 1; else PS = 0; } //End of STC_IntS1Init(BOOL intEnable, BOOL priority) //********************************************************************** ui8 STC_GetS2RiFlag() { return GetBit(S2CON,0); } //End of STC_GetS2RiFlag() //********************************************************************** void STC_ClearS2RiFlag() { S2CON &= ~0x01; } //End of STC_ClearS2RiFlag() //********************************************************************** ui8 STC_GetS2TiFlag() { return GetBit(S2CON,1); } //End of STC_GetS2TiFlag() //********************************************************************** void STC_ClearS2TiFlag() { S2CON &= ~(0x01 << 1); } //End of STC_ClearS2TiFlag() //********************************************************************** void STC_IntS2Init(BOOL intEnable, BOOL priority) { STC_ClearS2RiFlag(); STC_ClearS2TiFlag(); if(intEnable) { EA = 1; IE2 |= 0x01; //S2 INT enable } else IE2 &= ~0x01; //S2 INT enable if(priority) IP2 |= 0x01; else IP2 &= ~0x01; } //End of STC_IntS2Init(BOOL intEnable, BOOL priority) //********************************************************************** ui8 STC_GetS3RiFlag() { return (S3CON & 0x01); } //End of STC_GetS3RiFlag() //********************************************************************** void STC_ClearS3RiFlag() { S3CON &= 0xFE; } //End of STC_ClearS3RiFlag() //********************************************************************** ui8 STC_GetS3TiFlag() { return GetBit(S3CON,1); } //End of STC_GetS3TiFlag() //********************************************************************** void STC_ClearS3TiFlag() { S3CON &= ~(0x01 << 1); } //End of STC_ClearS3TiFlag() //********************************************************************** void STC_IntS3Init(BOOL intEnable) { ui8 tem = IE2; STC_ClearS3RiFlag(); STC_ClearS3TiFlag(); if(intEnable) { EA = 1; SetBit(&tem, 3); } else ResetBit(&tem, 3); IE2 = tem; } //End of STC_IntS3Init(BOOL intEnable) //********************************************************************** ui8 STC_GetS4RiFlag() { return (S4CON & 0x01); } //End of STC_GetS4RiFlag() //********************************************************************** void STC_ClearS4RiFlag() { S4CON &= 0xFE; } //End of STC_ClearS4RiFlag() //********************************************************************** ui8 STC_GetS4TiFlag() { return GetBit(S4CON,1); } //End of GetBit(S4CON,1) //********************************************************************** void STC_ClearS4TiFlag() { S4CON &= ~0x02; } //End of STC_ClearS4TiFlag() //********************************************************************** void STC_IntS4Init(BOOL intEnable) { ui8 tem = IE2; STC_ClearS4RiFlag(); STC_ClearS4TiFlag(); if(intEnable) { EA = 1; SetBit(&tem, 4); } else ResetBit(&tem, 4); IE2 = tem; } //End of STC_IntS4Init(BOOL intEnable) /ADC/// //********************************************************************** ui8 STC_GetAdcFlag() { return GetBit(ADC_CONTR,4); } //End of GetBit(ADC_CONTR,4) //********************************************************************** void STC_ClearAdcFlag() { ADC_CONTR &= ~(0x01 << 4); } //End of STC_ClearAdcFlag() //********************************************************************** void STC_IntAdcInit(BOOL intEnable, BOOL proirity) { STC_ClearAdcFlag(); if(intEnable) { EA = 1; EADC = 1; } else EADC = 0; if(proirity) PADC = 1; else PADC = 0; } //End of STC_IntAdcInit(BOOL intEnable, BOOL proirity) ///LVD/ //********************************************************************** ui8 STC_GetLvdFlag() { return GetBit(PCON,5); } //End of STC_GetLvdFlag() //********************************************************************** void STC_ClearLvdFlag() { PCON &= ~(0X01 << 5); } //End of STC_ClearLvdFlag() //********************************************************************** void STC_IntLvdInit(BOOL intEnable, BOOL proirity) { STC_ClearLvdFlag(); if(intEnable) { EA = 1; ELVD = 1; } else ELVD = 0; if(proirity) PLVD = 1; else PLVD = 0; } //End of STC_IntLvdInit(BOOL intEnable, BOOL proirity) ///SPI/// //********************************************************************** ui8 STC_GetSPIFlag() { return GetBit(SPSTAT,7); } //End of STC_GetSPIFlag() //********************************************************************** void STC_ClearSPIFlag() { SPSTAT &= ~0x80; } //End of STC_ClearSPIFlag() //*********************************************************************** void STC_IntSPIInit(BOOL intEnable, BOOL proirity) { ui8 tem = IE2; STC_ClearSPIFlag(); if(intEnable) { EA = 1; SetBit(&tem, 1); } else ResetBit(&tem, 1); IE2 = tem; tem = IP2; if(proirity) SetBit(&tem, 1); else ResetBit(&tem, 1); IP2 = tem; } //End of STC_IntSPIInit(BOOL intEnable, BOOL proirity) PCA //********************************************************************** ui8 STC_GetPcaFlag() { return CF; } //End of STC_GetPcaFlag() //********************************************************************** ui8 STC_GetPCA0Flag() { return CCF0; } //End of STC_GetPCA0Flag() //********************************************************************** ui8 STC_GetPCA1Flag() { return CCF1; } //End of STC_GetPCA1Flag() //********************************************************************** ui8 STC_GetPCA2Flag() { return CCF2; } //End of STC_GetPCA2Flag() //********************************************************************** void STC_ClearPcaFlag() { CCON &= (0x01 << 6); } //End of STC_ClearPcaFlag() //********************************************************************** void STC_IntPcaInit(BOOL intEnable, PCA_INTSOURCE msource, BOOL priority) { switch(msource) { case 0x80: if(intEnable) { EA = 1; CMOD |= 0x01; } else CMOD &= 0xFE; break; case 0x04: if(intEnable) { EA = 1; CCAPM2 |= 0x01; } else CCAPM2 &= 0xFE; break; case 0x02: if(intEnable) { EA = 1; CCAPM1 |= 0x01; } else CCAPM1 &= 0xFE; break; case 0x01: if(intEnable) { EA = 1; CCAPM0 |= 0x01; } else CCAPM0 &= 0xFE; break; } if(priority) PPCA = 1; else PPCA = 0; } //End of STC_IntPcaInit(BOOL intEnable, PCA_INTSOURCE msource, BOOL priority) /Comprator/ //********************************************************************** void STC_ClearCmpFlag() { CMPCR1 &= ~(0x01 << 6); } //End of STC_ClearCmpFlag() //********************************************************************** void STC_IntCmpInit(BOOL nEnable, BOOL pEnable) { STC_ClearCmpFlag(); if(nEnable) CMPCR1 |= 0x01 << 4; else CMPCR1 |= ~(0x01 << 4); if(pEnable) CMPCR1 |= 0x01 << 5; else CMPCR1 |= ~(0x01 << 5); } //End of STC_IntCmpInit(BOOL nEnable, BOOL pEnable) ///PWM FD //********************************************************************** void STC_PwmFdClearFlag() { PWMFDCR &= 0xFE; } //End of STC_PwmFdClearFlag() //********************************************************************** void STC_IntPwmFdInit(BOOL intEnable, BOOL priority) { if(intEnable) { EA = 1; PWMFDCR |= 0x01 << 3; } else PWMFDCR &= ~(0x01 << 3); if(priority) IP2 |= 0x01 << 3; else IP2 &= ~(0x01 << 3); } //End of STC_IntPwmFdInit(BOOL intEnable, BOOL priority) //PWM //********************************************************************** void STC_PwmClearFlag() { PWMIF = 0x00; } //End of STC_PwmClearFlag() //********************************************************************** void STC_IntPwmInit(BOOL cResetIntEnable, BOOL priority) { PWMIF = 0x00; if(cResetIntEnable) //PWM counter reset INT enable { EA = 1; PWMCR |= 0x01 << 6; } else PWMCR &= ~(0x01 << 6); if(priority) IP2 |= 0x01 << 2; else IP2 &= ~(0x01 << 2); } //End of STC_IntPwmInit(BOOL cResetIntEnable, BOOL priority) //********************************************************************** void STC_IntPWM2Init(BOOL intT1, BOOL intT2, BOOL priority) { P_SW2 |= 0x80; if(intT1&&intT2) { EA = 1; PWM2CR |= 0x01 << 2; } if(intT1) PWM2CR |= 0x01; else PWM2CR &= 0xFE; if(intT2) PWM2CR |= 0x02; else PWM2CR &= ~0x02; P_SW2 &= ~0x80; if(priority) IP2 |= 0x01 << 2; else IP2 &= ~(0x01 << 2); } //End of STC_IntPWM2Init(BOOL intT1, BOOL intT2, BOOL priority) //********************************************************************** void STC_IntPWM3Init(BOOL intT1, BOOL intT2, BOOL priority) { P_SW2 |= 0x80; if(intT1&&intT2) { EA = 1; PWM3CR |= 0x01 << 2; } if(intT1) PWM3CR |= 0x01; else PWM3CR &= 0xFE; if(intT2) PWM3CR |= 0x02; else PWM3CR &= ~0x02; P_SW2 &= ~0x80; if(priority) IP2 |= 0x01 << 2; else IP2 &= ~(0x01 << 2); } //End of STC_IntPWM3Init(BOOL intT1, BOOL intT2, BOOL priority) //********************************************************************** void STC_IntPWM4Init(BOOL intT1, BOOL intT2, BOOL priority) { P_SW2 |= 0x80; if(intT1&&intT2) { EA = 1; PWM4CR |= 0x01 << 2; } if(intT1) PWM4CR |= 0x01; else PWM4CR &= 0xFE; if(intT2) PWM4CR |= 0x02; else PWM4CR &= ~0x02; P_SW2 &= ~0x80; if(priority) IP2 |= 0x01 << 2; else IP2 &= ~(0x01 << 2); } //End of STC_IntPWM4Init(BOOL intT1, BOOL intT2, BOOL priority) //********************************************************************** void STC_IntPWM5Init(BOOL intT1, BOOL intT2, BOOL priority) { P_SW2 |= 0x80; if(intT1&&intT2) { EA = 1; PWM5CR |= 0x01 << 2; } if(intT1) PWM5CR |= 0x01; else PWM5CR &= 0xFE; if(intT2) PWM5CR |= 0x02; else PWM5CR &= ~0x02; P_SW2 &= ~0x80; if(priority) IP2 |= 0x01 << 2; else IP2 &= ~(0x01 << 2); } //End of STC_IntPWM5Init(BOOL intT1, BOOL intT2, BOOL priority) //********************************************************************** void STC_IntPWM6Init(BOOL intT1, BOOL intT2, BOOL priority) { P_SW2 |= 0x80; if(intT1&&intT2) { EA = 1; PWM6CR |= 0x01 << 2; } if(intT1) PWM6CR |= 0x01; else PWM6CR &= 0xFE; if(intT2) PWM6CR |= 0x02; else PWM6CR &= ~0x02; P_SW2 &= ~0x80; if(priority) IP2 |= 0x01 << 2; else IP2 &= ~(0x01 << 2); } //End of STC_IntPWM6Init(BOOL intT1, BOOL intT2, BOOL priority) //********************************************************************** void STC_IntPWM7Init(BOOL intT1, BOOL intT2, BOOL priority) { P_SW2 |= 0x80; if(intT1&&intT2) { EA = 1; PWM7CR |= 0x01 << 2; } if(intT1) PWM7CR |= 0x01; else PWM7CR &= 0xFE; if(intT2) PWM7CR |= 0x02; else PWM7CR &= ~0x02; P_SW2 &= ~0x80; if(priority) IP2 |= 0x01 << 2; else IP2 &= ~(0x01 << 2); } //End of STC_IntPWM7Init(BOOL intT1, BOOL intT2, BOOL priority)
该函数库源码已上传到CSDN,文件名为STC15W INT Library Code.rar。如可需要线下查看,可搜索下载。