#define ML4OUT 0x400 #define ML4WRITE *((char *) ML4OUT) #define IRQSRC 0xDC0 #define IRQSRCREAD *((char *) IRQSRC) #define IRES1 0xDC2 #define IRES1WRITE *((char *) IRES1) #define IRES2 0xDC3 #define IRES2WRITE *((char *) IRES2) #define IRQVECT1 0xFFF2 #define IRQVECT1WRITE *((short *) IRQVECT1) #define IRQVECT2 0x3FF2 #define IRQVECT2WRITE *((short *) IRQVECT2) #define IRQHandler_ADR (short) IRQHandler void irqinit(void); __interrupt void IRQHandler( void ); unsigned char KNAPP; void main(void){ KNAPP = 0; irqinit(); while(1) { ML4WRITE = KNAPP; } } void irqinit(void) { //Interrupt init IRQVECT1WRITE = IRQHandler_ADR; IRQVECT2WRITE = IRQHandler_ADR; IRES1WRITE = 0; //Clear IRQ-flip-flops IRES2WRITE = 0; __asm(" CLI"); } __interrupt void IRQHandler( void ){ // Interrupt handler if (IRQSRCREAD & 1) { if(KNAPP < 255) KNAPP++; IRES1WRITE = 0; } else { if(KNAPP > 0) KNAPP--; IRES2WRITE = 0; } }