Forum: Mikrocontroller und Digitale Elektronik C Anfänger: binäre und dezimale Zahlen in C Programmen


von Christian (Gast)


Lesenswert?

Hi
ich kann bisher nur Assembler und wollt  mich jetzt mal C widmen drum 
eine wohl dumme Frage:
Die Bezeichnung 0xFF z.Bsp ist doh cfür eine hex Zahl, aber wie binde 
ich binäre und dezimale Zahlen ein, ohne lang umrechnen zu müssen????

Vielen Dank
mfg
Christian

von Niki Hammler (Gast)


Lesenswert?

Versteh nicht ganz wie du das meinst...Also HEX Zahlrn ist wie du 
geschrieben hast klar. Z.B:

int i = 0xff;

Dezimalzahlen ist soweit auch klar:

int i = 255;

Binärzahlen werden meines Wissens nach "normalerweise" d.h. laut Ansi C 
gar nicht unterstützt aber sehr viele Compiler bieten eine Erweiterung 
an (z.B. tigcc mit 0b11111111).


Ich weiss nichts wies mit dem avrgcc ist, probiers einfach mal mit 
0b10101101 oder so aus!

Falls nicht, hilf nur ein umständliches Makro (oder Funktion) wo sichs 
aber schon aus Performance gründen nicht auszahlt so eins zu machen, 
ausserdem wäre es schlecht zu bedienen: BIN(1,0,0,0,1,1,1,0) zb.

Ich würde dir den Tip geben einfach Start, Ausführen, calc zu machen und 
einfach schnell umzurechnen,  für konstante Werte. Aber bei I/O Ports 
kannst sonst sowieso auch sbi() und sbi() verwenden

Niki

von Christian (Gast)


Lesenswert?

Genial - vielen Dank für die Antwort!!!!!

Kannst du das mit sbi() noch etwas weiter ausführen?????

Vielen lieben Dank
mfg
Christian

von Jonas Diemer (Gast)


Lesenswert?

sbi(portd, 1) setzt z.B. bit eins in portd.

ansonsten kannste aber auch recht schnell im kopf von binär nach hex 
umrechnen. hierbei ist ein binäres byte in 2 mal 4 bit zu zerlegen. 
diese kann man dann einzeln nach hex umrechnen. geht echt ganz gut, 
probier's mal.

Jonas

von Ingo B. (Gast)


Lesenswert?

Hi,

ich verwende für Binärzahlen ein Headerfile mit Binärtabelle:

#define b00000000    0
#define b00000001    1
#define b00000010    2
#define b00000011    3
.....

Bis dann,
Ingo.

von Christian (Gast)


Lesenswert?

Hi
vielen lieben Dank für eure Tipps!!!!!
Das mit "sbi(portd, 1)" hab' in der Theorie bereits gewusst, allerdings 
funktioniert es bei mir nicht  mit meinem Code Vision AVR Compiler - ich 
hab' in den Examples nach sowas gesucht, aber nix gefunden - ist für 
mich  eh  alles russich.......

Vielleicht kennt sich jemand mit dem Code Vison einbisschen aus...

mfg
Christian

von Phagsae (Gast)


Lesenswert?

HI schau auf die Beitragszeit :-}

Bin auch gerade schwer am C umsteigen.

Also wenn man man sich mal über die ersten Russischhürden 
hinweggeschafft hat ist das einfach 
schweinsgeil/megasimpel/biszumnächstenproblem...

In code vision geht folgendes:

Die Ports sind alle komplett im zB 4433.h file hinterlegt
einbinden mit
#include <4433.h>

Die Portbezeichnungen sind 1:1 mit den Registernamen komp.

Setze bit #5 PORTB
PORTB.5=1 ;
Lösche
POSTB.5=0;


oder komplett
PORTB=0b11001100; binär
PORTB=0xFF;  hex
PORTB=127;   dezimal
POSTB=0125; octal

Oder nobel
#define PORTB.5 = Enable
Enable=1;  bit gesetzt

Übergebe Daten von PortB an variabele
WASS_LOS_AN_PORTB?=PINB

Und versa:
PORTB=Sosollssein

Bsp warte auf BF flag beim LCD

#define PINB.1 = BF

while ( BF==1 ) {};

Fertig ( klasse was ? )

Zahlen mit komma ( punkt ) verlangen ein float

uswusf......

von Christian (Gast)


Lesenswert?

