Hallo, mein µC 4433 setzt mir die Bits des Ports C nicht mehr. Port D wird richtig gesetzt . Kann es sein, dass der Controller defekt ist ? Ich weiß zwar nicht wie oft ich ihn schon geflasht habe, aber es könnten schon 800 bis 1000 mal gewesen sein. Gibt es eine Fehlermeldung wenn der Speicher defekt ist ? Hier ein paar Zeilen aus meinem Programm. ldi r16, 0xff ;Datenbus als Ausgang konfigurieren out DDRD, r16 ldi r16, 0x01 out Portd, r16 ;Low addr Byte schicken ldi r16, 0xff Hier der Bösewicht !!! out DDRC, r16 ldi r16,0x13 out Portc, r16 nop Gruß Reinhard
Hat geklappt. Jetzt noch ein Frägelchen vorm schlafen gehen. Abfrag1: ldi r16, 0x00 out DDRD, r16 sbis Portd, 0x03 rjmp Abfrag1 Wenn die ersten beiden Bits Portd gesetzt sind wird die Schleife verlassen . Sehe ich das richtig ? In meinem Prog wird die Schleife nicht verlassen obwohl die ersten beinen High sind. Danke Reinhard
> Wenn die ersten beiden Bits Portd gesetzt sind wird die Schleife verlassen. Sehe
ich das richtig ?
Ja, aber so meinst du das nicht. ;-)
Du bist, nachdem du Anfängerfehler Nr.3 (AVCC/AGND/AREF nicht
angeschlossen...) umschifft hast, sofort auf Anfängerfehler Nr.2
gestoßen: Einlesen der anliegenden Pegel an den IC-Beinchen immer durch
Auslesen des _PIND_-Registers, nicht PORTD!!
Außerdem:
InstructionSet rauskram - SBIS A,b ;wobei b zwischen 0 und 7 liegen
muß. b gibt die Nummer des Pins an, der abgefragt werden soll.
Das heisst also konkret:
Wenn du die Pegel an PD0 und PD1 abfragen willst ((und nicht nur
wissen willst, wie _PORTD0/1_ gerade sitzt)), mußt du die
Abfragebedingung anpassen. Das geht dann nicht mehr mit einem einfachen
(wohl aber mit einem zweifachen) sbis:
sbis PIND, 0
rjmp Abfrag1
sbis PIND, 1
rjmp Abfrag1
Oder du maskierst die restlichen, uninteressanten Bits aus und prüfst
auf "0x03":
in pind, r16 // Pegel an PinD einlesen
andi r16, 0x03 // alle Bits zu Null setzten, außer Bit0 und 1
subi r16, 0x03 // 0x03 abziehen
brne Abfrag1 // wenn jetzt nicht 0 rauskommt, dann liegt an PD0/1
auch kein high an
(Die 2.Variante ist etwas länger, aber ab einer gewissen Anzahl von
abzufragenden Eingängen ist diese dann kürzer - Geschmackssache.)
Schmittchen.
Hallo, ich hänge immer noch am gleichen Problem. Beide Bits sind High. Die Schleife wird jedoch nicht verlassen. Abfrag1: ldi r16, 0x00 sbis Pind, 0x01 rjmp Abfrag1 sbis Pind, 0x02 rjmp Abfrag1 Gruß Reinhard
Noch mal korrigiert. Abfrag1: ldi r16, 0x00 out DDRD, r16 sbis Pind, 0x01 rjmp Abfrag1 sbis Pind, 0x02 rjmp Abfrag1
> Beide Bits sind High.
Welche beiden?
Dein Code fragt PD1 (sbis pind,_1_) und PD2 (sbis pind,_2_) ab. Ich
denke du willst auf PD0 und PD1 abfragen. Also Code entsprechend
anpassen.
Schmittchen.
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.