1k Aufrufe
Gefragt in Anwendungen(Java,C++...) von manumanu Einsteiger_in (33 Punkte)
Ich habe Probleme mit der Lösung eines Programms für den Motorola 6809 mit dem Timer 6840.

Das Programm sollte folgende Funktion haben: Der Timer (Zähler) soll extern über den Eingang C3 ohne Frequenzteiler (1/8) getaktet werden. Dabei soll der Ausgang CB2 des Portbausteins MC6821 mit dem Takteingang C3 des Bausteins MC6840 (Timer) verbunden werden. Der Ausgang CB2 soll die Funktion eines Rechteckgenerators haben (also eine Rechteckschwingung ausgeben).
Das Auffangregister des Zählers soll dabei mit dem Wert $00FF geladen werden. Über den Signalausgang O3 des Zählers soll ein Impuls ab dem Zählerstand $00F0 des Auffangregisters bis zum Zählerstand $0000 ausgegeben werden.
Zuvor, also ab Zählerstand $00FF bis 00F1 soll eine Impulspause am Signalausgang 03 sein.
Das Auffangregister wird beim Ablaufen des Zählzyklus automatisch erneut (also zyklisch) mit dem Wert $00FF geladen.

Ich habe mein Programm unten angefügt. Der Timer wird zwar über den CB2 Ausgang getaktet, jedoch erscheint der Impuls am Ausgang O3 nur in jedem 2. Zählzyklus, statt in jedem Zyklus.
Vielleicht hatte schon jemand das Vergnügen den Motorla 6809 zu programmieren und kann mir hoffentlich weiterhelfen.


BD F1 10 JSR CLRDISP ; hier wird die Anzeige gelöscht

7F F0 19 CLR $F019 ;hier wird der Timer #3 selektiert
86 00 LDA #$00 ;Steuerregister des Timer #3 program.
B7 F0 18 STA $F018

CC 00 FF LDD #$00FF ;Auffangregsiter des Timer #3 laden
FD F0 1E STD $F01E

86 01 LDA #$01 ;hier wird der Timer gestartet
B7 F0 19 STA $F019
7F F0 18 CLR $F018

10 8E 00 55 LDY #$0005 ;für Impuls/Impulspause an CB2
86 34 LDA #$34 ;Led von CB2 aus, also Impulpause
B7 F0 03 STA $F003
BD F1 60 JSR DLY1MS ;Verzögerung für Impulspause
86 3C LDA #$3C ;Led von CB2 jetzt an, also Impuls
B7 F0 03 STA $F003
BD F1 60 JSR DLY1MS ;Verzögerung für die Länge des Impulses

FC F0 1E LDD $F01E ;Zählerstand des Auffangregisters laden
8E 00 04 LDX #$0004 ;und in der Anzeige zeigen
BD F1 23 JSR SHOWD7SG

C1 F0 CMPB #$F0 ;Vergeich ob Zählerstand bereits $00F0
27 06 BEQ ;wenn ja, dann Impuls an Signalausgang O3
C1 00 CMPB #$00 ;Vergleich ob Zählerstand bereits $0000
27 0C BEQ ;wenn ja, dann Impulspause an O3
20 DD BRA ;zurück zu Impuls und Impulspause an CB2

7F F0 19 CLR $F019 ;selektieren von Timer #3
86 80 LDA #$80 ;Steuerregister von Timer für Impuls an O3
B7 F0 18 STA $F018
20 D3 BRA ;zurück zu Impuls und Impulspause an CB2

7F F0 19 CLR $F019 ;selektieren von Timer #3
86 00 LDA #$00 ;Steuerregister von Timer für Pause an O3
B7 F0 18 STA $F018
20 C9 BRA ;zurück zu Impuls und Impulspause an CB2

13 SYNC



Vielen Dank für Eure Hilfe

Deine Antwort

Dein angezeigter Name (optional):
Datenschutz: Deine Email-Adresse benutzen wir ausschließlich, um dir Benachrichtigungen zu schicken. Es gilt unsere Datenschutzerklärung.
Anti-Spam-Captcha:
Bitte logge dich ein oder melde dich neu an, um das Anti-Spam-Captcha zu vermeiden.
...