/******************************************************************************** INT_Ch.c: Multi-channels as rising or falling edge interrupt in single slot. Compiler: BC++ 3.1, Turbo C ++ 1.01(3.01) (free from http://community.borland.com/museum) MSC 6.0, MSVC 1.52. Compile mode: large Project: INT_Ch.c ..\Lib\(8000E.Lib,8000.Lib) [24 Mar,2005] by Bill *********************************************************************************/ #include "..\..\..\..\Lib\8000E.h" #include "..\..\..\..\lib\8048.h" #include void interrupt far ISR_Function(void); int iSlot; void main(void) { char *cSlot; InitLib(); Print("Please selection Slot:"); *cSlot=Getch(); iSlot=atoi(cSlot); Print("iSlot==%d\n\r",iSlot); //Enable channel 0 as rising edge interrupt. i8048_Set_RisingReg(iSlot,0,1); //Channel 0 1=Enable ////Enable channel 0,1,2 as Falling edge interrupt. i8048_Set_FallingReg(iSlot,0,1); //Channel 0 , 1=Enable i8048_Set_FallingReg(iSlot,1,1); //Channel 1 , 1=Enable i8048_Set_FallingReg(iSlot,2,1); //Channel 2 , 1=Enable //Install ISR i8048_InstallISR(iSlot,(unsigned long *)&ISR_Function,6); //Priority : 6 for(;;) { Print("Rising S%dC0==%lu Falling S%dC0==%lu S%dC1==%lu S%dC2==%lu\n\r" ,iSlot,i8048_RisingEventCount[iSlot][0] ,iSlot,i8048_FallingEventCount[iSlot][0] ,iSlot,i8048_FallingEventCount[iSlot][1] ,iSlot,i8048_FallingEventCount[iSlot][2]); } } /******************************************************** Please don's use the Print or printCom1 function in ISR, these function will cause same problem. *********************************************************/ void interrupt far ISR_Function(void) { if(i8048_Read_RisingEvent(iSlot,0)) { //Add user's ISR code for channel0. } if(i8048_Read_FallingEvent(iSlot,0)) { //Add user's ISR code for channel0. } if(i8048_Read_FallingEvent(iSlot,1)) { //Add user's ISR code for channel1. } if(i8048_Read_FallingEvent(iSlot,2)) { //Add user's ISR code for channel2. } i8048_UnFreezeCPU(iSlot); i8048_UnFreezeINT(iSlot); //Clear interrupt status of 8048. }