Autor |
Exakte Unterbrechungen in C |
|
|
|
|
BID = 73133
X-Plod Neu hier
Beiträge: 25 Wohnort: Salzgitter
|
|
Hallo
Für mein Script habe ich eine Funktion in C geschrieben, der man einen Parameter übermittelt und diese anhand des Parameters solange warten soll. Wenn ich zum Beispiel 250 übermittle, dann soll 250 ms gewartet werden. Wenn ich 1000 ms übermittele, wird eine Sekunde gewartet.
Am Anfang hats auch gut geklappt, nur nach einem Tag stimmte der Takt nicht mehr mit dem Sekundentakt meiner Funkuhr überein. Ich denke mal, dass mein C-Programm noch anderes Zeugs in dieser Funktion hat, welches unerwünschte Taktzyklen herbeiruft (Die Vergleiche,...). Ich wollte jetzt diesen Programmteil in Assembler schreiben. Damit kenn ich mich jedoch gar nicht aus und bitte deshalb um Hilfe. Kann mir das jemand in Assembler schreiben? Nur diesen kleinen Teil. WÄre echt nett! Ich habe ein 10 MHz Oszi. Es soll halt eine Zahl übermittelt werden und soviele ms Sekunden gewartet werden.
Dankeschön!
mfg |
|
BID = 73136
Jornbyte Moderator
Beiträge: 7178
|
|
Wie übergibst du den Wert? Über den Stack oder Register, wenn Register - welche? Was haste für einen Proz im Einsatz?
Wieviele fragen sind noch offen??
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten. |
|
BID = 73137
X-Plod Neu hier
Beiträge: 25 Wohnort: Salzgitter
|
Gut, sorry.....
Hab einen ATmega8
Übergebe den Wert in ein Register -> r16
|
BID = 73170
Benedikt Inventar
Beiträge: 6241
|
Wie groß ist denn dei Abweichung ? Kann es sein, dass es an der normalen Quarztoleranz (bis zu 200ppm) liegt ?
|
BID = 73216
X-Plod Neu hier
Beiträge: 25 Wohnort: Salzgitter
|
Die Abweichung war gut eine halbe Minute!
|
BID = 73346
Jornbyte Moderator
Beiträge: 7178
|
So, da ist die Warteschleife für 1 ms in ASM mit übergabe des Wertes in R16.
ldi R17, $20
LOOP0: ldi R18, $64
LOOP1: dec R18
brne LOOP1
dec R17
brne LOOP0
ldi R17, $20
dec R16
brne LOOP0
Nur an einer Stelle muss ich die Hände heben. Es ist mir in 30 Jahren unter ASM noch nicht ein mal gelungen eine Zahl >255 in ein 8 Bit Register oder anderen Speicher zu packen.
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|