Forum: Mikrocontroller und Digitale Elektronik Timer?


von Steffen (Gast)


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

von Steffen (Gast)


Lesenswert?

achja, es handelt sich um einen 80C517A

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Wieviel %ig sicher bist du denn?

Alternativ könntest du ermitteln, mit welcher Taktrate du den 80C517A 
betreibst und alle wieviele µs der hoffentlich implementierte 
Timeroverflow-Interrupt kommt und wie der nicht gezeigte Code darauf 
reagiert ;-)

Oder schau ins Tutorial
http://www.8052.com/tutrtc.phtml

von Steffen (Gast)


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?

von Peter D. (peda)


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".


von Steffen (Gast)


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! :)

von Stefan B. (stefan) Benutzerseite


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.

von Peter D. (peda)


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

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
Noch kein Account? Hier anmelden.