Ist er kaputt ?

Gast #16185
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
Gast
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
Gast
> 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.
Gast
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
Gast
> 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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 24 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.