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.
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;
> 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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.