Versuch : Diese kontroll-test-versuchs-ausprobier-programm

macht nix, außer ein Lauflicht auf den LEDS (DIP-Schalter S1 auf ON stellen, daß sie leuchten können ) wandern lassen.

2 DO..LOOP schleifen:
Erst OHNE TImer mit wait
Dann Mit TIMER (ersten do.loop kommentieren)

(Man sieht, ob der Sekundentakt in etwa stimmt)
Code:
'=========================================================================================
'  FRONT LIGHT ADJUSTMENT PROJECT  (FLAP)
'   Test LED
'=========================================================================================
$regfile = "m32def.dat"
$hwstack = 128

$crystal = 16000000                                         'Quarzfrequenz Joggele
Const Tmr_c_preload = 6
Const Srv_c_shft = 4

$baud = 9600                                                'Baudrate für RS232

Config Timer0 = Timer , Prescale = 64                       'Timer 1mS
On Timer0 Interrupt_ticker , Nosave                         ' Timer for Timer Queue

Dim Irptflag As Byte                                        ' Timer Interrupt occurred
Dim Second_count As Word                                    ' one second timer
Const Second_c_count = 1000                                 ' one sec


Dim Lauflicht As Byte                                       ' Timer Interrupt occurred


    Ddrc = &B11111111
    Portc = 0

    Enable Timer0
    Start Timer0                                            ' timer starten
    Enable Interrupts                                       'General enable
    Lauflicht = 1


'-------------------------------------------------------------------------
'   TEST  OHNE   TIMER
'-------------------------------------------------------------------------
Do
      $asm
           lds r24, {LaufLicht}
           clc
           sbrc r24, 7
           sec
           rol r24
           sts {LaufLicht}, r24
  com r24
           !OUT portc, r24
      $end Asm

      Waitms 1000
  Loop


'-------------------------------------------------------------------------
'   TEST  MIT TIMER
'-------------------------------------------------------------------------
Do


      If Irptflag = 1 Then
         Irptflag = 0                                       ' 1 mS Event
         Decr Second_count
         If Second_count = 0 Then
            Second_count = Second_c_count

            $asm
           lds r24, {LaufLicht}
           clc
           sbrc r24, 7
           sec
           rol r24
           sts {LaufLicht}, r24
           !OUT portc, r24
           $end Asm


         End If
      End If
  Loop
End


'==============================================================================
' Timer 0  interrupt
'==============================================================================
Interrupt_ticker:
   $asm
   PUSH r22
   PUSH r23
   PUSH r24
   PUSH r25
   PUSH XL
   PUSH XH
   PUSH ZL
   PUSH ZH
   IN r24,SREG
   PUSH r24

   LDI      r24,Tmr_c_preload                               'reset precounter
   !Out     Tcnt0 , R24
   LDI      r24,1                                           'set blocker
   sts   {Irptflag}, r24

   POP r24
   !OUT SREG,r24
   POP ZH
   POP ZL
   POP XH
   POP XL
   POP r25
   POP r24
   POP r23
   POP r22

   $end Asm

Return