Hallo, ich würde gerne die LED LED0 im 500ms-Frequenz blinken lassen. Wie würde dazu der passende Assembler-Code aussehen? Finde keine passenden Zeitfunktionen. Danke im Vorraus! Dominik
Welcher Atmel, AT89C51ED2 ? LED0 hat kein MC, er hat nur Portpins, an die man LEDs anschließen könnte. Dann hat er noch Timer, mit denen man CPU-Takte zählen lassen kann. Oder man zählt in Schleifen mit den 8 Registern. Wie weit man zählen muß für 500ms, hängt vom Quarz ab. Peter
Du kannst dir bei gegebener Taktfrequenz die anzahl an Befehlen während 500ms ausrechnen und ebensoviele NOP Befehle einfügen ;-), oder du zählst zB in einer schleife ein register hoch und überprüfst wann es einen bestimmten wert erreicht hat (dazu musst du aber wissen wie lange ein Schleifendurchlauf dauert - geht zB mit Simulator oder du schaust dir an welcher Befehl wie viele Taktzyklen braucht), oder Möglichkeit #3 du liest dich in die verwendung von Timer/Counter ein. lg Stefan PS: So weit meine erfahrungen - bin aber eher ein Anfänger
Eine Möglichkeit waere es es eine Variable zu erhoehen / verkleinern , diese abzufragen und dann bedingt zu springen. Falls dein AVR mit einem 1MHz Takt arbeitet koenntest du auch 500k mal "nop" in deinen Code tippen. Gruß, Dirk
Hier mal ein einfaches Programm, welches alle Pins togglen läßt:
1 | start: |
2 | djnz p0, start |
3 | djnz p1, start |
4 | djnz p2, start |
5 | djnz p3, start |
6 | jmp start |
P3.7 toggled dabei etwa jede Stunde bei 12MHz Peter
Im Anhang findest Du meine Timer_Lib (Timer2/8Bit) ohne Interupt in ASM für einen 8MHz Takt. Für eine andere Clock mußt Du es halt anpassen.
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.