www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega8 sbic funktioniert nicht bei ZeroFlag =0


Autor: Patt :-) (patt)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dr, Pillepalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: max power (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sbic und sreg haben nichts miteinander zu tun.
ist der pull up am taster eingeschalten?

Autor: Patt :-) (patt)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Drachenbändiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dr, Pillepalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: Patt :-) (patt)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Patt :-) (patt)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Patt :-) (patt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,


komplettes Programm funktioniert :-)
Kleine Ursache große Wirkung ( Assembler :-) )
Danke für die Hilfe. Da merkt man doch den Unterschied zwischen mir
und erfahrenen µC-Leuten.

mfG patt

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.