Forum: /dev/null Wie gebe ich ein Bit aus?


von dasdsdas d. (Firma: dsadasdas) (tj-dexter)


Lesenswert?

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
von Karl H. (kbuchegg)


Lesenswert?

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.

von dasdsdas d. (Firma: dsadasdas) (tj-dexter)


Lesenswert?

Kannst du mir dafür einen Beispielcode geben ?

von Sven H. (dsb_sven)


Lesenswert?

Hast du mal auf den Link von Karl Heinz geklickt?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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.

von Prost! (Gast)


Angehängte Dateien:

Lesenswert?

dasdsdas dasdasdas schrieb:
> Wie gebe ich ein Bit aus?

Du bestellst eins und gibst es mir aus!

von guest (Gast)


Lesenswert?

Kann mir bitte jemand helfen, wie man einen Euro ausgibt?
Danke.

von dasdsdas d. (Firma: dsadasdas) (tj-dexter)


Lesenswert?

heisst ich kann einfach zuweisen, also z.B. P1 = 0; ?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von dasdsdas d. (Firma: dsadasdas) (tj-dexter)


Lesenswert?

super, danke vielmals

von guest (Gast)


Lesenswert?

Wer kriegt denn nun das Bit ausgegeben?

von random (Gast)


Lesenswert?

guest schrieb:
> Wer kriegt denn nun das Bit ausgegeben?

Ohne Compiler-Intrinsics:
PORTA = (1 << BITPOS);

von random (Gast)


Lesenswert?

Was für einen Compiler / IDE verwendest du?

von Grml (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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!   ;-)

von Grml (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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

von M. K. (sylaina)


Lesenswert?

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

von guest (Gast)


Lesenswert?

>>>>>>> Wer kriegt denn nun das Bit ausgegeben?

Kann mir das bitte jemand beantworten ?

von Random .. (thorstendb) Benutzerseite


Lesenswert?

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

von Random .. (thorstendb) Benutzerseite


Lesenswert?

> Richtig, denn der 8051 hat keinen Port A!   ;-)
Hehe ...
Gabs bei dem Dingen nicht so was wie sbit & co?

von dasdsdas d. (Firma: dsadasdas) (tj-dexter)


Lesenswert?

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.

von Kan a. (Firma: Basta) (kanasta)


Lesenswert?

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?

von dasdsdas d. (Firma: dsadasdas) (tj-dexter)


Lesenswert?

mein microvision sagt mir das ^^

von Mark B. (markbrandis)


Lesenswert?

Prost! schrieb:
> dasdsdas dasdasdas schrieb:
>> Wie gebe ich ein Bit aus?
>
> Du bestellst eins und gibst es mir aus!

:-)

Auch haben will.

von Kan a. (Firma: Basta) (kanasta)


Lesenswert?

dasdsdas dasdasdas schrieb:
> mein microvision sagt mir das ^^

aber nicht mit "iint main" im Code...

von guest (Gast)


Lesenswert?


von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Kan a. (Firma: Basta) (kanasta)


Lesenswert?

if (!ichkannprogrammieren) {return(2);}

von guest (Gast)


Lesenswert?

Mein Bier ist alle - NACHSCHUB!

von dasdsdas d. (Firma: dsadasdas) (tj-dexter)


Lesenswert?

selbes problem

von dasdsdas d. (Firma: dsadasdas) (tj-dexter)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

dasdsdas dasdasdas schrieb:
> selbes problem
War mir klar...  ;-)

Welchen Wert haben denn deine beiden Variablen in der Zeile vor der 
if-Abfrage?

von Kan a. (Firma: Basta) (kanasta)


Lesenswert?

if ( idiot ? (test && temp == 1) : (test & temp == 1) {
...

von guest (Gast)


Lesenswert?

Nana nana "Kan asta" ...
... ohne mein Bier sag ich nix

von Kan a. (Firma: Basta) (kanasta)


Lesenswert?

return Bit;

von der Gast (Gast)


Lesenswert?

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

von guest (Gast)


Lesenswert?

FAXE !

von guest (Gast)


Lesenswert?

@ der Gast
 2 FAXE !

von Kan a. (Firma: Basta) (kanasta)


Lesenswert?

blöder Gast, macht alles kaputt.

von guest (Gast)


Lesenswert?

Welcher, Du Dösi ?

von Kan a. (Firma: Basta) (kanasta)


Lesenswert?

naja, bist du Gast oder guest?

von der Gast (Gast)


Lesenswert?

ich will Bit!!

Wer trikt schon gerne FAXE.

von guest (Gast)


Lesenswert?

bi!

von guest (Gast)


Lesenswert?

Bit macht doof (trikt).

von der Gast (Gast)


Lesenswert?

>>>Bit macht doof (trikt).

is doch Rosenmontag! Hicks....

von Kan a. (Firma: Basta) (kanasta)


Lesenswert?

ach ihr seid doch alle Nibbles.

von guest (Gast)


Lesenswert?

Ich habs: Das Bit ist kaputt!

von der Gast (Gast)


Lesenswert?

>>> ach ihr seid doch alle Nibbles.
dat sacht ausjerechnet der Kan asta Basta kanasta!

von guest (Gast)


Lesenswert?

Es heißt Nippel!

von Kan a. (Firma: Basta) (kanasta)


Lesenswert?

Bisher hab ich hier noch kein Byte gesehen.

von guest (Gast)


Lesenswert?

Sehr guter Kommentar!

von Nukular (Gast)


Lesenswert?


von guest (Gast)


Lesenswert?

Das ist nicht lustig!

von der Gast (Gast)


Lesenswert?

Danke Leute,

isch hab' misch köstlisch amüsiert!

Kölle ALAAF und Prosit

von guest (Gast)


Lesenswert?

XCH & bye

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.