Hi
vielen lieben Dank für deine hilfreiche Antwort!!!! Woher weißt du das 
(url??) - ist ja nicht so, dass ich mir die Hilfe nicht angeschaut 
hätte, aber darauf binich nicht gekommen und in den examples werden 
immer immer geheimnissvolle headerdateien eingebunden, die ich nicht so 
richtig durchschaue (vgl Displayansteuerung mit 5 Befehlen.... - so 
richtig lernen kann manda nix?????)

mfg
Christian

von Christian (Gast)


Lesenswert?

Hallo ihr lieben Leute da draußen
kann mir vielleicht jemand sagen, warum nix passiert, wenn ich folgendes 
in meinen AVR compiliert reinbrenne???

#include <90s2313.h>

void main(void)

{

PORTD.2=1;
PORTD.3=0;


}

Dank euch ganz herzlich!!!

mfg

PS:  mein experiemtier board ist OK und mit 15 Leds an jedem port 
ausgestattet.....

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Du musst das Datenrichtungsregister auf Ausgang schalten!
DDRD.2=1;
DDRD.3=1;

von Christian (Gast)


Lesenswert?

Na genial!!

Vielen lieben Dank!!!!!!

Langsam gefällt mir C, wenn der Compiler auch noch etwas viel motzt.....

Viele liebe Grüße
Christian

von Phagsae (Gast)


Lesenswert?

Jo prima.

Binn gerade mit meinem Projekt an der 2k Grenze der free Version 
angelangt
(Ich glaub ich muss die 90 $ investieren.)

Hab das schon mal in Assembler geschrieben bin dann allerdings an
recht komplexen Mathematik gescheitert.
log exp tan und x^5 ( grusel )

Naja da hat C doch einiges zu bieten
Einfach so reinklappern wies auf dem papier steht fertig
( das war wirklich ne 2 min Aktion wenn ich denke ich hätte das in 
Assembler machen müssen )


Zur Frage Quellen:

Das AVR C-buch von Burkhard Mann
( die Beispiele sind eine Frechheit aber als Referenz echt gut )
Insbesonders gibt das einen guten Einblick welche
Programmiertechnik resourcen sparend ist

Gut zum nachschlagen wenn man merkwürdige Programmzeilen
verstehen möchte

Viel geklaut hab ich bei allen C AVR programmen die ich im Forum 
gefunden
habe

Und die Examples des Compilers  sind gar nicht so schlecht.

Und die Hilfe latürnich


Ich muss Dir zustimmen beim LCD demo lernt man gar nichts
5 befehle das wars

Tipp :
wie ein prinf o. sprinf  funktioniert ist allerdings der schlüssel zum 
verstehen
der Ausgabe ob auf LCD oder UART
und da gehts dann auch schon mit arrays und pointern los
Da brauchts ein Buch.


Da die lcd.lib  nur funktioniert wenn man 7 ports in reihe
übrig hat ( der 4433 kommt maximal auf 6 ) hab ich als erste
Aufgabe mal ne neue library geschrieben

Auf deinem 2313 dürftest du da auch probleme bekommen

Aber immerhin 1 Woche später (xxx) Stunden
LCD läuft mit allem schnickschnak
Der ADC liefert brav seine Daten ab
Die kommunikation zwischen PC und Gerät klappt auch schon in beide 
Richtungen
Und die formel ist auch schon drin

Phagsae

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Hi Phagsae,

vielleicht wäre es an der Zeit auf AVR-GCC umzusteigen :-)
Da hast du keinerlei Beschränkungen, und alles ist kostenlos! Auf so 
Sachen wie eingebaute LCD-Library musst du dann zwar verzichten, aber 
wenn man sie selbergeschrieben hat, dann weiß man wenigstens was sie 
tut, wie sie es tut und warum sie etwas vielleicht nicht tut.

MfG
Andreas

von Jonas Diemer (Gast)


Lesenswert?

yo! avr-gcc ist echt gut. und lcd libs gibts dafür glaub ich auch 
schon... nur halt nicht im "lieferumfang"

von sebastianB. (Gast)


Lesenswert?

Hallo, Spezialisten!
Ich bin ein echter Mikrocontroller Laie, muß aber für meine Schule 
(Berufsbegleitende HTL für Nachrichtentechnik) ein Programm für einen 
Frequenzzähler in C schreiben.
Der Controller mit dem ich arbeiten muss ist der SC12 (80186er)
http://www.bbs-winsen.de/GoBlack/ETechnik/sc12chip/
Kann mir vielleicht irgendjemand helfen?????
Ich kenne mich echt gar nicht aus!!!!!

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Die Seite scheint doch für den Einstieg gut geeignet zu sein! Fang halt 
mal an, wenn es Probleme gibt kannst du ja immer noch nachfragen, aber 
versuch es erst mal selber!

MfG
Andreas

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.