Timer?

Gast #551246
Lesenswert?

Hiho,

habe noch nicht viel Ahnung von Assembler und habe die aufgabe gekriegt 
zwei Sieben-Segment-Anzeigen anzusteuern und die angezeigte Zahl jede 
Sekunde um eins zu erhöhen!

ich bin mir jedoch nicht sicher ob es so 100%ig richtig ist!?

mov th1, #high(-50000)     //Timer initialisierung
mov tl1, #low(-50000)
mov tmod, #0x10         //Timer Modus setzen
setb et1
setb eal
Gast #551258
Lesenswert?

Also, standartmäßig hab ich eine Taktrate von 12Mhz!

den Code würde ich gerne hier reinstellen, nur habe ich selber noch 
probleme wie ich den umzusetzen habe! -_-

um z.b. eine fünf auf meiner anzeige auszugeben muss ich
an meine Port 4 ja eine Hex.zahl übergeben:
mov p4, #0x6d   //fünf

wo sollte ich denn die hexwerte für die einzelnen zahlen denn am besten 
hinterlegen?
#551271
Lesenswert?

Steffen wrote:
> Also, standartmäßig hab ich eine Taktrate von 12Mhz!

Ja, dann solltest Du ja rauskriegen, welche Zeit nach 50000 Zyklen 
vergangen ist.


> wo sollte ich denn die hexwerte für die einzelnen zahlen denn am besten
> hinterlegen?

Schau dir einfach mal den Befehl "MOVC A,@A+PC" an, ideal für ne 
7S-Wandlungsroutine.

Und da es 2 Ziffern werden sollen, ist "DIV AB" auch ganz nützlich.


Peter

P.S.:
Es gibt keine "stehenden Arten".

Gast #551276
Lesenswert?

Habs jetzt

main:
clr tr1
mov th1, #high(-50000)
mov tl1, #low(-50000)
setb tr1
inc a
CJNE a,#0x05,main
jmp zaehlen

 -50000 entspricht 20ms!

Habe da leider was falsches geschrieben, es soll eine vierstelliger BCD 
Zahl sein!
schonmal dank, ich werd mal mein Glück versuchen! :)
Persönliche Seite #551277
Lesenswert?

In das Tutorial hast du nicht lange rein geschaut, gell ?-)

Lass die Anzeige jetzt mal Anzeige sein und kümmere dich als erstes um 
das funktionierende Timer-Grundgerüst. Wenn du das so schreibst, dass 
nach 1s eine Unterroutine mit einer Nutzfunktion aufgerufen wird, kannst 
du das universell halten.

Im ersten Schritt würde ich als Nutzfunktion nur eine LED toggeln 
(AN=>AUS und umgekehrt). Damit siehst du gut und schnell, ob es 
grundsätzlich funzt.

Später klinkst du als Nutzfunktion eine Routine fürs Hochzählen von 
Variablen (Tipp vgl. Tutorial...) und fürs Anzeigen auf der 
Segementanzeige ein.
#551283
Lesenswert?

Steffen wrote:

> Habe da leider was falsches geschrieben, es soll eine vierstelliger BCD
> Zahl sein!

16Bit Werte zerlegen geht im Prinzip auch mit dem DIV Befehl, ist aber 
etwas tricky.

Einfacher zu durchschauen ist da die Subtrakionsmethode mit 
Zehnerpotenzen.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren