mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Carry abfrage in Assembler


Autor: Andy11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe folgendermaßen versucht das Carry bit abzufrage:
;Mittlerer Schwellwert-----------
rcall  ADC_Kanal1
rcall    StartADC
        push r28
        clr r28
        in Messergebnismiddle, ADCH    ;Messe Wert auf schwarz vom mittleren LDR
        add r26, Messergebnismiddle    ;Summe von Wert auf Schwarz und Wert auf Weiß
        sbic SREG, C //ABFRAGE
        ldi r28, 0b10000000  
        mov r30, r26          ;Lade Divident in Divisionsregister r30
        ldi r31, 2            ;Lade Divisor in Divisionsregister r31
rcall      division            ;dividiere die zwei zahlen
        mov Schwellwertmiddle, Ergebnis  ;bringe errechneten Schwellwert in definierte Variable(Register)  
         add Schwellwertleft, r28
        push Ergebnis          ;sichere Ergebnis
          
          mov r25, Schwellwertmiddle    ;da r25 in Write EEPROM zum schreiben der Variable 
                          ;verwendet wird muss das Register kopiert werden  
          ldi ZH, 0             ;niederwertige Bit der EEPROM Adresse = 0
          ldi ZL, 2            ;schreibe EEPROM an adresse 1
rcall        Write_EEPROM          ;schreibe Wert in EEPROM
        
        pop Ergebnis          ;stelle ergebnis wieder her  
        subi Ergebnis, 5        ;Ausschaltschwelle (Schmitttriggerfunktion)
        mov Mitteaus, Ergebnis      ;Lade es in fixen SPeicher
        
          mov r25, Mitteaus        ;da r25 in Write EEPROM zum schreiben der Variable 
                          ;verwendet wird muss das Register kopiert werden  
          ldi ZH, 0             ;niederwertige Bit der EEPROM Adresse = 0
          ldi ZL, 5            ;schreibe EEPROM an adresse 1
rcall        Write_EEPROM          ;schreibe Wert in EEPROM  
        pop r28
rcall wait1        
;--------------------------------

es funktioniert aber nicht, ich habe es auch mit sbic SREG, 0 versucht 
aber das haut uchn icht hin wie kann ich sonst das c bit abfragen ohne 
dass ich mir jetzt den Befehl aus den 130 aufgelisteten raussuchen 
muss`?

Autor: Reader (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie wäre es mit BRCC oder BRCS ...

Autor: Andy11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann es vielleicht so funktionieren, weil ich kann problemlos 
kompilieren
  in Messergebnisleft, ADCH    ;Messe Wert auf schwarz vom linken LDR
        add r25, Messergebnisleft    ;Summe von Wert auf Schwarz und Wert auf Weiß
        in r28, SREG
        sbrc r28, 0
        ldi r28, 0b10000000        
        mov r30, r25          ;Lade Divident in Divisionsregister r30
        ldi r31, 2

Autor: Andy11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Conditional relative branch. Tests the Carry flag (C) and branches 
relatively to PC if C is cleared

naja ich weiß jetzt halt nicht was PC ist, ich vermute jedoch das ist 
eine Sprungmarke

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Es gibt bedingte Sprünge in Abhängigkeit vom Carry-Flag

BRCC Springe wenn C gelöscht
BRCS Springe wenn C gesetzt

MfG Spess

Autor: Reader (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BRCC - überspringe den nächsten Befehl, wenn Carry gelöscht
BRCS - springe, wenn Carry gesetzt

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PC = program counter

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BRCC und BRCS

siehe: 
http://www.mikrocontroller.net/articles/AVR-Tutori...

Du solltest die Kommentare mal überarbeiten - speziell bei den 
EEPROM-Adressen.....-.

Otto

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>naja ich weiß jetzt halt nicht was PC ist, ich vermute jedoch das ist
>eine Sprungmarke

PC ist der Program-Counter. D.h. die Adresse an der sich dein Programm 
gerade befindet.

MfG Spess

Autor: Gast 23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wie wäre es mit BRCC oder BRCS ...
Damit hat Reader recht, ich frage das Carry jedenfalls so ab,
und bei mir funktioniert es damit seit vielen Jahren.......

PC hat in diesem Falle nicht mit PC (der "Blechkiste") zu tun,
sondern ist der Programm-Counter!
(Gehört das zum µC Grundwissen??)

Autor: Andy11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>BRCC - überspringe den nächsten Befehl, wenn Carry gelöscht
>BRCS - springe, wenn Carry gesetzt

dh wenn ich nur schreibe
.
.
ADD ...
BRCC
.
.
.

dann überspringt er einfach den nächsten Befehl

und wenn ich  sage

.
.
ADD...
BRCC Hallo
.
.

Hallo:
ret

dann heißt das, wenn Carry = 0 dann springe zu Hallo ansonsten mache 
weiter, und durch das Ret passiert dann das selbe?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

BRCC/BRCS brauchen immer ein Label. Also das Ziel zum sie bei der 
Bedingung springen sollen.

MfG Spess

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast 'ne komplette Divisionsroutine in deinem(?) Quelltext, aber du 
weisst nicht, was ein PC (Program Counter) ist, oder wie man das 
Carrybit abfragt?

Solltest du dich nicht erstmal mit den Grundlagen beschäftigen, ehe du 
mit diesem Halbwissen (oder eher Viertelwissen) an die Programmierung 
machst?

Oder ist der Quelltext eventuell gar nicht von dir und du stocherst dort 
nur rum? Darfst du das überhaupt? Hat dir der Autor das erlaubt?

Kopfschüttelnd,
Thomas

Autor: Andy11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>BRCC/BRCS brauchen immer ein Label

ok also wenn ich BRCC Hallo sage dann springt er zu Hallo wenn C = 0, 
aber was macht er wenn c = 1? überspringt er dann das "zum Label 
springen" oder was macht er da, in der Hilfe kann ich das nicht wirklich 
rauslesen

Autor: Andy11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Du hast 'ne komplette Divisionsroutine in deinem(?) Quelltext, aber du
>weisst nicht, was ein PC (Program Counter) ist, oder wie man das
>Carrybit abfragt?
natürlich weiß ich was ein Programm counter ist, jedoch bin ich nicht 
draufgekommen, dass der in der Hilfe mit PC abgekürzt wird


>Solltest du dich nicht erstmal mit den Grundlagen beschäftigen, ehe du
>mit diesem Halbwissen (oder eher Viertelwissen) an die Programmierung
>machst?
Naja kommt drauf an was du unter Grundlagen verstehst, werd doch amal 
abissal genauer bitte, ansosnten denke ich, dass ich mich schon mit den 
Grundlagen auskenne wenn wir jetzt da seklbe meinen


>Oder ist der Quelltext eventuell gar nicht von dir und du stocherst dort
>nur rum? Darfst du das überhaupt? Hat dir der Autor das erlaubt?
das ist kompletter schwachsinn

lg andy

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wobei, ich sehe gerade, dass du mit dem Divisions-Unterprogramm ein Byte 
durch 2 teilst. Das ist einfaches rechtsschieben! Dafür braucht man kein 
Unterprogramm.

Der Quelltext könnte doch von dir sein ...

Immer noch kopfschüttelnd,
Thomas

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Naja kommt drauf an was du unter Grundlagen verstehst, werd doch amal
>abissal genauer bitte, ansosnten denke ich, dass ich mich schon mit den
>Grundlagen auskenne wenn wir jetzt da seklbe meinen

Bedingte Sprünge gehören zu den Absoluten Grundlagen. Ebenso z.B. der 
Unterschied zwischen einer Adresse und dem, was doert steht. Und da du 
nicht einmal das kennst hat Thomas Recht.

MfG Spess

Autor: Reader (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas (Gast)

solche Kommentare zeichnen das Forum in letzter Zeit immer häufiger aus.
Wie hast du denn angefangen ? Hast du nicht auch in fremden Codes 
herumgestochert
um sie zu verstehen ?
Kopf schüttel ...

Autor: Andy11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Bedingte Sprünge gehören zu den Absoluten Grundlagen. Ebenso z.B. der
>Unterschied zwischen einer Adresse und dem, was doert steht. Und da du
>nicht einmal das kennst hat Thomas Recht.

nun ja bedingte Sprünge is wieder so eine Sache, ich weis wie man die in 
c, basic, python, java schreibt, aber ich habe auch nicht gesagt das ich 
die Programmierung in assembler beherrsche, denn die Grundlagen sowie 
Program Counter gehören eher mehr zu Hardware würde ich sagen.
Ich lerne hier eine auf "unterem Niveau" Programmiersprache und fände es 
echt gut wenn ich auch Hilfe bekommen würde. Nicht das ich jetzt sage, 
dass mir hier nicht genug geholfen wird, im gegenteil, aber wenn ich zb 
sowas sehe

>Wobei, ich sehe gerade, dass du mit dem Divisions-Unterprogramm ein Byte
>durch 2 teilst. Das ist einfaches rechtsschieben! Dafür braucht man kein
>Unterprogramm.

>Der Quelltext könnte doch von dir sein ...

>Immer noch kopfschüttelnd,

dann frag ich mich halt wieder was son mist soll
also nochmal: Alles was ich hier im FOrum poste bzw gepostet habe, habe 
ich entwickelt, ausser vielleicht kleine Unterprogramme sowie bsplsweise 
die Division, die habe ich aus einem Toturial und habe sie so umgeändert 
wie ich wollte, ich habe es natürlich auch verstanden

lg andy

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Reader:

sicher habe ich mir auch die Codes von anderen angesehen, um daraus zu 
lernen. Jedoch habe ich nicht deren Quelltexte genommen, sie geändert 
und dann neu assembliert (nicht kopiliert, das ist was anderes).

Solche absoluten Anfängerfragen kann aber jedes Buch, oder sogar das 
AVR-Instruction Manual beantworten. Und dazu gehört dann auch das 
Durchlesen von 130 Befehlen, zu dem Andy11 wohl schon kein Bock hat. Das 
gehört nun mal aber dazu.

Und auch das Schreiben von Programmen mit 5-10 Befehlen gehört dazu. Nur 
allein um zu sehen, was die Befehle machen. SELBST AUSPROBIEREN!!! Das 
bringt den meisten Lerneffekt! AVR-Studio ist dein Freund.

Thomas

Autor: Andy11 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> Solche absoluten Anfängerfragen kann aber jedes Buch, oder sogar das
> AVR-Instruction Manual beantworten. Und dazu gehört dann auch das
> Durchlesen von 130 Befehlen, zu dem Andy11 wohl schon kein Bock hat. Das
> gehört nun mal aber dazu.
>
> Und auch das Schreiben von Programmen mit 5-10 Befehlen gehört dazu. Nur
> allein um zu sehen, was die Befehle machen. SELBST AUSPROBIEREN!!! Das
> bringt den meisten Lerneffekt! AVR-Studio ist dein Freund.

damit hast du absolut recht thomas, ich greif halt eher auf ein forum um 
sicher zu gehen auch wenn ich einen simulator habe aus irgend einem 
Grund.
kann ja sein, dass es mir dann mehr spaß macht.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andy11 schrieb:
> ich greif halt eher auf ein forum um
> sicher zu gehen auch wenn ich einen simulator habe

Ja, du lässt lieber andere für dich denken, als mal selber das Gehirn 
anzuwerfen. Wenn man mit so einer Einstellung versucht zu programmieren, 
muss man sich über blöde Kommentare im Forum nicht wundern.

Autor: Dr.PillePalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja , die schöne alte Zeit, Bildschirmtext und Datex-P,viele Bücher
die man Abends im Schein der Strassenlaterne lesen konnte.
Man musste noch selber denken und alles zu Papier bringen denn Drucker 
und Computer waren sehr sehr teuer......
Heute gibts das Wissen kostenlos und meist UMSONST im Netz und man 
wundert sich das bei den Pisa Studien nur noch Müll rauskommt  und die 
Kids nicht mehr Ausbildungsfähig sind nach ihrem Schulabschluss..

Autor: stepp64 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein erstes Assembler Programm für den U880 (Z80) habe ich noch absolut 
zu Fuss entwickelt. Da ich keinerlei Computer hatte, aber unbedingt 
dieses Lauflicht bauen wollte habe ich mir das Programm erst einmal auf 
Papier geschriebn und dann dank der Tabellen in Kieser/Meder in den Hex 
Code übersetzt. Ein freundlicher Kollege aus der F/E Abteilung hat mir 
dann den Hex-Code auf den EPROM gebrannt. Und dann ging es ans testen im 
Einzelschritt.....

Naja da lernt man dann auch was ein PC und dessen M1-Zyklus ist ;-)

Gruß

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Mein erstes Assembler Programm für den U880 (Z80) habe ich noch absolut
>zu Fuss entwickelt. Da ich keinerlei Computer hatte, aber unbedingt
>dieses Lauflicht bauen wollte habe ich mir das Programm erst einmal auf
>Papier geschriebn und dann dank der Tabellen in Kieser/Meder in den Hex
>Code übersetzt.

Kommt mir sehr bekannt vor.

MfG Spess

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich bin nicht ganz so alt, wie ihr. Ich habe mein erstes 
AVR-Programm auf dem Laptop mit AVR Studio geschrieben. ;)

Aber, lieber Andy11, das erste was ich vorher gemacht hab, war mir ein 
Buch darüber zu kaufen, das Datenblatt runterzuladen und die 
Befehlsübersicht auszudrucken. Und nicht, in ein Forum zu rennen, und 
mir alles vorkauen zu lassen, weil ich kein Bock hatte mir das Wissen 
selber anzueignen.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kieser/Meder sagt mir zwar nichts, aber auch ich begann mit Büchern. Und 
zwar welchen von Rodnay Zaks ("Programming the 6502" und "Programming 
the Z80"). Die habe ich noch heute im Regal stehen und gebe sie auf 
keinen Fall mehr her. Auch wenn sie inzwischen nur noch nostalgischen 
Wert haben ...

Die Bücher begannen ganz vorne mit dem Rechnen im Zweiersystem. Also 
wirklich vorne ... :-)

Thomas

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Kieser/Meder sagt mir zwar nichts, aber auch ich begann mit Büchern.

Kieser/Meder Mikroprozessortechnik war in der DDR praktisch die Bibel 
für U880/Z80 Assemblerprogrammierung.

MfG Spess

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.