Wie gebe ich ein Bit aus?

OP (Firma: dsadasdas) #2557554
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.
#2557556
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.
#2557597
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.
Gast #2557604
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.
Gast #2557855
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 ;-)
#2557887
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'.
#2557894
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
Persönliche Seite #2557965
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 :-))
OP (Firma: dsadasdas) #2558081
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.
Gast #2558186
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren