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 programmieren 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 Erzeugen des Impulses/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 die Länge der Impulspause 86 3C LDA #$3C ;Led von CB2 jetzt an, also Impula 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 Signalausgang 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 Impulspause 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
> 27 06 BEQ ;wenn ja, dann Impuls an Signalausgang O3 > 27 0C BEQ ;wenn ja, dann Impulspause an Signalausgang O3 > 20 DD BRA ;zurück zu Impuls und Impulspause an CB2 Irgendwie fehlt da was.
Rufus t. Firefly schrieb: >> 27 06 BEQ ;wenn ja, dann Impuls an Signalausgang O3 >> 27 0C BEQ ;wenn ja, dann Impulspause an Signalausgang O3 >> 20 DD BRA ;zurück zu Impuls und Impulspause an CB2 > > > Irgendwie fehlt da was. Ja möglich, ich frage mich nur was. Wenn ich den Timer stoppe und danach die Signalausgang O3 auf High stelle und den Timer wieder starte, dann funktioniert er auch nicht korrekt. Vielleicht sollte ich versuchen den Takt, welcher ja durch den Ausgang CB2 ausgegeben wird zu stoppen, wenn ich die Signalausgabe ändere. Aber vielleicht hat noch jemand einen besseren Tipp. Vielen Dank
Was Rufus t. Firefly meint, ist: Hier fehlt das Sprungziel. Es gibt auch keine symbolischen Adressen, sogar die absoluten Adressangaben fehlen. Der Codeausschnitt schaut eher aus wie ein disassemblierter Code, der nachträglich kommentiert wurde, weil so schreibt niemand seinen Quelltext. Ist auch wesentlich schwerer zu lesen und zu verstehen.
Man Nnn schrieb: > 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. > > Sorry, ich habe das Programm mit den Sprungmarken ergänzt. 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 programmieren 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 Erzeugen des Impulses/Impulspause an C 86 34 Zurück LDA #$34 ;Led von CB2 aus, also Impulspause B7 F0 03 STA $F003 BD F1 60 JSR DLY1MS ;Verzögerung für die Länge der 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 Impuls ;wenn ja, dann Impuls an Signalausgang O3 C1 00 CMPB #$00 ;Vergleich ob Zählerstand bereits $0000 27 0C BEQ Pause ;wenn ja, dann Impulspause an Signalausgang 20 DD BRA ;zurück zu Impuls und Impulspause an CB2 7F F0 19 Impuls 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 ;zurück zu Impuls und Impulspause an CB2 7F F0 19 Pause CLR $F019 ;selektieren von Timer #3 86 00 LDA #$00 ;Steuerregister von Timer für Impulspause an B7 F0 18 STA $F018 20 C9 BRA Zurück ;zurück zu Impuls und Impulspause an CB2 13 SYNC Vielen Dank für Eure Hilfe
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.