Hallo, wer findet den Fehler!! Ich habe mich da irgendwie fest gebissen! Ich wollte einfach wenn eine bestimmte Adresse an Port D anliegt den Port B ansteuern. Vielen Dank Jürgen .include "4433def.inc" ;bzw. 2333def.inc ldi r16, 0xFF out DDRB, r16 ;Port B durch Ausgabe von 0xFF ins ;Richtungsregister DDRB als Ausgang konfigurieren ldi r16, 0x00 out DDRD, r16 ;Port D durch Ausgabe von 0x00 ins ;Richtungsregister DDRD als Eingang konfigurieren ldi r16, 0xFF out PORTB, r16 ;PORTB auf 0xFF setzen -> alle LEDs aus loop: in r16, PORTD ;an Port D anliegende Werte (Taster) nach r16 einlesen cpi r16, 0b00001100 rjmp loop ;Sprung zu "loop:" -> Endlosschleife ldi r16, 0b00001111 out PORTB, r16 ende: rjmp ende ;Endlosschleife
Hier ist dein Fehler falsch = in r16, PORTD ;an Port D anliegende Werte (Taster) nach r16 einlesen richtig = in r16, PIND
Neben dem Pin D Fehler hast du natürlich noch weitere drin !!! in r16, PIND ;an Port D anliegende Werte (Taster) nach r16 einlesen cpi r16, 0b00001100 ;Test ob PD2 und PD3 = H und Rest = L ;hier hast einen dem Vergleich folgenden Sprungbefehl z.b. BREQ vergessen! rjmp loop ;Sprung zu "loop:" -> Endlosschleife
Ich glaube ich habe immer noch irgendwie was falsch? loop: in r16, PIND ;an Port D anliegende Werte (Taster) nach r16 einlesen cpi r16, 0b00001100 BREQ aus rjmp loop ;Sprung zu "loop:" -> Endlosschleife aus: ldi r16, 0b00001111 out PORTB, r16 rjmp loop ;Endlosschleife
Wenn einmal die Bedingung erfüllt ist, werden PB0-PB3 auf H gelegt, dann passiert nichts mehr. Was soll das ???
Hallo, erst einmal vielen Dank für die Hilfe, ich wollte den Controller an einen eigenen Datenbus hängen der dem Controller eine Adresse gibt. Wenn die Adresse stimmt soll der Controller einfach den Ausgang beschalten.
Hallo, nach Tastendruck tut sich leider nichts. Kannst Du noch einen Fehler feststellen? Gruß Jürgen
Du fragst ja 2 Bits auf H und 6 Bits auf L ab. Evtl. solltest du eine Schaltung als Anhang posten.
Denn Programm hat doch lediglich folgende Funktion: Wenn nach Initialisierung die Bedingung an PORTB (alle 8 Bit) erfüllt ist, dann wird Port B von 0B11111111 auf 0b00001111 geändert und das Programm verharrt in einer Endlosschleife, ansonsten wird gewartet bis die Bedingung erfüllt ist. Daher ist kein Fehler im Programm sondern höchstens in deiner Funktionsdefinition.
Hallo, ich habe jetzt mal ein anderes Register genommen aber es tut sich auch nichts. Vielleicht kann es aber auch an meine Definition liegen, hast Du eine Idee? Gruß Jürgen
An Port D soll einfach nur ein Relais über ein Transistor betrieben werde. Gruß Jürgen ( Muß jetzt leider abschalten)
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.