Wie gebe ich ein Bit aus?

OP (Firma: dsadasdas) #2557554
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.
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.
Gast
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
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
Persönliche Seite
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)
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
>>> 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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.