Forum: Mikrocontroller und Digitale Elektronik Carry abfrage in Assembler


von Andy11 (Gast)


Lesenswert?

ich habe folgendermaßen versucht das Carry bit abzufrage:
1
;Mittlerer Schwellwert-----------
2
rcall  ADC_Kanal1
3
rcall    StartADC
4
        push r28
5
        clr r28
6
        in Messergebnismiddle, ADCH    ;Messe Wert auf schwarz vom mittleren LDR
7
        add r26, Messergebnismiddle    ;Summe von Wert auf Schwarz und Wert auf Weiß
8
        sbic SREG, C //ABFRAGE
9
        ldi r28, 0b10000000  
10
        mov r30, r26          ;Lade Divident in Divisionsregister r30
11
        ldi r31, 2            ;Lade Divisor in Divisionsregister r31
12
rcall      division            ;dividiere die zwei zahlen
13
        mov Schwellwertmiddle, Ergebnis  ;bringe errechneten Schwellwert in definierte Variable(Register)  
14
         add Schwellwertleft, r28
15
        push Ergebnis          ;sichere Ergebnis
16
          
17
          mov r25, Schwellwertmiddle    ;da r25 in Write EEPROM zum schreiben der Variable 
18
                          ;verwendet wird muss das Register kopiert werden  
19
          ldi ZH, 0             ;niederwertige Bit der EEPROM Adresse = 0
20
          ldi ZL, 2            ;schreibe EEPROM an adresse 1
21
rcall        Write_EEPROM          ;schreibe Wert in EEPROM
22
        
23
        pop Ergebnis          ;stelle ergebnis wieder her  
24
        subi Ergebnis, 5        ;Ausschaltschwelle (Schmitttriggerfunktion)
25
        mov Mitteaus, Ergebnis      ;Lade es in fixen SPeicher
26
        
27
          mov r25, Mitteaus        ;da r25 in Write EEPROM zum schreiben der Variable 
28
                          ;verwendet wird muss das Register kopiert werden  
29
          ldi ZH, 0             ;niederwertige Bit der EEPROM Adresse = 0
30
          ldi ZL, 5            ;schreibe EEPROM an adresse 1
31
rcall        Write_EEPROM          ;schreibe Wert in EEPROM  
32
        pop r28
33
rcall wait1        
34
;--------------------------------

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`?

von Reader (Gast)


Lesenswert?

wie wäre es mit BRCC oder BRCS ...

von Andy11 (Gast)


Lesenswert?

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

von Andy11 (Gast)


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

von spess53 (Gast)


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

von Reader (Gast)


Lesenswert?

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

von MWS (Gast)


Lesenswert?

PC = program counter

von Otto (Gast)


Lesenswert?

BRCC und BRCS

siehe: 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Vergleiche#Carry_.28C.29

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

Otto

von spess53 (Gast)


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

von Gast 23 (Gast)


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??)

von Andy11 (Gast)


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?

von spess53 (Gast)


Lesenswert?

Hi

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

MfG Spess

von Thomas (Gast)


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

von Andy11 (Gast)


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

von Andy11 (Gast)


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

von Thomas (Gast)


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

von spess53 (Gast)


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

von Reader (Gast)


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 ...

von Andy11 (Gast)


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

von Thomas (Gast)


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

von Andy11 (Gast)


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.

von Klaus (Gast)


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.

von Dr.PillePalle (Gast)


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..

von stepp64 (Gast)


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ß

von spess53 (Gast)


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

von Klaus (Gast)


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.

von Thomas (Gast)


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

von spess53 (Gast)


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

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
Noch kein Account? Hier anmelden.