www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Register lesen in C


Autor: Hitz Andres (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Halo
Programmiere einen PIC18F4680 mit einem CCS compiler. Nun möchte ich
gerne ein Register lesen. Wie lese ich das Register? Mit welchem Befehl
arbeite ich da am besten? Benötige unbedingt Hilfe.

Falls ich das mit dem Registerlesen dann mal verstanden haben, möchte
ich das Register PIR2 lesen. Dort hat es ein Bit das angibt ob die
Versorgungsspannung unter der Sollspannung ist. Diese möchte ich
lesen.

Würde mich über eine schnelle Antwort freuen.

Autor: Hitz Andres (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab mir da mal die Hilfe vom CCS compiler gekrallt. Aber verstehen tu
ich das nicht. Wie kann ich eine Speicherzelle/Register lesen. Sollte
es doch einen einfachen Befehl dafür geben.


How do I directly read/write to internal registers?

A hardware register may be mapped to a C variable to allow direct read
and write capability to the register.  The following is an example
using the TIMER0 register:

#BYTE timer0 = 0x01

timer0= 128; //set timer0 to 128

while (timer0 ! = 200); // wait for timer0 to reach 200



Bits in registers may also be mapped as follows:

#BIT T0IF = 0x0B.2

.

.

.

while (!T0IF); //wait for timer0 interrupt



Registers may be indirectly addressed as shown in the following
example:

printf ("enter address:");

a = gethex ();

printf  ("\r\n value is %x\r\n", *a);



The compiler has a large set of built-in functions that will allow one
to perform the most common tasks with C function calls.  When possible,
it is best to use the built-in functions rather than directly write to
registers.  Register locations change between chips and some register
operations require a specific algorithm to be performed when a register
value is changed.  The compiler also takes into account known chip
errata in the implementation of the built-in functions.  For example,
it is better to do set_tris_A(0); rather than *0x85=0;

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber verstehen tu ich das nicht.

Was gibt es daran nicht zu verstehen?

Jedes Register hat auch eine Nummer.
Mittels
#BYTE irgendwas = nummer

Teilst du den Compiler mit, dass du gedenkst das Register
mit der Nummer 'nummer' über den Namen 'irgendwas' anzusprechen.

In weiterer Folge benutzt du 'irgendwas' als ob es eine Variable
wäre.

Willst du das noch weiter aufdröseln, dann kannst du dem Compiler
auch sagen, dass du dem Bit 'x' im Register mit der Nummer
'nummer'
jetzt einen Namen 'so_nenn_ich_dich' gibst.

#BIT so_nenn_ich_dich = nummer.x

und wiederrum benutzt du dann so_nenn_ich_dich als ob es eine
einfache Variable wäre.

Jetzt musst du halt nur noch rauskriegen, wie denn die Nummern für
die dich interessierenden Register sind. Diese Info muesste sich
aber im Datenblatt des µC finden.

Autor: Hitz Andres (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke hat nun geklappt mit dem lesen. Hat jemand schon einmal mit dem
Comparator interupt gearbeitet? Mit diesem Interupt kann eine sinkende
Versorgungsspannung detektiert werden.

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.