Guten Tag,
ich habe folgendes Problem:
Ich will eine Binäruhr programmieren in Assembler mit einem atmega8535.
Die Schaltung ist alles kein Problem, nur mit der Programmierung hab ich etwas Probleme.
Zur Schaltung:
Ich habe 20 LED's bei folgender Aufteilung: Bild der Uhr und eine externe 1Hz Beschaltung für den Takt.
Aktuell habe ich mein Programm soweit selbst geschrieben, weiß aber leider nicht wie weit das Stimmt.
Un nun zum eigentlichen Problem:
Wie mache ich die Ausgabe an die LED's?
Programmcode bis jetzt:
Mit freundlichen Grüßen
ich habe folgendes Problem:
Ich will eine Binäruhr programmieren in Assembler mit einem atmega8535.
Die Schaltung ist alles kein Problem, nur mit der Programmierung hab ich etwas Probleme.
Zur Schaltung:
Ich habe 20 LED's bei folgender Aufteilung: Bild der Uhr und eine externe 1Hz Beschaltung für den Takt.
Aktuell habe ich mein Programm soweit selbst geschrieben, weiß aber leider nicht wie weit das Stimmt.
Un nun zum eigentlichen Problem:
Wie mache ich die Ausgabe an die LED's?
Programmcode bis jetzt:
Code:
.include "m8535def.inc"
ldi r16, 0xFF
out DDRA, r16 ; Alle Pins am Port A durch Ausgabe von 0xFF ins
; Richtungsregister DDRB als Ausgang konfigurieren
ldi r16, 0xFF
out DDRC, r16 ; Alle Pins am Port C durch Ausgabe von 0x00 ins
; Richtungsregister DDRD als Ausgang konfigurieren
ldi r16, 0xFF
out DDRD, r16 ; Alle Pins am Port D durch Ausgabe von 0x00 ins
; Richtungsregister DDRD als Ausgang konfigurieren
ldi r16, 0x00
out DDRB, r16 ; Alle Pins am Port B durch Ausgabe von 0x00 ins
; Richtungsregister DDRD als Eingang konfigurieren
ldi r18, 0x00 ; Sekunden nullen
ldi r19, 0x00 ; Minuten nullen
ldi r20, 0x00 ; Stunden nullen
ldi r25, 0xFF
ldi r26, 0x00
ldi r27, 0x00
;*******************************************************
hauptschleife:
sbic PINB,1
// rjmp stellen
mov R26,R25 ; alten Eingangspegel merken
in R25,PB0 ; neuen Eingangspegel einlesen
sbrs R25,0 ; Eingang abfragen, wenn high: überspringen
rjmp hauptschleife ; Eingang ist low --> nix zu tun
sbrc R26,0 ; Merker abfragen, wenn low: überspringen
rjmp hauptschleife ; Merker ist high --> nix zu tun
rjmp steigende_flanke
steigende_flanke: ; unsere steigende Flanke pro Sekundenimpuls
inc r18 ; addieren +1
rjmp asekunden
weiter:
cpi r18, 60 ; vergleichen
brsh minuten ; wenn 60, springe zu minuten
rjmp hauptschleife ; zurück zur Hauptschleife
minuten:
clr r18 ; sekungen löschen
inc r19 ; addieren +1
cpi r19, 60 ; vergleichen
brsh minuten ; wenn 60, springe zu stunden
rjmp hauptschleife ; zurück zur Hauptschleife
stunden:
clr r19 ; minuten löschen
inc r20 ; addieren +1
cpi r20, 24 ; vergleichen
brsh minuten ; wenn 24, springe zu clear
rjmp hauptschleife ; zurück zur Hauptschleife
clear:
clr r20
rjmp hauptschleife
;*******************************************************
/*
stellen:
hauptschleifes:
sbis PINB,1
rjmp hauptschleifes
minutens:
sbis PINB,2
rjmp stellen
inc r19 ; addieren +1
cpi r19, 60 ; vergleichen
brsh minuten ; wenn 60, springe zu stunden
rjmp hauptschleifes ; zurück zur Hauptschleife
stundens:
clr r19 ; minuten löschen
inc r20 ; addieren +1
cpi r20, 24 ; vergleichen
brsh minuten ; wenn 24, springe zu clear
rjmp hauptschleifes ; zurück zur Hauptschleife
*/
Mit freundlichen Grüßen