Dies ist ein Beispielproblem in meinem Buch. Unter der Annahme, dass Pin 5 von Port 4 mit einem Verstärker verbunden ist, der einen Lautsprecher ansteuert, wird die Lösung wie folgt angegeben:
Die Frequenz des mittleren C ist
Das Programm zur Erzeugung einer Rechteckwelle mit dieser Periode lautet:
LOOP1: OUT 4H ;Send bit to speaker
MVI C,86H ;Set count to 134
LOOP2: DCR C ;Count down
JNZ LOOP2 ;Test count
CMA ;Reset bit 5
NOP ;Fine tune
NOP ;Fine tune
JMP LOOP1 ;Go for next half cycle
Die Anzahl der T-Zustände ist gegeben als OUT (10), MVI (7), DCR (4), JNZ (10, falls wahr, sonst 7), CMA (4), NOP (4), JMP (10).
Mit einer Taktfrequenz von 1 MHz läuft LOOP2 (für Halbzyklen) 1912 Mikrosekunden, was nahe genug ist. LOOP1 sollte erneut ausgeführt werden und das Komplement von dem senden, was zuvor in Bit 5 von Port 4 war. Aber ich denke, das ist nicht der Fall.
Wenn LOOP2 endet, hat der Akku 00H vom C-Register übrig. CMA ändert den Akku in FFH. NOP und JMP ändern den Akku nicht. Dann iteriert der LOOP1 für den nächsten Halbzyklus, OUT sendet den Akkumulatorinhalt jedes Mal an Port 4, dh FFH, dessen Bit 5 jedes Mal 1 ist. Es gibt also keine Rechteckwelle, sondern nur ein hohes Signal. Wie erzeugt es dann ein mittleres C?