Isr-endIsr defines a Interrupt-Service routine. The routine can be assigned to one of the Controller's interupts such as a Timer or Serial Port.
- Isr Identifier [Switch (see Table)]
- Service Routine program code
|save||Compact save all registers (Default)|
|nosave||No Registers saved, you must handle this in your routine|
|fastall||Save all Registers (Fast, longer Routine)|
|fastauto||The registers are saved automatically. Determined automatically by the optimizer by following the program run (fastest version).|
save/nosave/fastall: Optional parameter control saving of Registers. On an interrupt, the current program execution is interrupted and the Service Routineis executed. Registers will be modified, which must saved on entering and restored on exit. If you have limited memory or a time critical routine; then you can use nosave to save/restore only Registers that you will modify, or by using fastauto to let the optimizer determine wich registers must be saved.
Special feature fastauto
With the option fastauto the used registers are automatically determined by the optimizer by following the program run.
Interrupt-Service Routines should be kept short without any delay loops, interrupting commands or eeprom access. The Service Routine must be completed before the next Interrupt occurs. Subroutine call are permitted.
Attention when using datatypes who refers to dynamic memory such as string or MemoryBlock. Here you must ensure that there is no simultaneous access in the interrupts-service and main-program. Manipulation of Strings or MemoryBlocks is time consuming and not recommended!
Timer0.isr = myServiceRoutine ' Asign Service Routine Timer0.clock = 1024 ' Set Prescaler Timer0.enable ' Enable Timer Avr.Interrupts.enable ' Enable Globale Interrupts do loop Isr myServiceRoutine print "Timer-Interrupt activated" endIsr