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
Gast
#426143
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
Gast
#426144
Da war wohl einer schneller ;-)
Gast
#426145
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
P3.7 toggled dabei etwa jede Stunde bei 12MHz Peter
Gast
#426191
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.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.