Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > <basic> > /* > Ich habe nochmals getestet, das Ergebnis eindeutig ++Var (Byte) > benötigt 260 Takte. Auch mit Logik-Analyser Test 3 und 4: Impuls > mit ++Var 52us ohne 36us also ca. die berechneten 17us. > Differenz Test3 und 4 exakt 260 Takte. > > Weitere Bemerkung PortWriteBit durch selbermachen > (DirAcc.. lesen,maskieren,ausgabe)ist um als 130 Takte langsamer - bei > gleichzeitig mehreren Bits - wieder effektiver. > if / Case schon ein grosser Unterschied > Messwertausgabe > > > ab und zu kommen mehr Takte heraus, vermutlich interne > Interruptverarbeitungen. Weniger allerdings nie. > Var=Var+1 hier 335 Takte habe ich mit anderen Programm schon > mal 291 herausbekommen? > > ADC_Set(ADC_VREF_VCC,0) > ADC_0 = ADC_Read() > 'Takte= 4008 271.742401us Takte= 2397 162.516601us Takte= 2382 161.499us > 'beim ersten Aufruf 4008, dann nurmehr ca 2380 > > Messwertausgabe > Mess1 ++Var (Byte) Takte= 260 17.628000us Takte= 260 17.628000us > Mess2 Var=Var+1 (Byte) Takte= 335 22.712999us Takte= 335 22.712999us > Mess3 2xPort_WriteBit Takte= 1036 70.240798us Takte= 1036 70.240798us > Mess4 2xPort_WriteBit ++Var Takte= 1296 87.868797us Takte= 1296 87.868797us > Mess5 Port_Write Takte= 441 29.899799us Takte= 441 29.899799us > Mess6 DirAcc_Write Takte= 434 29.425199us Takte= 434 29.425199us > Mess7 PortBit Eigenbau Takte= 648 43.934398us Takte= 648 43.934398us > Mess8 Port_WriteBit Takte= 518 35.120399us Takte= 518 35.120399us > Mess9 Schleife 10000 N128= 4520 39.233600ms N128= 4519 39.224918ms > Mess10 ULong=Ulong+1 Takte= 484 32.815200us Takte= 484 32.815200us > Mess11 ULong vergleich Takte= 713 48.341400us Takte= 713 48.341400us > Mess12 Byte Vergleich Takte= 372 25.221599us Takte= 372 25.221599us > Mess13 ADC abfrage Takte= 4008 271.742401us Takte= 2448 165.974395us > Mess14 Case abfrage Takte= 906 61.426799us Takte= 906 61.426799us > Mess15 If abfrage Takte= 2380 161.363998us Takte= 2380 161.363998us > > Mess9 mit langsameren Takt - dh die 4520*128=578560 Takte daher in ms > > > Fertiges Programm zum Ausgeben von Messungen -einfach starten- > Ergebnis erscheint an Konsole > */ > > Dim Zeitfloat As Single > Dim Timervar As Word > Dim Var As Byte ' für Tests Nr1 ++Var, und Var=Var+1 > Dim Var2 As Byte > Dim i As Integer ' For Schleife > Dim Schleife As Integer > Dim Longvar As ULong > Dim Longvar2 As ULong > Dim Pausenzeit As Word > Dim ADC_0 As Word > > #define Pausenzeit 2000 '2sec Pause zwischen den Messungen > #define Duchlaufe 3 > > Sub main() > Do While (1) > Port_DataDir(PortC,255 ) 'PortC alles Output.. zum Messen > > Msg_WriteText("Mess1 ++Var (Byte) " ) > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 > 'bei 65000 wird Int ausgelöst, hier nicht verwendet > ++Var 'hier die Prüf - Anweisungen oder ganze Programmteile > 'bis max 4,4ms 67,8ns Takt = 14,..MHz > Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > 'nun Test2: > > Msg_WriteText("Mess2 Var=Var+1 (Byte) " ) > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 > Var=Var+1 'hier die Prüf - Anweisungen oder ganze Programmteile > 'bis max 4,4ms 67,8ns Takt = 14,..MHz > Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > 'nun Test3: > > > Msg_WriteText("Mess3 2xPort_WriteBit " ) > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 > Port_WriteBit(20,1) 'hier die Prüf - Anweisungen oder ganze Programmt. > Port_WriteBit(20,0) 'PortC.4 auf 0 > 'bis max 4,4ms 67,8ns Takt = 14,..MHz > Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > 'nun Test4: > Msg_WriteText("Mess4 2xPort_WriteBit ++Var" ) > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 > Port_WriteBit(20,1) 'hier die Prüf - Anweisungen oder ganze Programmt. > ++Var 'mit Logkanalyser können die zusätzlichen 260Takte.. > Port_WriteBit(20,0) > 'bis max 4,4ms 67,8ns Takt = 14,..MHz > Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > > 'nun Test5: > Msg_WriteText("Mess5 Port_Write " ) > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 > Port_Write(PortC,255 ) 'hier die Prüf - Anweisungen oder ganze Programmt. > 'bis max 4,4ms 67,8ns Takt = 14,7456MHz > Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > 'nun Test6: > Msg_WriteText("Mess6 DirAcc_Write " ) > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 > DirAcc_Write(0x35,255 ) 'hier die Prüf - Anweisungen oder ganze Progr. > 'bis max 4,4ms 67,8ns Takt = 14,..MHz > Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > > 'nun Test7: > Msg_WriteText("Mess7 PortBit Eigenbau " ) > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 > DirAcc_Write(0x35,DirAcc_Read(0x35 Or 00010000 ) ) > 'das PortC Register wird gelesen maskiert und damit Bit 4 gesetzt > 'hier die Prüf - Anweisungen oder ganze Programmteile > 'bis max 4,4ms 67,8ns Takt = 14,..MHz > Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > > 'nun Test8: > Msg_WriteText("Mess8 Port_WriteBit " ) > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 > Port_WriteBit(20,1) 'hier die Prüf - Anweisungen oder ganze Programmt. > 'bis max 4,4ms 67,8ns Takt = 14,..MHz > Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > > 'nun Test9: hier langsamerer Takt: 8,68us > Msg_WriteText("Mess9 Schleife 10000 " ) > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,5) ' Startpunkt der Messung mit 8,68usTakt > For Schleife = 1 To 10000'hier die Prüf - Anweisungen oder ganze Progr. > ++Var > Next 'bis zu 0,56sec > Msg_Laufzeit128T() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > > 'nun Test10: > Msg_WriteText("Mess10 ULong=Ulong+1 " ) > Longvar = 4294967294 ' damit in 2. Durchlauf ein Überlauf entsteht > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 > 'hier die Prüf - Anweisungen oder ganze Programmteile > Longvar = Longvar + 1 'bis max 4,4ms 67,8ns Takt = 14,..MHz > Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > > 'nun Test11: > Msg_WriteText("Mess11 ULong vergleich " ) > Longvar = 4294967000 ' > Longvar = 4294967010 'eine hohe Zahl - es müssen alle 32 Bits vergl. > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 > 'hier die Prüf - Anweisungen oder ganze Programmteile > If Longvar2 < Longvar Then 'bis max 4,4ms 67,8ns Takt = 14,..MHz > ++Var ' hier vergleich nicht erfüllt, Var bleibt gleich > End If > Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > > > > 'nun Test12: > Msg_WriteText("Mess12 Byte Vergleich " ) > Var = 222 ' > Var2 = 243 ' > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 > 'hier die Prüf - Anweisungen oder ganze Programmteile > If Var2 < Var Then 'bis max 4,4ms 67,8ns Takt = 14,..MHz > ++Var ' hier vergleich nicht erfüllt, Var bleibt gleich > End If > Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > > > 'nun Test13: > Msg_WriteText("Mess13 ADC abfrage " ) ' > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 > 'hier die Prüf - Anweisungen oder ganze Programmteile > ADC_Set(ADC_VREF_VCC,0) > ADC_0 = ADC_Read() > > 'Takte= 4008 271.742401us Takte= 2397 162.516601us Takte= 2382 161.49.. > 'beim ersten Aufruf 4008, dann nurmehr ca 2380 > > Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > 'nun Test14: > Msg_WriteText("Mess14 Case abfrage " ) ' > Var=5 > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 > 'hier die Prüf - Anweisungen oder ganze Programmteile > Select Case Var > Case 1 > ++Var2 > Case 2 > ++Var2 > Case 3 > ++Var2 > Case 4 > ++Var2 > Case 5 > ++Var2 > Case 6 > ++Var2 > End Select > > Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > > > 'nun Test15: > Msg_WriteText("Mess15 If abfrage " ) ' > Var=5 > For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile > AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte > Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 > 'hier die Prüf - Anweisungen oder ganze Programmteile > If Var = 1 Then > ++Var2 > End If > If Var = 2 Then > ++Var2 > End If > If Var = 3 Then > ++Var2 > End If > If Var = 4 Then > ++Var2 > End If > If Var = 5 Then > ++Var2 > End If > If Var = 6 Then > ++Var2 > End If > 'ist nicht exakt mit obiger Case vergleichbar, aber ähnlich > > Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) > Next > Msg_WriteChar(13) 'CR ... Neue Zeile > AbsDelay(Pausenzeit ) 'Zeit zum ablesen > > Msg_WriteChar(13) 'CR ... Neue Zeile letzte Zusatzzeile > End While > End Sub 'main ************************************ > > > > Sub Msg_Laufzeit1 () ' Sub für Messung und Ausgabe > Timervar = Timer_T1GetCNT() - 455 ' Korr-Wert wenn kein Befehle > Msg_WriteText(" Takte= ") > Msg_WriteWord(Timervar ) ' Takte 67,8ns ... 14,..MHz > Msg_WriteChar(32 ) > Zeitfloat = Timervar * 0.0678 ' Wert in us > Msg_WriteFloat(Zeitfloat ) > Msg_WriteText("us" ) > Msg_WriteChar(32 ) > End Sub > > /* > AbsDelay(2 ) ' unbedingt notwendig!!! > Timer_T1Time(65000,1) ' Startpunkt der Messung > Msg_Laufzeit2() ' Aufruf der Sub > */ > Sub Msg_Laufzeit2 () ' nur mit 2ms Pause konstante > Timervar = Timer_T1GetCNT() - 455 ' Werte sonst 30-64us > Msg_WriteText(" Nr2= ") > Msg_WriteWord(Timervar ) ' Takte 67,8ns ... 14,..MHz > Msg_WriteChar(32 ) > Zeitfloat = Timervar * 0.0678 ' Wert in us > Msg_WriteFloat(Zeitfloat ) > Msg_WriteChar(32 ) > End Sub > > /* > AbsDelay(2 ) ' unbedingt notwendig!!! > Timer_T1Time(65000,1) ' Startpunkt der Messung > Msg_Laufzeit1() ' Aufruf der Sub > */ > Sub Msg_Laufzeit3 () ' nur mit 2ms Pause konstante > Timervar = Timer_T1GetCNT() - 455 ' Werte sonst 30-64us > Msg_WriteText(" Nr3= ") > Msg_WriteWord(Timervar ) ' Takte 67,8ns ... 14,..MHz > Msg_WriteChar(32 ) > Zeitfloat = Timervar * 0.0678 ' Wert in us > Msg_WriteFloat(Zeitfloat ) > Msg_WriteChar(32 ) > End Sub > > /* > AbsDelay(2 ) ' unbedingt notwendig!!! > Timer_T1Time(65000,1) ' Startpunkt der Messung > Msg_Laufzeit4() ' Aufruf der Sub > */ > Sub Msg_Laufzeit4 () ' nur mit 2ms Pause konstante > Timervar = Timer_T1GetCNT() - 455 ' Werte sonst 30-64us > Msg_WriteText(" Nr4= ") > Msg_WriteWord(Timervar ) ' Takte 67,8ns ... 14,..MHz > Msg_WriteChar(32) > Zeitfloat = Timervar * 0.0678 ' Wert in us > Msg_WriteFloat(Zeitfloat ) > Msg_WriteChar(32) > 'Msg_WriteChar(13) ' CR Zeilenvorschub > End Sub > > > /* > AbsDelay(2 ) ' unbedingt notwendig!!! > Timer_T1Time(65000,5) ' Startpunkt der Messung mit 8,68usTakt > Msg_Laufzeit128T() ' Aufruf der Sub > */ > Sub Msg_Laufzeit128T () ' nur mit 2ms Pause am Beginn konstante Werte !! > Schleife = Schleife + 1 - 1 ' Zeitverbrauch damit wenige Takte abgezogen > Timervar = Timer_T1GetCNT() - 1 ' Korrektur -1 > Msg_WriteText(" N128= ") ' bis zu 0,56sec > Msg_WriteWord(Timervar ) ' 128 Takte 8,68us ... > Msg_WriteChar(32) > Zeitfloat = Timervar * 0.00868 ' Wert in ms! > Msg_WriteFloat(Zeitfloat ) > Msg_WriteText("ms") > Msg_WriteChar(32) > 'Msg_WriteChar(13) ' CR Zeilenvorschub > End Sub > > /* > AbsDelay(2 ) ' unbedingt notwendig!!! > Timer_T1Time(65000,7) ' Startpunkt der Messung mit 69,44usTakt > > ************* Achtung Vor-Teiler 6 und 7 geht nicht! > > Msg_Laufzeit1024T() ' Aufruf der Sub > */ > Sub Msg_Laufzeit1024T () ' nur mit 2ms Pause konstante Werte!! > Timervar = Timer_T1GetCNT() '- 455 ' > Msg_WriteText(" N1024= ") ' bis zu 4,485sec > Msg_WriteWord(Timervar ) ' 1024 Takte 69,44us ... > Msg_WriteChar(32) > Zeitfloat = Timervar * 0.06944 ' Wert in ms! > Msg_WriteFloat(Zeitfloat ) > Msg_WriteText("ms") > Msg_WriteChar(32) > Msg_WriteChar(13) ' CR Zeilenvorschub > End Sub > > > </basic> > > > > > > > > Hallo Ernst, > > > > Deine gemessenen Takte sind zu hoch, allerdings verbrauchen Bytecodes Instruktionen > > je nach Komplexität tatsächlich 30+ Taktzyklen. Das liegt an der Harvard Architektur > > der Atmel Megas, die den Zugriff auf das Flash limitieren. Hat man im Zugriff auf das RAM > > mehrere Adressmodi und kann indiziert über X,Y,Z zugreifen, so kennt der Flashzugriff > > leider nur eine Zugriffsart. Deshalb braucht alleine der Fetch Bytecode, Lookup + Sprung > > in die Bytecode Routine ca. 30 Taktzyklen. > > > > Wenn ich dazu komme, werde ich noch ausführlicher vorstellen, was ein "Var++" oder "Var=Var+1" > > an Bytecodes benötigt. Veröffentliche doch mal das komplette Programm, wo Du die Taktzyklen > > mißt. > > > > Die neue Beta hat auch in der Geschwindigkeit Optimierungen, ich schätze das die Version ca. > > 5-10% schneller geworden ist. > > > > Der Atmel AVR32 hat Spezialbefehle für den Table Einsprung, dort wird die Bytecodeabarbeitung > > vorraussichtlich ca. 8x-10x schneller werden. > > > > Gruss Peter > > > > > Unten ein kurzes Programm zum messen von Laufzeiten - Anweisungen, Programmteile > > > Verwendet wird der 16-Bit Timer 1 > > > Ergebnis: sehr enttäuschend! > > > Var = Var + 1 (Byte) benötigt 291 Takte!!! > > > ++Var 260 Takte !!! > > > > > > Sinus von einer single etwa 3000 - ist ok, aber die einfachsten Anweisungen brauchen extrem > > > lange. Das increment einer Bytevariable immer noch 260 Tackte wofür ???? > > > > > > Portausgabe eines Bytes um die 400, mit DirAcc_Write direkt das Register beschreiben - denkste - > > > dauert genauso lange. > > > Entweder ich mache da einen ordentlichen Überlegungsfehler (wird der Tackt intern geteilt?) oder das > > > Basic ist wirklich so langsam - vorallem bei einfachsten Befehlen? > > > Übrigens PortWriteByte soll wesentlich schneller sein als PortWriteBit - etwa 400 zu etwa 550 > > > macht man das "Ausmaskieren" des Bits händisch so kommt man sicher auf wesentlich mehr, da > > > jeder einfachste Befehl unsummen an Tackten frißt. > > > > > > Dim Zeitfloat As Single > > > Dim Timervar As Word > > > > > > > > > AbsDelay(2 ) ' unbedingt notwendig!!! > > > ' nur mit 2ms Pause konstante > > > ' Werte sonst 30-64us > > > > > > Timer_T1Time(65000,1) ' Startpunkt der Messung mit 67,8ns > > > > > > 'hier die Prüf - Anweisungen oder ganze Programmteile > > > 'bis max 4,4ms > > > > > > Msg_Laufzeit1() ' Aufruf der Sub > > > */ > > > Sub Msg_Laufzeit1 () ' Sub für Messung und Ausgabe > > > Timervar = Timer_T1GetCNT() - 455 ' Korr-Wert wenn kein Befehle > > > Msg_WriteText(" Nr1= ") > > > Msg_WriteWord(Timervar ) ' Takte 67,8ns ... 14,..MHz > > > Msg_WriteChar(32 ) > > > Zeitfloat = Timervar * 0.0678 ' Wert in us > > > Msg_WriteFloat(Zeitfloat ) > > > Msg_WriteChar(32 ) > > > End Sub > > > > > > > > > > > > > > > > > > > > > > > > AbsDelay(2 ) ' unbedingt notwendig!!! > > > Timer_T1Time(65000,5) ' Startpunkt der Messung mit 8,68usTakt > > > Msg_Laufzeit128T() ' Aufruf der Sub > > > */ > > > Sub Msg_Laufzeit128T () ' nur mit 2ms Pause konstante Werte !! > > > Schleife = Schleife + 1 - 1 ' Zeitverbrauch damit wenige Takte abgezogen werden > > > Timervar = Timer_T1GetCNT() - 1 ' Korrektur -1 > > > Msg_WriteText(" N128= ") ' ******************bis zu 0,56sec ********************************* > > > Msg_WriteWord(Timervar ) ' 128 Takte 8,68us ... > > > Msg_WriteChar(32) > > > Zeitfloat = Timervar * 0.00868 ' Wert in ms! > > > Msg_WriteFloat(Zeitfloat ) > > > Msg_WriteText("ms") > > > Msg_WriteChar(32) > > > 'Msg_WriteChar(13) ' CR Zeilenvorschub > > > End Sub