Warum funktioniert das nicht?

Gast #59959
Lesenswert?
• ▲
▼
Ach, so, so wäre es richtiger und kürzer:

LOOP:
  sbis  PIND, 1  ; Wert hängt davon ab, welchen Pin Du benutzt
  rjmp  LOOP
  cbi  PORTB, 1

Dein Programm verläßt die LOOP-Schleife nie.

Gruß, Frank
Gast #59962
Lesenswert?
• ▲
▼
hi!

ich hab zwar keine Ahnung von Assembler, aber könnte es so
funktionieren? :
;*****************************************************
loop:
      in r16, PIND
            ldi r17,0x1
            cpse r16,r17
                     ;hier rjmp auslassen
      cbi PORTB,1         ;LED 1 ein
      rjmp loop
;******************************************************

MFG Nik
Gast #59963
Lesenswert?
• ▲
▼
Sorry, meine Aussage war in der Tat nicht vollständig. Also, entweder
liest Du in r16 keine 1 ein und damit wird die Schleife nie verlassen
oder Deine LED wird nicht mit Low-Pegel, sondern mit High-Pegel
eingeschaltet (also CBI durch SBI ersetzen).

Gruß, Frank
Gast #59966
Lesenswert?
• ▲
▼
Ich lese schon das richtige ein,mein Problem ist das die ganze
Geschichte im AVR-Simulator funktioniert,bloss nicht im AVR.
Nik,ich glaube wenn ich rjmp auslasse dann macht er mir die LED sifort
an,die soll aber erst dann angehen wenn r16 gleich r17 ist,also
wenn bit 1 an PIND gesetzt ist.

Vitali.
Gast #59968
Lesenswert?
• ▲
▼
Also ich habe schon alles ausprobiert,hi und lo Pegel getauscht u.s.w.
Es tut sich einfach nichts,im Simulator funktionierts aber,ich weiss
auch nicht,am AVR kanns nicht liegen,den habe ich auch schon
getauscht.

Vitali.
Gast #59969
Lesenswert?
• ▲
▼
Es ist doch zum junge Hunde kriegen :-(
Dann setz doch verdammt noch mal den vollständigen Code hier rein, ist
das so schwierig? Da kann man doch wirklich die Lust verlieren.
Immer wieder dasselbe Theater, thread geschlossen für mich.
Gast #59974
Lesenswert?
• ▲
▼
@crazy horse: Gute Idee, ich denke auch, daß die Eingänge nicht auf
definierten Pegeln liegen. Aber die Pull-Ups ziehen alle Eingänge auf
"1" und da wird die Abfrage mit "0x1" auch nicht funktionieren, da
Bit 1-7 auf low liegen müssen.
@Vitali: Bei der Abfrage mit cpse mußt Du alle 8 Pins des PORTD auf
definierte Pegel legen. Wie sieht Deine Hardware aus?
Gast #59977
Lesenswert?
• ▲
▼
Wenn Du einen Port-Pin des Controllers als Eingang definierst, wird er
hochohmig. Das wiederum bedeutet, daß er alle möglichen Einstreuungen
einfängt. Wenn Du nun mit "0x01" vergleichst, muß Pin 0 des
Eingangsports auf logisch "1" und alle anderen Bits auf logisch "0"
liegen. Hast Du beispielsweise einen der Port-Pins nich beschaltet bzw.
auf definiertem Pegel (GND oder VCC) liegen, wird diese Bedingung nie
erfüllt. Im Simulator kannst Du die Pegel der Portpins einfach mit
einem Häkchen ändern - in der Realität sieht das anders aus.
Gast #59978
Lesenswert?
• ▲
▼
Ergänzung: die aktivierten pullups (PORTx=0xff) bewirken, dass der
ansonsten offenen Eingang H-Pegel bekommt, ein Schalter nach Masse
bewirkt dann einen L-Pegel (beim STK500 ist das so, falls du diese
Schalter nimmst).
Dein Programm müsste dementsprechend so aussehen:
sub1:
in r16, PIND
ldi r17,0b11111110  //!!!!!!!!!!
cpse r16,r17
jmp sub2
cbi PORTB,1         ;LED 1 ein
rjmp loop

Das ist der ganz Knackpunkt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.