Vielleicht gibt es hier ja noch jemand anderen der mit Padauk-Controllern immer wieder mal "spielt". Mir vergeht aber für den Moment etwas die Laune, weil ich ein Problem mit dem Timerinterrupt beim PFS154 habe... immer wieder einmal.
Ich möchte ein an sich sehr einfaches Würfelprogramm erstellen. Unter anderem soll das Programm auch Zahlensystem "lehren" und weil es gebräuchliche Zahlensystem zur Basis 2, 10 und 16 genügend gibt hier dann natürlicherweise zur Basis 6.
Also möchte ich einen 3-fach Würfel erstellen und dann eben nicht nach guter, alter Väter Sitte jede einzelne Würfelstelle bis 6 zählen und dann die nächste Stelle erhöhen, sondern von 0..215 (das sind (6^3)-1).
Hierzu habe ich dann etwas einfaches programmiert:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
Die Volatile-Variablen sind der "Fehlersuche" geschuldet, genauso wie das ab- und anschalte der globalen Interrupts.
Diese Funktion funktioniert auf Systemen (getestet) mit MCS-51, AVR, STM8, STM32.
Auch auf dem Padauk PFS154 läuft das, wenn auf dem Padauk KEIN Timerinterrupt läuft.
Das angehängte C-Programm ist in der Main etwas "zerfahren" weil ich hier Nebeneffekte untersuchen möchte.
Ein Hochzählen der einzelnen Stellen (wie ich es eben nicht möchte) funktioniert. Ginge es nur um eine Würfel, könnte man diesen so realisieren (aber eigentlich will ich die Zufallszahl nicht durch eine unterbrochene Zählschleife, sondern über einen Pseudozufallszahlengenerator mit linear rückgekoppeltem Schieberegister realisieren).
Soweit so gut (oder schlecht). Wird die Funktion "int2dices" in die Endlosschleife der Main eingehängt, hängt sich diese auf. Der Interrupt wird jedoch weiter abgearbeitet, weil die Würfelanzeigen weiterhin gemultiplext werden. Ich gehe (fälschlicherweise?) davon aus, dass auch keine 16-Bit Operation unterbrochen wird, weil ich schlicht keine verwende. Selbst ein Abschalten der Interrupts in "int2dices" hilft nicht.
Ich mache (so glaube ich) garantiert etwas mit der Timerinitialisierung und oder im Interruptvektor falsch:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
Wie gesagt: auf anderen Systemen funktioniert die Vorgehensweise ohne zu murren, nur auf dem PFS154 nicht (hier habe ich aber auch glaube ich nicht alle Informationen, die es evtl. bräuchte).
Verwendeter Compiler sind SDCC 4.1.0 und SDCC 4.3.0 (beide zeigen gleiches Verhalten, so denke ich, liegt der Fehler bei mir)
Weiß hier jemand etwas weiterführendes zu den Interrupts beim PFS154 ?

