Hallo
es wäre sehr nett, wenn mir mal jemand auf die Sprünge helfen kann.
Ich habe zwei Programmversionen die sich unterschiedlich verhalten,
und ich verstehe gerade die Welt nicht mehr
Das folgende Programm funktioniert einwandfrei!
--------------------------------------------
--------------------------------------------
program BLS_1;
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = mega16, VCC=5;
{ $BOOTRST $01C00} {Reset Jump to $01C00}
Define_Fuses
// Override_Fuses;
NoteBook = B;
COMport = USB;
LockBits0 = [];
FuseBits0 = [];
FuseBits1 = [SPIEN, JTAGEN, OCDEN];
Import SysTick;
From System Import ;
Define
ProcClock = 4915200; {Hertz}
SysTick = 50; {msec}
StackSize = $0064, iData;
FrameSize = $0064, iData;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type
{--------------------------------------------------------------}
{ Const Declarations }
{--------------------------------------------------------------}
{ Var Declarations }
Var
{$IDATA}
LED[@PortB,5] : Bit;
Licht[@PortA,4] : Bit;
BW1[@PinB,0] : Bit;
BW2[@PinB,1] : Bit;
BW3[@PinB,2] : Bit;
LichtTimer : SysTimer;
{--------------------------------------------------------------}
{ functions }
procedure InitPorts;
begin
DDRA:= %00010000;
DDRB:= %00100000;
end InitPorts;
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
InitPorts;
EnableInts;
SetSystimer(LichtTimer,120); // Einschalten für 0,1 Minute
led := True;
Licht := True;
loop
If BW1 Then
SetSystimer(LichtTimer,240); // 2400 = ca. 120 sek.
led := True;
Licht := True;
EndIf;
If IsSysTimerZero(LichtTimer) Then
led := False;
Licht := False;
EndIf;
endloop;
end BLS_1.
--------------------------------------------
--------------------------------------------
Wenn ich jedoch diese Änderung vornehme, der Rest bleibt gleich.
If BW1 Then
SetSystimer(LichtTimer,240); // 2400 = ca. 120 sek.
led := True;
Licht := True;
EndIf;
If BW2 Then
SetSystimer(LichtTimer,240); // 2400 = ca. 120 sek.
led := True;
Licht := True;
EndIf;
(ich habe auch kürzer formuliert getestet!)
Dann wird beim Programmstart led = true und Licht = true, und bleiben dort bis in alle Ewigkeit.
Vielleicht hat jemand eine Idee, wo ich auf dem Schlauch stehe.
Danke
es wäre sehr nett, wenn mir mal jemand auf die Sprünge helfen kann.
Ich habe zwei Programmversionen die sich unterschiedlich verhalten,
und ich verstehe gerade die Welt nicht mehr
Das folgende Programm funktioniert einwandfrei!
--------------------------------------------
--------------------------------------------
program BLS_1;
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = mega16, VCC=5;
{ $BOOTRST $01C00} {Reset Jump to $01C00}
Define_Fuses
// Override_Fuses;
NoteBook = B;
COMport = USB;
LockBits0 = [];
FuseBits0 = [];
FuseBits1 = [SPIEN, JTAGEN, OCDEN];
Import SysTick;
From System Import ;
Define
ProcClock = 4915200; {Hertz}
SysTick = 50; {msec}
StackSize = $0064, iData;
FrameSize = $0064, iData;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type
{--------------------------------------------------------------}
{ Const Declarations }
{--------------------------------------------------------------}
{ Var Declarations }
Var
{$IDATA}
LED[@PortB,5] : Bit;
Licht[@PortA,4] : Bit;
BW1[@PinB,0] : Bit;
BW2[@PinB,1] : Bit;
BW3[@PinB,2] : Bit;
LichtTimer : SysTimer;
{--------------------------------------------------------------}
{ functions }
procedure InitPorts;
begin
DDRA:= %00010000;
DDRB:= %00100000;
end InitPorts;
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
InitPorts;
EnableInts;
SetSystimer(LichtTimer,120); // Einschalten für 0,1 Minute
led := True;
Licht := True;
loop
If BW1 Then
SetSystimer(LichtTimer,240); // 2400 = ca. 120 sek.
led := True;
Licht := True;
EndIf;
If IsSysTimerZero(LichtTimer) Then
led := False;
Licht := False;
EndIf;
endloop;
end BLS_1.
--------------------------------------------
--------------------------------------------
Wenn ich jedoch diese Änderung vornehme, der Rest bleibt gleich.
If BW1 Then
SetSystimer(LichtTimer,240); // 2400 = ca. 120 sek.
led := True;
Licht := True;
EndIf;
If BW2 Then
SetSystimer(LichtTimer,240); // 2400 = ca. 120 sek.
led := True;
Licht := True;
EndIf;
(ich habe auch kürzer formuliert getestet!)
Dann wird beim Programmstart led = true und Licht = true, und bleiben dort bis in alle Ewigkeit.
Vielleicht hat jemand eine Idee, wo ich auf dem Schlauch stehe.
Danke