Hallo, gibt es mit asm eine einfache Möglichkeit einen Portpin von Eingang auf Ausgang und von Ausgang auf Eingang zu schalten? Ersteres geht ja noch relativ einfach mit schieben, wie ist es aber beim Zweiten?
Bruno M. schrieb: > relativ einfach mit schieben, wie ist es aber beim Zweiten? Wenn es mit CBI nicht geht, mal mit ziehen versuchen.
Bruno M. schrieb: > Hallo, > > gibt es mit asm eine einfache Möglichkeit einen Portpin von Eingang auf > Ausgang und von Ausgang auf Eingang zu schalten? Hast du schon die zahlreichen Tutorials gelesen, e.g. https://www.mikrocontroller.net/articles/AVR-Tutorial:_Logik Du sagst nicht ueber deine Architektur, hier also mal AVR. > Ersteres geht ja noch > relativ einfach mit schieben, wie ist es aber beim Zweiten? Mit Schieben hat das nichts zu tun. leo
Bruno M. schrieb: > gibt es mit asm eine einfache Möglichkeit einen Portpin von Eingang auf > Ausgang und von Ausgang auf Eingang zu schalten? Ja. > Ersteres geht ja noch > relativ einfach mit schieben, wie ist es aber beim Zweiten? Weder für das eine noch für das andere muss man irgendwas schieben. Maximal zur Assemblierungszeit, wo's wirklich niemanden interessiert... Ob's noch was besseres gibt als das, was dieses Schieben zur Assemblierungszeit erfordert, kann man nur herausbekommen, wenn du dich auf eine Zielarchitektur festlegst... Möglicherweise ist es sogar nötig, den konkreten Port zu spezifizieren... Assembler ist easy. Schwierig ist die Hardware...
das ist mir zu theoretisch: im Moment mache ich es so:
1 | in temp, DDRA |
2 | ori temp, 0b01000000 |
3 | out DDRA, temp |
4 | |
5 | |
6 | in temp, DDRA |
7 | andi temp, 0b10111111 |
8 | out DDRA, temp |
geht es auch einfacher?
S. Landolt schrieb: > Da es sich augenscheinlich um AVR8 handelt Hähä, ich kenne mindestens drei andere Architekturen, wo das ebenfalls gültiger Code wäre...
super, danke! Ich dachte das geht nur um Ports ein- bzw. auszuschalten. Das man damit auch Richtunsbits schalten kann war mir neu.
> Hähä, ich kenne mindestens drei andere Architekturen
Mag sein, aber ich kenne hier nur einen brumay, haha.
Bruno M. schrieb: > super, danke! > > Ich dachte das geht nur um Ports ein- bzw. auszuschalten. Das man damit > auch Richtunsbits schalten kann war mir neu. Dann lies' endlich diese Scheiß-InstructionSetReference. Dann wirst du feststellen, dass das selbst auf AVR8 nicht für jeden Port funktioniert, weder für den Port selber noch für das zugeordnete Direction-Register.
S. Landolt schrieb: >> Hähä, ich kenne mindestens drei andere Architekturen > > Mag sein, aber ich kenne hier nur einen brumay, haha. Troll? Meine KI zeigt nur 86% Wahrscheinlichkeit, also praktisch vernachlässigbar. Mir selber ist der Nick auch nicht erinnerlich. Die Frage ist: kam das jetzt tatsächlich von S. Landolt... Nix ist sicher...
Das kam sehr wohl von mir, c-hater, und ganz offen&ehrlich: manchmal öden Sie mich an.
S. Landolt schrieb: > Das kam sehr wohl von mir, c-hater, und ganz offen&ehrlich: manchmal > öden Sie mich an. Das verstehe ich jetzt nicht. Was hast du an meinem Einwand auszusetzen, dass das gezeigte Stück Code nicht ausreicht, um auf eine Architektur schließen zu können? Und was hast du an meinem Einwand auszusetzen, dass cbi/sbi halt auch auf AVR8 nicht für jeden Port funktionieren?
Ihr unsäglicher, allzu oft beleidigender Umgangston, seit neuestem diese alberne "KI-Troll-Wahrscheinlichkeit". Dass ich rein fachlich sehr viel von Ihnen halte, das ist bekannt und bedarf keiner weiteren Erwähnung (solange Sie nicht gerade von Wegwerf-Einmalsteckbrettern schwadronieren).
> ... dass cbi/sbi halt auch > auf AVR8 nicht für jeden Port funktionieren Das wird Bruno M. dann doch früh genug gemeldet bekommen, wenn er einen solchen Fall zu assemblieren versucht. Er wollte eine simple Antwort auf eine simple Frage, nicht die AVR8-Welt erklärt haben. Und ja, Ihr Einwand war berechtigt: jeder, der in die Assemblerprogrammierung einsteigt, sollte frühzeitig, in einer ruhigen Stunde, das 'Instruction Set Manual' zumindest grob Befehl für Befehl durchgehen, um einen Überblick über das Verfügbare zu erhalten. Aber das lässt sich doch auch anders sagen als mit "lies' endlich diese Scheiß-InstructionSetReference".
S. Landolt schrieb: > Ihr unsäglicher, allzu oft beleidigender Umgangston Wo genau hier in diesem Thread? > seit neuestem diese > alberne "KI-Troll-Wahrscheinlichkeit". Das sind tatsächlich die Ergebnisse einer KI. Es ist sicher immer noch so, dass die manchmal völlig albern sind. Im Allgemeinen liegt sie aber doch schon sehr gut. Und sie wird ständig besser... > solange Sie nicht gerade von > Wegwerf-Einmalsteckbrettern schwadronieren Du hast noch keine Steckbretter der DDR der späten 70er Jahre benutzt, scheint mir, sonst würdest du nicht von "schwadronieren" reden, sondern mir unmittelbar zustimmen... Kann sein, dass heutige besser sind. Fakt ist aber: sie können prinzipbedingt nicht besser sein als Löten. Wenn du das abstreitest, hast du dich von jetzt auf gleich vollkommen disqualifiziert...
Du kannst mit cbi sbi alle wichtigen IO-Register umschalten. Je weiter weg du vom Elementaren kommst, desto höher ist die Wahrscheinlichkeit, dass es fehlschlägt. Welche Register via cbi/sbi zugreifbar sind findest du zum jeweiligen AVR-Bauteil in seinem Datenblatt unter "Register Summary". Anscheinend fehlt bei dir aber noch viel Grundlagenwissen. Deshalb probiere einfach aus, womit du cbi/sbi verwenden kannst und womit nicht. Der Compiler gibt dir eine Fehlermeldung raus, wenn du auf ein Register zugreifen willst, was "zu weit weg ist". Die Register DDRx PORTx PINx gehen aber natürlich alle, und noch viele weitere. Assembler ist toll.
Timmy schrieb: > Die Register DDRx PORTx PINx gehen aber natürlich alle, Das gilt zwar fast überall, aber nicht ganz. Beim Atmega64 geht es beispielsweise nicht mit PORTF und PORTG sowie den dazugehörigen DDR- und PIN-Registern.
Interessant. Ich nutze die atmegas nicht aktiv, sondern nur die tinys und, wenn es mal was stärkeres sein muss, direkt die xmegas. Bei den xmegas gibt es auch die Eigenart, dass nur 4 ports via sbi/cbi zugreifbar sind. Dort kann ich aber mit PORTCFG_VPCTRLx selbst bestimmen, welche Ports ich im IO-Space haben will. Die xmegas haben aber auch noch viel mehr Register für die IO-Ports. PORTx_DIR PORTx_DIRSET PORTx_DIRCLR PORTx_DIRTGL PORTx_OUT PORTx_OUTSET PORTx_OUTCLR PORTx_OUTTGL PORTx_IN PORTx_INTCTRL PORTx_INTMASK PORTx_INTFLAGS PORTx_REMAP PORTx_PINxCTRL Die xmegas sind einfach genial.
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.