PIC18: Timer0 Konfiguration

Gast #2827016
Lesenswert?

Hallo PICler,
1
//T0CONbits.T08BIT = 0;   // bit 6
2
//T0CONbits.T0CS = 0;     // bit 5
3
//T0CONbits.T0SE = 0;     // bit 4
4
//T0CONbits.PSA = 0;      // bit 3
5
//T0CONbits.T0PS3 = 3;    // bits 2-0
6
//T0CONbits.TMR0ON = 1;   // bit 7
7
T0CON = 0x83;

wenn ich T0CON direkt mit 0x83 lade, läuft die Anwendung wie geplant.
Setze ich die bits einzeln, funkioniert es nicht.

Habe debugger angeworfen und siehe da, beim steppen wird PSA zwar
auf 0 gesetzt, springt aber später wieder auf 1. Sprich, Prescaler
wird nicht dem Timer0 zugewiesen. Was läuft da falsch?
Im Datenblatt habe ich keinen Hinweis auf richtiges Setzen gefunden.
Bin etwas baff. Hoffe ihr könnt mir helfen. Es geht jetzt zwar,
aber ich nutze diese Register.Bit Zugriffe auch an anderen Stellen.
Compiler ist übrigens mcc18.

Grüße
#2828219
Lesenswert?

Es gibt nur T0PS0, T0PS1 und T0PS2. T0PS3 gibt es (zumindest beim 
PIC18F4550) nicht. Würde es dieses geben, würdest du dadurch aber auf 
ein BIT zugreifen, jedoch ist 3 -> 11 binär und somit 2 bit groß.

Bei deiner oberen Methode setzt du jedes Bit einzeln. Es ist evtl 
übersichtlicher oder schneller ersichtlich, was eingestellt wird, jedoch 
find ich persönlicher die 2. Variante (also das komplette Byte in eins 
schreiben) besser, da weniger Platz verbraucht wird und man in den 
Kommentaren beschreiben kann, was man eingestellt hat.

Je nach Kompiler kann es auch sein, dass er bei der Einzelbit-Variante 
in Assembler 8 bsf/bcf nimmt und bei dem anderen nur ein movlw und 
movwf, somit nur 2 befehle statt 8 nimmt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren