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
Lesezeichen