Ich fange an Assembler zu lernen, und ich habe diesen Zweifel. Ich habe das folgende CodesegmentSBIC-Anweisung in AVR Assembler
LDI R16, 0
OUT DDRB, R16 ; Configures port B as an input port
SBIC PORTB, 0
LDI R18, 0xAA
OUT PORTC, R18
RETI
ich gelesen habe, was SBIC
tut, ist die Überprüfung (in diesem Fall), wenn das Bit 0 von Port B ist klar. Wenn dies der Fall ist, überspringt es die nächste Anweisung.
Meine Fragen sind:
1) Ist OUT DDRB, R16
Schreib 0'en in alle Bits von Port B oder ist es nur eine Konfigurationsanweisung aber es funktioniert nicht Schreib etwas? Mit anderen Worten: Sind die Bits von Port B alle auf 0 gesetzt?
2) Wenn sie alle auf 0 gesetzt sind, wird die Anweisung nach SBIC
übersprungen. Aber wird nur die erste Anweisung, die als nächstes kommt, übersprungen, oder wird alles bis RETI
erreicht?
Wie der Kommentar sagt, konfiguriert es den Port als Eingabe. Es schreibt nichts. 'SBIC' liefert, was auch immer die an den Port-Pins angeschlossene externe Schaltung liefert, und überprüft nur ein einzelnes Bit und überspringt auch nur einen einzelnen Befehl. Dies ist alles in der Anleitung geschrieben. – Jester
Ist es nicht möglich, 1 und 0 in die Pins eines Ports zu schreiben, mit so etwas wie 'LDI R16, 0xFF' und dann' OUT PORTA, R16'? In diesem Fall hängt das, was 'SBIC' zurückgibt, nicht von der externen Schaltung ab, oder bin ich falsch? Und noch eine letzte Sache: Ist es möglich zu wissen, ob 'SBIC' die nächste Anweisung mit genau dem Codeabschnitt überspringt, den ich in der Frage geschrieben habe? – Tendero
Wenn der Port als Eingang konfiguriert ist, steuert das Schreiben in der Regel das interne Pull-Up (aber vergewissern Sie sich bitte in Ihrer speziellen Chip-Dokumentation). Nein, Sie können nicht sagen, ob 'SBIC' übersprungen wird oder nicht. Wenn du könntest, gäbe es keinen Sinn, es dort zu benutzen. – Jester