Guten Tag, Ich hoffe ich bin im richtigen Forum. Bin jetzt komplett neu in die Microcontrollerwelt eingestiegen und egal was man in dem Zusammenhang bei google sucht, diese Seite ist fast immer mit dabei. Hab mich deswegen jetzt mal angemeldet und hoffe, dass ihr mir bei meinen warscheinlich nicht allzu schweren Fragen beisteht. Ich habe den Microcontroller ADuC814 an den an einem Pin 2 Schieberegister in Reihe angeschlossen sind. Mein einziges Problem ist es bis jetzt in C ein Bit rauszuschieben, es gibt ja nur char, int etc. Wenn ich also zB ein Integer mit 16bit auf die Schieberegister ausgeben will. Wie mach ich das, bzw wie gebe ich überhaupt allgemein ein Bit aus? Wäre echt nett, wenn mir da schnell jemand helfen könnte.
:
Verschoben durch Moderator
dasdsdas dasdasdas schrieb: > will. Wie mach ich das, bzw wie gebe ich überhaupt allgemein ein Bit > aus? Bitmanipulation In aller Kürze: Du identifizierst, ob in deinem zu untersuchenden Byte das betreffende Bit gesetzt ist und wenn ja, schaltest du das Bit am Ausgabeport auf 1 (bzw auf 0, wenn das Bit nicht gesetzt ist). D.h. du 'gibst nicht das Bit aus', sondern du stellst das Bit am Ausgabeport auf denselben Wert wie das Bit, das du ausgeben willst. Und für 16 Bit: Eines nach dem anderen.
dasdsdas dasdasdas schrieb: > Kannst du mir dafür einen Beispielcode geben ?
1 | if( bit ist gesetzt ) |
2 | setze Ausgabebit auf 1 |
3 | else |
4 | setze Ausgabebit auf 0 |
Sorry. Aber das ist so dermassen Grundlage in der µC-Progammierung, das musst du selber (auch mithilfe des Links) hinkriegen. Ein Bit setzen, ein Bit löschen, ein Bit abfragen; das alles sind Grundfertigkeiten. Und ausserdem weiß ich nicht, wie am ADuC814 die Zugriffssyntax für Ports aussieht.
Als kleine Hilfe kannst du auch mal ein Software-SPI ansehen. Dort wird die selbe Funktionalität abgebildet. Aber wie es Karl Heinz schon sagte: es ist absolute Grundlage, da wird dir keiner einen Beispielcode dafür geben.
dasdsdas dasdasdas schrieb: > heisst ich kann einfach zuweisen, also z.B. P1 = 0; ? Ja, das kannst du. Wenn für deinen Compiler P1 definiert ist, und diesem P1 eine 0 zugewiesen werden darf. Ein einzelnes Bit eines Ports wird beim 8051 aber gern mit sowas wie z.B. P1.2 angesprochen.
guest schrieb: > Wer kriegt denn nun das Bit ausgegeben? Ohne Compiler-Intrinsics: PORTA = (1 << BITPOS);
random schrieb: > guest schrieb: >> Wer kriegt denn nun das Bit ausgegeben? > > Ohne Compiler-Intrinsics: > PORTA = (1 << BITPOS); OMG, es gibt einfach merkwürdige Leute. Die verstehen gar nix. Köstlich.
Grml schrieb: > random schrieb: >> guest schrieb: >>> Wer kriegt denn nun das Bit ausgegeben? >> Ohne Compiler-Intrinsics: >> PORTA = (1 << BITPOS); > OMG, es gibt einfach merkwürdige Leute. Die verstehen gar nix. Köstlich. Richtig, denn der 8051 hat keinen Port A! ;-)
Lothar Miller schrieb: > Grml schrieb: >> random schrieb: >>> guest schrieb: >>>> Wer kriegt denn nun das Bit ausgegeben? >>> Ohne Compiler-Intrinsics: >>> PORTA = (1 << BITPOS); >> OMG, es gibt einfach merkwürdige Leute. Die verstehen gar nix. Köstlich. > Richtig, denn der 8051 hat keinen Port A! ;-) Genau, sowas sollte nicht passieren, wie peinlich ;-)
Grml schrieb: > Lothar Miller schrieb: >> Grml schrieb: >>> random schrieb: >>>> guest schrieb: >>>>> Wer kriegt denn nun das Bit ausgegeben? >>>> Ohne Compiler-Intrinsics: >>>> PORTA = (1 << BITPOS); >>> OMG, es gibt einfach merkwürdige Leute. Die verstehen gar nix. Köstlich. >> Richtig, denn der 8051 hat keinen Port A! ;-) > > Genau, sowas sollte nicht passieren, wie peinlich ;-) Darum gings aber gar nicht :-) Lies noch mal genau! Das steht nicht 'Wie'. Da steht 'Wer'.
Karl Heinz Buchegger schrieb: > Grml schrieb: >> Lothar Miller schrieb: >>> Grml schrieb: >>>> random schrieb: >>>>> guest schrieb: >>>>>> Wer kriegt denn nun das Bit ausgegeben? >>>>> Ohne Compiler-Intrinsics: >>>>> PORTA = (1 << BITPOS); >>>> OMG, es gibt einfach merkwürdige Leute. Die verstehen gar nix. Köstlich. >>> Richtig, denn der 8051 hat keinen Port A! ;-) >> Genau, sowas sollte nicht passieren, wie peinlich ;-) > Darum gings aber gar nicht :-) > Lies noch mal genau! > Das steht nicht 'Wie'. Da steht 'Wer'. Spielverderber, jetzt weiß ja jeder worums geht ^^ :D
>>>>>>> Wer kriegt denn nun das Bit ausgegeben?
Kann mir das bitte jemand beantworten ?
Michael Köhler schrieb: > Karl Heinz Buchegger schrieb: >> Grml schrieb: >>> Lothar Miller schrieb: >>>> Grml schrieb: >>>>> random schrieb: >>>>>> guest schrieb: >>>>>>> Wer kriegt denn nun das Bit ausgegeben? >>>>>> Ohne Compiler-Intrinsics: >>>>>> PORTA = (1 << BITPOS); >>>>> OMG, es gibt einfach merkwürdige Leute. Die verstehen gar nix. Köstlich. >>>> Richtig, denn der 8051 hat keinen Port A! ;-) >>> Genau, sowas sollte nicht passieren, wie peinlich ;-) >> Darum gings aber gar nicht :-) >> Lies noch mal genau! >> Das steht nicht 'Wie'. Da steht 'Wer'. > > Spielverderber, jetzt weiß ja jeder worums geht ^^ :D Argh :-) War ja nur ein Beispiel **g** >> Das steht nicht 'Wie'. Da steht 'Wer'. Neee, 'wann' :-) >>>>>>> Wer kriegt denn nun das Bit ausgegeben? Na im Zweifelsfalle ich :-))
> Richtig, denn der 8051 hat keinen Port A! ;-)
Hehe ...
Gabs bei dem Dingen nicht so was wie sbit & co?
so nun doch nochmal ne frage, ich hab ein kleines programm geschrieben, bei dem ich nur testen wollte ob es funktioniert #include <reg517.h> sbit LED1 = P1^0; iint main(){ unsigned int test; unsigned int temp; test=3; temp=1; while(1){ LED1 = 0; if (test&temp==1){ LED1 = 1; } else{ LED1 = 0; } temp = temp << 1; } } normal sollte ja bei dem 2ten durchlauf die if bedinung auch erfüllt sein, jedoch springt er bei mir dort immer in den else fall. ich benutze keil microvision 3 als compiler.
dasdsdas dasdasdas schrieb: > jedoch springt er bei mir dort immer in den else fall. Wer sagt dass? Dein gefühl, wenn die Leds aufblinken oder ein Emulator?
Prost! schrieb: > dasdsdas dasdasdas schrieb: >> Wie gebe ich ein Bit aus? > > Du bestellst eins und gibst es mir aus! :-) Auch haben will.
dasdsdas dasdasdas schrieb: > mein microvision sagt mir das ^^ aber nicht mit "iint main" im Code...
Schau mal hier: http://www.amazon.de/s/?ie=UTF8&keywords=dextro+energen&tag=googhydr08-21&index=aps&hvadid=7884512965&ref=pd_sl_hwk9b0g1i_e
dasdsdas dasdasdas schrieb: > jedoch springt er bei mir dort immer in den else fall. Dir ist der Unterschied zwischen & und && bei C bekannt? Was passiert, wenn du das hier schreibst:
1 | if (test && temp==1) { |
Lothar Miller schrieb: > dasdsdas dasdasdas schrieb: >> jedoch springt er bei mir dort immer in den else fall. > Dir ist der Unterschied zwischen & und && bei C bekannt? > Was passiert, wenn du das hier schreibst: >
1 | > if (test && temp==1) { |
2 | >
|
genau das gleiche
dasdsdas dasdasdas schrieb: > selbes problem War mir klar... ;-) Welchen Wert haben denn deine beiden Variablen in der Zeile vor der if-Abfrage?
>>> Wer bekommt jetzt das Bit ausgegeben ?
Na der Gast natürlich!
bekomme ich dafür ein BIT ?
1 | sbit DCLK = P1^7; |
2 | sbit CS = P1^4; |
3 | sbit DIN = P3^0; |
4 | sbit DOUT = P3^1; |
5 | |
6 | void init() |
7 | {
|
8 | CS=1; |
9 | DCLK=1; |
10 | DIN=1; |
11 | }
|
12 | |
13 | void WriteCharToShiftReg(unsigned char num) |
14 | {
|
15 | unsigned char count=0; |
16 | DCLK=0; |
17 | for(count=0;count<8;count++) { |
18 | num<<=1; |
19 | DIN=CY; /* 8051 Carry - Flag */ |
20 | DCLK=0; |
21 | /* wait a litte BIT here */
|
22 | DCLK=1; |
23 | }
|
24 | }
|
>>> ach ihr seid doch alle Nibbles.
dat sacht ausjerechnet der Kan asta Basta kanasta!
Danke Leute, isch hab' misch köstlisch amüsiert! Kölle ALAAF und Prosit
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.