www.mikrocontroller.net

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


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Niki Hammler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genial - vielen Dank für die Antwort!!!!!

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

Vielen lieben Dank
mfg
Christian

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ingo B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Phagsae (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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......

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.....

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst das Datenrichtungsregister auf Ausgang schalten!
DDRD.2=1;
DDRD.3=1;

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na genial!!

Vielen lieben Dank!!!!!!

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

Viele liebe Grüße
Christian

Autor: Phagsae (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jonas Diemer (Gast)
Datum:

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

Autor: sebastianB. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!!!!

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.