Gast
#1340832
Hallo, ich bastle mir gerade für C (Keil uVision) eine kleine Zeitschleife zurecht. Nun habe ich eine Funktion, wait(), und in der habe ich eine kleine Zeitschleife mit Inline Assembler gebastelt. Mein Takt beträgt 11.0592Mhz, daher ist ein MZ 1.085uS lang. Hier der Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
Mit dem CALL zu dieser Funktion und dem RET am Ende komme ich auf 922 Takte. Das Entspricht 1000,37uS, sehr genau eine Millisekunde. Funktioniert alles wunderbar, nur saß ich hierfür eine knappe Stunde dran, beim Ausprobieren und Herausfinden, wie ich soetwas überhaupt zu machen habe. Timer möchte ich nicht verwenden, da ich die mir für andere Anwendungen offen halten will. Am Ende soll das ganze ein kleiner 8Bit-Computer werden, den ich an den Fernseher anschliessen kann. Da kann man Timer immer brauchen. Einer ist sowieso schon für den UART in Verwendung. Weiss einer von euch vielleicht wie man sowas einfacher gestalten kann oder kennt ein Berechnungsprogramm für solche Zwecke? Für Assembler gibt es da ja einige, aber die bringen mir nur für die Innere Zeitschleife etwas und da auch nur bedingt, da ich die ja wieder ändern muss, jenachdem was mein Code aussenrum braucht.