Hallo, ich bin seit kurzem daran, mich mit der Assemblerprogrammierung eines ATmega8A auseinanderzusetzen. Ich habe mir zunächst zu Lernzwecken das AtmelStudio Version 6.1.2440 - beta auf meinen Rechner (XP, SP3) installiert. Nun scheitere ich bei einer "Pipifax-Simulation". Ich habe folgenden Code: .EQU NULL = 0 in r16,PINB ; Zustand des Eingabeports lesen andi r16,0b00000001 ; oder $01 oder 0x01 oder 1 << PIND0 breq NULL Als Simulator verwende ich den internen Simulator des AtmelStudios. Ich starte mit F10 (debugging, stepover) Der Simulator hält automatisch am ersten Befehl. Ich setze jetzt im I/O-View sämtliche Bits an PINB. Danach betätige ich erneut F10. Der Programmcounter zeigt nun 2 Zyklen an. Im Register r16 steht immer noch 0x00. (Ich habe einen entsprechenden Screenshot mit angefügt und dementsprechende Markierungen im Bild vorgenommen.) Warum ist das so? Habe ich irgendwas nicht berücksichtigt? Wenn ich mit F10 weiter steppe, gelange ich wieder an den Anfang des Programms und der Wert von PINB wird auch beim weitersteppen richtig ins Register r16 übertragen. Mir tun sich hier ein paar ??? auf.... Danke für konstruktive Beiträge in voraus! Gruß, Bernd
Wenn Du den pegel an Port Pins änderst, wird der neue Wert erst beim übernächsten befehl "sichtbar". Schau mal ins Datenblatt des ATtiny13 auf Seite 43. Dort ist ein Blockschaltbild von den I/O Pins abgebildet. Lesezugriffe laufen über den "Snychronizer", der diese Verzögerung bewirkt.
@ Stefan Frings Vielen Dank für Deine schnelle Antwort. Das hat mir sehr weitergeholfen. Ich habe es - dank Deines Hinweises auf das Datenblatt - ebenfalls im Datenblatt des ATmega8A auf den Seite 50-53 recherchieren können. P.S.: Mein Codebeispiel war aus dem Fachbuch "Mikrocomputertechnik mit Controllern der Atmel AVR-SISC-Familie" von Günter Schmitt. Leider wird im Buch direkt in Assembler ohne Hinweis auf das Datenblatt eingestiegen. Dadurch ist mir das passiert :-(. Im AVR-Tutorial habe ich auch noch einen Abschnitt zur Thematik gefunden: http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen#Eingabe Gruß, Bernd
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.