mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik c: bit,sbit, sfr


Autor: bull8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin gerade dabei etwas c zu lernen um dann so einen 8051 controller 
zu programmieren.

ich verstehe nicht wo der unterschied zwischen bit und sbit liegt. Und 
in welchen Fällen man Sfr benutzt.

Habe da leider nichts brauchbares ergooglen können.

Könnt ihr mir da eine kleine hilfe geben?



Grüße

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

also du weißt hoffe ich was nen SFR ist?!

In einem SFR können bestimmte Bits einzeln adressiert und entsprechend 
ohne bitmaske gesetzt werden (sehr praktisch), die adresse für ein 
solches bit kann mit sbit name = sfr_bit_adresse gesetzt werden. aber 
bevor ich das jetzt groß erkläre guckst du hier sind sogar bsp dabei....

http://www.keil.com/support/man/docs/c51/c51_le_sbit.htm

In der regel macht das deine IDE für dich....bei 8051 kann man keil 
uVision nehmen!

Gruß Marcel

Ps.: nen 8051 is ganz schön alt und nicht wirklich zeitgemäß oder 
bastler freundlich, lieber nen msp430 (eZ430 oder nen headerboard von 
olimex).

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kauf ein vernünftiges Buch (oder leihe es dir)

z.B. Der Keil C51-Compiler von Michael Baldischweiler

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> nen 8051 is ganz schön alt und nicht wirklich zeitgemäß oder
> bastler freundlich
Das erklär mir mal bitte genauer. Diese ewigen Diskussionen um "den 
gibts schon seit 20 Jahren, also ist er out" sind doch merkwürdig. Wozu 
einen AVR nehmen, bei dem es umständlich ist, die Dinger ans Laufen zu 
kriegen, EEPROMs verlieren den Inhalt, wenn's dumm läuft, einmal verfust 
und der Oszillator tut nicht mehr, und ein C-Programm frisst auch viel 
Platz.
Warum soll er nicht bastlerfreundlich sein? Den gibts im gleichen 
Gehäuse wie die AVRs auch, und wenn ich mir angucke, was man zum Teil 
für Klimmzüge machen muss, bloß damit man mal das AVR-Studio 
eingerichtet bekommt bzw. wie man dort Projekte "verwalten" kann, muss 
ich sagen, dass die 8051 wesentlich geschickter und etablierter sind, 
was IDEs, Tools, usw. angeht.
Und wenn Atmel so weitermacht wie bisher, gehen sie evtl. sowieso baden, 
und dann ist Ende mit AVRs. Bei nem 8051 wechsel ich halt auf einen 
anderen Hersteller, n.m. unter Beachtung der Pin-Kompatiblität und 
onboard-Peripherie, und das wars (abgesehen von evtl. notwendigen 
Software-Anpassungen und evtl. geändertem Programmier-Equipment).
Sicher, es werden vielleicht nicht mehr viele neue 8051-Derivate 
entwickelt werden, aber es hat schon seinen Grund, warum es sie immer 
noch gibt.

Ralf

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Ralf (Gast)
ich hoffe der Text ist nicht erst gemeint.

die Atmel kann man mit C programmieren, aber auch mit ASM. Dafür braucht 
man nur AVR-Studio installieren und gut ist.
Gibt es wirklich probleme mit dem eeprom die nicht auf falsche Hardware 
zurückzuführen sind? Wenn man auf einen 8051 100V gibt geht auch auch 
nicht mehr. Das mit Fuse mag vielleicht sein, aber ein wenig wissen mas 
man macht ist schon nicht schlecht.

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

also ich sags erstmal so: wer LESEN kann ist ganz klar im Vorteil!!!! 
ich hab nix von AVR oder Atmel geschrieben....MSP430!!!!!

So die Vorteile liegen ganz klar auf der Hand für 30€ bekommst du nen 
fertiges Devkit (ez430 oder nen LPT degugger mit headerboard)! IDE bei 
TI saugen zusammen mit beispielen und loslegen instalation dauert ca. 
5min und die erste LED blinkt!

