BasCom Interrupt


TEST.BAS

Config Timer0 = Timer , Prescale = 1024 'Timer 10mS
Const Tmr_c_preload = 178

Dim Timsignal As Byte

Enable Interrupts
On Timer0 Interrupt_ticker
Enable Timer0
Start Timer0
Do
If Timsignal = 1 Then
Timsignal = 0
End If
Loop
End

Interrupt_ticker:
Timer0 = Tmr_c_preload
Timsignal = 1
Return


TEST.HEX
(prolog skipped)

Config Timer0 = Timer , Prescale = 1024 'Timer 10mS
0086 LDI r24,$05
0088 OUT TCCR0,r24
Enable Interrupts
008A SEI
Enable Timer0
008C IN r24,TIMSK
008E ORI r24,$01
0090 OUT TIMSK,r24
Start Timer0
0092 LDI r24,$05 eigentlich doppelt gemoppelt (s.config)
0094 OUT TCCR0,r24

Do
If Timsignal = 1 Then

L_$0096:
0096 LDS r16,D_$0060
009A CPI r16,$01
009C BREQ L_$00A2
009E JMP Loop

Timsignal = 0
L_$00A2:
00A2 LDI r24,$00
00A4 STS D_$0060,r24

End If


Loop
00A8 JMP L_$0096
00AC

End
L_$00AE:
00AE RJMP L_$00AE auf immer und ewig


Interrupt_ticker:
00B0 PUSH r0
00B2 PUSH r1
00B4 PUSH r2
00B6 PUSH r3
00B8 PUSH r4
00BA PUSH r5
00BC PUSH r7
00BE PUSH r8
00C0 PUSH r9
00C2 PUSH r10
00C4 PUSH r11
00C6 PUSH r16
00C8 PUSH r17
00CA PUSH r18
00CC PUSH r19
00CE PUSH r20
00D0 PUSH r21
00D2 PUSH r22
00D4 PUSH r23
00D6 PUSH r24
00D8 PUSH r25
00DA PUSH XL
00DC PUSH XH
00DE PUSH YL
00E0 PUSH YH
00E2 PUSH ZL
00E4 PUSH ZH
00E6 IN r24,SREG
00E8 PUSH r24
Timer0 = Tmr_c_preload
00EA LDI r24,$B2
00EC OUT TCNT0,r24
Timsignal = 1
00EE LDI r24,$01
00F0 STS D_$0060,r24
Return
00F4 POP r24
00F6 OUT SREG,r24
00F8 POP ZH
00FA POP ZL
00FC POP YH
00FE POP YL
0100 POP XH
0102 POP XL
0104 POP r25
0106 POP r24
0108 POP r23
010A POP r22
010C POP r21
010E POP r20
0110 POP r19
0112 POP r18
0114 POP r17
0116 POP r16
0118 POP r11
011A POP r10
011C POP r9
011E POP r8
0120 POP r7
0122 POP r5
0124 POP r4
0126 POP r3
0128 POP r2
012A POP r1
012C POP r0
012E RETI