Hallo Rolf,
ich habe ein kleines Problem mit dem Simulator. Bei folgendem kleinen Programm hält der
Simulator reproduzierbar bei 23:17 mit einer Integer-Überlauf Fehlermeldung an. Dadurch
kann ich leider keinen Tageswechsel simulieren. Ist dieses Problem bekannt?
program SimulatorTest;
{$NOSHADOW}
{ $WG} {global Warnings off}
{$DEBDELAY} {kurze Delays für Simulator}
Device = mega8, VCC=5;
{ $BOOTRST $00C00} {Reset Jump to $00C00}
Define_Fuses
// Override_Fuses;
NoteBook = A;
COMport = USB;
LockBits0 = [];
FuseBits0 = [];
FuseBits1 = [];
Import SysTick, RTclock, LCDport;
From System Import ;
From RTclock Import RTCalarm, RTCtimer;
Define
ProcClock = 16000000; {Hertz}
SysTick = 10; {msec}
StackSize = $0032, iData;
FrameSize = $0032, iData;
LCDport = PortD;
LCDtype = 44780;
LCDrows = 2; {rows}
LCDcolumns = 16; {columns per line}
RTClock = iData, DateTime;{Time, DateTime}
RTCtimer = 2; {channels}
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type
str16 = String[16];
{--------------------------------------------------------------}
{ Const Declarations }
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
Var
ANzeigen : Boolean;
{--------------------------------------------------------------}
{ functions }
procedure RTCtimer; // CallBack from RTCtimer
begin
end;
procedure RTCalarm; // CallBack from RTCalarm
begin
end;
procedure RTCtickSecond; // CallBack from RTCclock
begin
end;
procedure RTCtickMinute; // CallBack from RTCclock
begin
Anzeigen:=True;
end;
procedure RTCtickHour; // CallBack from RTCclock
begin
end;
Procedure Zeit_anzeigen;
Var se, mi, st : Byte;
da, mo, ye : Byte;
Ausgabe : Str16;
Begin
st:=RTCGetHour;
mi:=RTCGetMinute;
se:=RTCGetSecond;
da:=RTCGetDay;
mo:=RTCGetMonth;
ye:=RTCGetYear;
Ausgabe:=ByteToStr(da:2:'0')+'.'+ByteToStr(mo:2:'0')+'.20'+ByteToStr(ye:2:'0')+' ';
Ausgabe:=Ausgabe+ByteToStr(st:2:'0')+':'+ByteToStr(mi:2:'0');
LCDxy(0,0);
Write(LCDOut,Ausgabe);
Anzeigen:=False;
End Zeit_anzeigen;
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
EnableInts;
Anzeigen:=True;
loop
if Anzeigen then
Zeit_anzeigen;
endif;
endloop;
end SimulatorTest.
Viele Grüße
Klaus
ich habe ein kleines Problem mit dem Simulator. Bei folgendem kleinen Programm hält der
Simulator reproduzierbar bei 23:17 mit einer Integer-Überlauf Fehlermeldung an. Dadurch
kann ich leider keinen Tageswechsel simulieren. Ist dieses Problem bekannt?
Code
program SimulatorTest;
{$NOSHADOW}
{ $WG} {global Warnings off}
{$DEBDELAY} {kurze Delays für Simulator}
Device = mega8, VCC=5;
{ $BOOTRST $00C00} {Reset Jump to $00C00}
Define_Fuses
// Override_Fuses;
NoteBook = A;
COMport = USB;
LockBits0 = [];
FuseBits0 = [];
FuseBits1 = [];
Import SysTick, RTclock, LCDport;
From System Import ;
From RTclock Import RTCalarm, RTCtimer;
Define
ProcClock = 16000000; {Hertz}
SysTick = 10; {msec}
StackSize = $0032, iData;
FrameSize = $0032, iData;
LCDport = PortD;
LCDtype = 44780;
LCDrows = 2; {rows}
LCDcolumns = 16; {columns per line}
RTClock = iData, DateTime;{Time, DateTime}
RTCtimer = 2; {channels}
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
type
str16 = String[16];
{--------------------------------------------------------------}
{ Const Declarations }
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
Var
ANzeigen : Boolean;
{--------------------------------------------------------------}
{ functions }
procedure RTCtimer; // CallBack from RTCtimer
begin
end;
procedure RTCalarm; // CallBack from RTCalarm
begin
end;
procedure RTCtickSecond; // CallBack from RTCclock
begin
end;
procedure RTCtickMinute; // CallBack from RTCclock
begin
Anzeigen:=True;
end;
procedure RTCtickHour; // CallBack from RTCclock
begin
end;
Procedure Zeit_anzeigen;
Var se, mi, st : Byte;
da, mo, ye : Byte;
Ausgabe : Str16;
Begin
st:=RTCGetHour;
mi:=RTCGetMinute;
se:=RTCGetSecond;
da:=RTCGetDay;
mo:=RTCGetMonth;
ye:=RTCGetYear;
Ausgabe:=ByteToStr(da:2:'0')+'.'+ByteToStr(mo:2:'0')+'.20'+ByteToStr(ye:2:'0')+' ';
Ausgabe:=Ausgabe+ByteToStr(st:2:'0')+':'+ByteToStr(mi:2:'0');
LCDxy(0,0);
Write(LCDOut,Ausgabe);
Anzeigen:=False;
End Zeit_anzeigen;
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
EnableInts;
Anzeigen:=True;
loop
if Anzeigen then
Zeit_anzeigen;
endif;
endloop;
end SimulatorTest.
Viele Grüße
Klaus