Timer1 in MPLAB / PIC 18F8722
Montag, 21. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  PIC Mikrocontroller Allgemein  |  Timer (Allgemein)  |  Timer1 in MPLAB / PIC 18F8722 « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Timer1 in MPLAB / PIC 18F8722  (Gelesen 2702 mal)
 
Raven761
Newbie
*
Offline Offline

Beiträge: 10


Profil anzeigen
« am: Dezember 11, 2007, 20:14:14 »

hallo!

ich arbeite zur zeit mit dem timer1 (16Bit timer) und musste mich doch sehr wundern, als ich ihn laufen ließ und mir gleichzeitig die Low und High Byte register im MPLAB anschaute. Bei mir wurde der Übertrag beim überlaufen des low bytes nämlich überhaupt nicht an das high byte weitergegeben... allerdings löst er den interrupt korrekt aus! (nach ca. 6,5ms)

liegt das an MPLAB? oder habe ich einen denkfehler? ich hab den PIC 18F8722


lg, Raven
Gespeichert
Bernd
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 3815



Profil anzeigen
« Antworten #1 am: Dezember 11, 2007, 21:32:47 »

Zitat
liegt das an MPLAB?

Ja (und auch am PIC selbst). TMR1H ist nicht das tatsächliche High-Byte des Timers, sondern nur ein Buffer-Register (wenn RD16 im T1CON Register gesetzt ist). Es dient dazu, den 16-Bit Wert des Timers gleichzeitig in einem Befehlszyklus auszulesen. TMR1H wird nur dann aktualisiert, wenn TMR1L im Code ausgelesen wird.

Code:
x = TMR1L;   // kopiert gleichzeitig das High-Byte des Timers in TMR1H
y = TMR1H;   // TMR1H enthält den Zählerstand zum Zeitpunkt des Auslesens von TMR1L


Zitat
13.2 Timer1 16-bit Read/Write Mode

Timer1 can be configured for 16-bit reads and writes (see Figure 13-2). When the RD16 control bit (T1CON<7>) is set, the address for TMR1H is mapped to a buffer register for the high byte of Timer1. A read from TMR1L will load the contents of the high byte of Timer1 into the Timer1 high byte buffer. This provides the user with the ability to accurately read all 16 bits of Timer1 without having to determine whether a read of the high byte, followed by a read of the low byte, has become invalid due to a rollover between reads.

A write to the high byte of Timer1 must also take place through the TMR1H Buffer register. The Timer1 high byte is updated with the contents of TMR1H when a write occurs to TMR1L. This allows a user to write all 16 bits to both the high and low bytes of Timer1 at once.

The high byte of Timer1 is not directly readable or writable in this mode. All reads and writes must take place through the Timer1 High Byte Buffer register. Writes to TMR1H do not clear the Timer1 prescaler. The prescaler is only cleared on writes to TMR1L.


Viele Grüße

Bernd
Gespeichert

Raven761
Newbie
*
Offline Offline

Beiträge: 10


Profil anzeigen
« Antworten #2 am: Dezember 11, 2007, 21:35:13 »

hallo bernd!

danke für deine schnelle antwort.

das mit dem buffer wusste ich, jetzt frage ich mich natürlich, wo finde ich denn dieses register? es wär nämlich schon interessant während dem debuggen zu sehen was für einen timerwert ich gerade vor mir habe.

Gespeichert
Bernd
Globaler Moderator
Hero Member
*****
Offline Offline

Beiträge: 3815



Profil anzeigen
« Antworten #3 am: Dezember 11, 2007, 21:50:30 »

Im Watch Window kann man unter "Add SFR" das Register "TMR1_Internal" auswählen (zumindest in MPLAB IDE v8.0 vorhanden). Könnte sein, daß es damit möglich ist.


Viele Grüße

Bernd
Gespeichert

Raven761
Newbie
*
Offline Offline

Beiträge: 10


Profil anzeigen
« Antworten #4 am: Dezember 11, 2007, 22:02:28 »

super!

das hat funktioniert! zur info für vllt andere: ich habe version 7.62, da gibts den SFR auch!

lg, Raven
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.04 Sekunden mit 19 Zugriffen.
 
Top! Top!