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
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
sbic und sreg haben nichts miteinander zu tun. ist der pull up am taster eingeschalten?
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
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.
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 !
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
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
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
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.