Vorteil sehr preiswertes kit, zeitgemäße technik, einfache handhabe, 
easy debugging via jtag, uC können bei ti ohne probleme gesampeled 
werden! zudem bietet ti eine leistungsstarke ide mit 16k code frei (keil 
hat gleube ich 4k in der demo). ok die bauform im qfp/lqfp ist nur was 
für richtige leiterplatten, aber dafür kann man auch sehr einfach ne 
schicke ziel lsg implementieren. und zum basteln ist nen headerboard 
optimal!

der msp ist nen super cpu den es mit sau viel drum herum gibt--> für 
jede anwendung gibts den richtigen!

gruß marcel

Autor: bull8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ähm könntet ihr vll unterlassen meinen thread für sowas unnötiges zu 
missbrauchen? danke.


ne ich möchte mir für diese Frage kein Buch kaufen.

Wollte einfach nur den Unterschied zwischen sbit und bit wissen.
SFR ist mir wieder klar geworden ;)

Autor: Rufus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo bull8051,
ich habe sehr schnell C für den 8051er mit der Beschreibung im Anhang 
gelernt. Ist zwar für µC/51 aber funktioniert auch für den Keil Compiler 
sehr gut.

Rufus

Autor: Rufus (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo bull51,
entschuldigung, habe die falsche Datei erwischt und angehangen.
Hier die richtige C-Beschreibungs-Datei.

Rufus

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: bull8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mh danke aber da steht auch nicht der unterschied von sbit und bit drin.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SBIT deklariert ein Bit in einem SFR oder ein Bit in einer normalen 
Byte-Variablen, wenn diese im Bit-adressierbaren Speicher liegt, der 
8051 hat 16 Bytes, deren Bits direkt angesprochen werden können, ergibt 
also bis zu 128 Bit-Variablen.

BIT verwendet eben eines dieser Bits und legt somit eine Bit-Variable 
an.

Ralf

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bull8051 wrote:
> ich verstehe nicht wo der unterschied zwischen bit und sbit liegt. Und
> in welchen Fällen man Sfr benutzt.

sbit, sfr, sfr16 müssen an ganz bestimmten Adressen liegen, damit sie 
die gewünschte Peripheriefunktion ausführen. Sie sind deshalb in der 
reg***.h vordefiniert.

bit, char, int, float sind Variablentypen, sie erhalten erst vom Linker 
ihre Adresse zugewiesen.


Peter

Autor: bull8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah verstehe vielen dank!


kleine frage noch, hab ne kleine zeitschleife gemacht, aber iwie läuft 
die nur einmal durch:  for (i=100; i!=0; i--) {;}


wo ist da der Fehler?

Autor: bull8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gibts keinen?

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht ist sie der Optimierung des Compilers zum Opfer gefallen.

Oder der Simulator / Debugger führt Zeile für Zeile aus, nicht Befehl 
für Befehl.

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum Atmel?
einfach Xilinx FPGA nehmen und den einfachen pico benutzen :)

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> kleine frage noch, hab ne kleine zeitschleife gemacht, aber iwie läuft
> die nur einmal durch:  for (i=100; i!=0; i--) {;}
Wie lange soll die Schleife laufen und wie prüfst du, ob sie nur einmal 
durchläuft? Simulator?

Ralf

Autor: bull8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich benutze ride und mache step by step betrieb. dort wird dir zeile nur 
einmal durchlaufen. könnte natürlich sein das sie trotzdem dann auf der 
platine richtig funktionieren würde.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann kannst du dir entweder den entsprechenden Assembler-Output 
angucken, ob es da richtig implementiert ist, oder du benutzt einen 
Simulator, der dir die vergangene Zeit anzeigt (so wie bei Keil C51), 
sofern RIDE das hat (einen externen würd ich nicht empfehlen, weil die 
meistens den C-Code nicht simulieren können). Oder eben direkt in der 
Schaltung, z.B. während der Schleife einen freien Portpin invertieren.

Ralf

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.