ATmega8 sbic funktioniert nicht bei ZeroFlag =0

OP #1614461
Lesenswert?
• ▲
▼
Hallo,


bin bis jetzt nur ein "Leser" des sehr guten Forums gewesen.
Leider bin ich jetzt auf ein Problem gestoßen, bei dem ich nicht 
weiterkomme.
Zu meiner Person blutiger Anfänger :-)
Arbeite als Elektrotechniker und habe in der Arbeit eigentlich nur mit 
Hardware zu tun. Mit µC´s arbeite ich nur privat ( stehe noch am Anfang 
).

Zu meinem Problem.
Verwendete Hardware ATmega8 mit externen Oszillator 7,3728Mhz
Ich verwende den Befehl sbic PINC,0 um eine Taste abzufragen um danach 
das Programm verzeigen zu lassen.
Das funktioniert auch, aber leider nur wenn im SREG das ZERO-Bit
auf 1 steht.
Das sieht man im unteren Programmausschnitt. Das ich für Testzwecke
geschrieben habe.
Wenn im Zero-Flag im SREG eine 1 steht funktioniert die Abfrage.
Falls im Zero-Flag eine 0 steht arbeitet das Programm so, als ob die 
Taste gedrückt wäre.

main:

  mov  daten,anz_baud
  rcall  twi_send
  ldi  temp,0x83  ; sbic funktioniert
;       ldi     temp,0x81  ; sbic schlägt fehl
  out  SREG,temp
  sbic  PINC,0
  breq  main
        ;Taste gedrück!
  rcall  twi_send
  rcall  warte
  rcall   ausgabe_uart_help
  rcall  warte
  ldi  anz_baud,0

rjmp main

Danke für Eure Hilfe

mfG patt
Gast #1614474
Lesenswert?
• ▲
▼
moin

Sicherst du das Statusregister beim Eintritt in
 "rcall  twi_send"
und stellst du es vor dem Rücksprung wieder her ?
Weil es ist anzunehmen das einzelne Flags in dem Unterprg. geändert 
werden.

mfg
OP #1614499
Lesenswert?
• ▲
▼
Hallo,


wenn ich diesen Teil( nur für Testzwecke )

  ldi  temp,0x83  ; sbic funktioniert
  out  SREG,temp

 im Program habe funktioniert die Abfrage.

wenn ich es so mache
    ldi     temp,0x81  ; sbic schlägt fehl
    out     SREG,temp
funktioniert die Abfrage nicht.
Ich beschreibe das SREG-Regist Zero-Flag einmal mit 1 ( 0x83 )
beim nächsten Versuch mit 0 (0x81)
Wenn ne 1 drin steht funktioniert die Abfrage
Wenn ne 0 drin steht funktioniert die Abfrage nicht.

Das ist das was ich nicht verstehe.

Und ja der Pull-Up ist eingeschalten. ( nachgemessen )
Danke für eure Hilfe

mfG patt
Gast #1614510
Lesenswert?
• ▲
▼
Natürlich wissen wir nicht, was Dein Programm genau machen soll. Ich 
rate mal, dass Du statt "breq main" eigentlich "rjmp main" meinst ... 
oder? Das würde erklären, warum der Sprung nur dann geht, wenn Z=1.
Gast #1614514
Lesenswert?
• ▲
▼
Du meinst nicht das sbic sondern das breq !
Das ist klar das breq nur verzweigt wenn das z-flag gesetzt ist

'Conditional relative branch. Tests the Zero flag (Z) and branches 
relatively to PC if Z is set.'

Warum dein sbic nicht geht ? Pull up ?

Es gab aber auch mal ein fehlverhalten bei bestimmten kombinationen von 
branch und skip befehlen ob das bei den aktuellen Chips noch so ist kann 
ich dir nicht sagen , musst du mal bei atmel die erratas lesen !
OP #1614517
Lesenswert?
• ▲
▼
Hallo,
hab das Testprogramm ein bisschen umgeschrieben.
  ldi    temp,0x81
;       ldi             temp,0x83
  out    SREG,temp
main:

  sbi    PORTB,0
  sbic  PINC,0
  breq  main

  ;Taste gedrück!
  cbi     PORTB,0
rjmp main

An PORTB(0) hängt eine LED und ein OSZI.
Wenn das Programm mit SREG 0x81 läuft. Habe ich an PORTB(0) immer
ein Rechteck stehen,egal ob die Taste gedrückt ist oder nicht.
Wenn das Programm mit SREG 0x83 läuft. Habe ich an PORTB(0) bei 
gedrückter
Taste ein Rechteck, wenn die Taste nicht gedrückt ist einen High-Pegel.

Vielleicht hilft das weiter mit zu helfen.
Danke!!!

mfG patt
OP #1614519
Lesenswert?
• ▲
▼
Dr, Pillepalle schrieb:
> Du meinst nicht das sbic sondern das breq !
> Das ist klar das breq nur verzweigt wenn das z-flag gesetzt ist
>
> 'Conditional relative branch. Tests the Zero flag (Z) and branches
> relatively to PC if Z is set.'

Oh Oh :-/
DANKE DANKE DANKE!!!!!!
keine Ahnung warum hab das total übersehen.

mfG patt

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.