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
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
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?
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".
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! :)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.