mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik frage


Autor: Stephan Herold (herold)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo
ich wollte gerad den timer2 2 programmieren um jede 20ms eine led 
blinken lassen aber anscheind habe ich was falsch gemacht.kann mir mal 
jemand da eine hilfe geben? da ist meine datei
#include <reg515.h> //   Einbinden der 80535-Definitionen

/*   Definitionen  */

#define W_Zeit 10    //  W_Zeit = 10 bedeutet eine Zeit von 10 *

//66ms = 0,66sec

/*   Definitionen Globaler Variablen  */
char data Zeit;

/*   Leuchtdioden  */
sbit P3_2 = 0xB2;
void main (void)
{

T2I0=0; //Timer-2-Anhalten
T2I1=0;
CCEN=0x08;

T2CM=0; //   gibt Modus "0", also High an P3.2 bei Gleichstand
     //von CC1 und Timer 2.
     //Low kommt wieder bei Timer 2 - Überlauf

I2FR=0;
I3FR=0;

T2PS= 0; //1 MHz - Takt für Timer 2 ( empfohlen  für korrekte 
Arbeitsweise des Timers)=Inkrementiertgeschwindigkeit
TH2= 0xB4;// 250-15=( insgesamt 15 Hz wiederholt Frequenz)
TL2=0x3C;
CRCH=0x46;//( insgesamt 120  von 240 in TH2_TL2
CRCL=0x32;
T2I0=1;     //Modus "01" bedeutet "Timer 2 ein" und
T2I1=0;    //"Taktsignal = Oszillatortakt
T2R0=1;  //    Timer 2 - Reload einschalten, beim Timer-Überlauf
T2R1=0;
ET2=1;
EAL=1;
while(1);  //    wiederhole immer
  }
void TimerInt2(void) interrupt 5//  Timer2-Interruptroutine im 
Pseudo-Code !!!!!!!!!!!!!
  {

T2I0=0; //Timer-2-Anhalten
T2I1=0;

TH2=0xB4;// 250-15= Zählregister (insgesamt 15 Hz wiederholt Frequenz)
TL2=0x3C;
CRCH=0x46;//Compare Register ( insgesamt 120  von 240 in TH2_TL2
CRCL=0x32;
T2I0=1;     //Modus "01" bedeutet "Timer 2 ein" und
T2I1=0;     //"Taktsignal = Oszillatortakt
T2R0=1;    //    Timer 2 - Reload einschalten, beim Timer-Überlauf
T2R1=0;
 Zeit--;                    //    (Zeit)--
  if(Zeit == 0)             //    Wenn (Zeit) == 0
    {
    Zeit = W_Zeit;          //        (Zeit) = W_Zeit
    P3_2 = ~P3_2;             //        LED-Zustand invertieren
    }// end if
  }


Autor: Timey (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
66ms != 0.66s
66ms = 0.066s
0.66s = 660ms

Autor: Stephan Herold (herold)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist die initialisierung okay?die zahlen spiellen keine rolle mir geht 
mehr um die gesamt initialisierung
danke

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schmeiß mal den ganzen T2-Quatsch ausm Interrupt raus, der hat da nichts 
zu suchen.
Einmal initialisieren reicht völlig.


Peter

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan Herold wrote:

> T2PS= 0; //1 MHz - Takt für Timer 2 ( empfohlen  für korrekte
> Arbeitsweise des Timers)=Inkrementiertgeschwindigkeit

Dem T2 isses wurscht, der arbeitet immer korrekt, egal welcher Takt.

Is nur für die Leute, die Reloadwerte unbedingt im Kopf ausrechnen 
müssen, statt einfach dem Präprozessor das Rechnen zu überlassen.


Peter

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich habe da was aus einem alten Projekt. Vielleicht hilft das weiter.
// aus einem alten Projekt mit 16MHz Quartz


#define TIMER_2_MODUS 0x10 /*Timer 2 im Modus 0 (16 Bit Reload)*/
#define TIMER_2_OVERFLOW_LOW 0x8D /*Ueberlauf alle 278us*/
#define TIMER_2_OVERFLOW_HIGH 0xFE /*Ueberlauf alle 278us*/


void HardwareInit(void)
{
  T2CON = TIMER_2_MODUS;       // Modus Timer2 festlegen
  TL2 = TIMER_2_OVERFLOW_LOW;  // Timer2 voreinstellen
  TH2 = TIMER_2_OVERFLOW_HIGH; // Timer2 voreinstellen
  CRCL = TIMER_2_OVERFLOW_LOW; // Nachladeregister voreinstellen
  CRCH = TIMER_2_OVERFLOW_HIGH;// Nachladeregister voreinstellen
  ET2=1;                       // Interrupt Timer2 freigeben
  EAL=1;                   // alle Interrupts erlauben
}

Gruss Matthias

Autor: Stephan Herold (herold)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void HardwareInit(void)
{
  T2CON = TIMER_2_MODUS;       // Modus Timer2 festlegen
  TL2 = TIMER_2_OVERFLOW_LOW;  // Timer2 voreinstellen
  TH2 = TIMER_2_OVERFLOW_HIGH; // Timer2 voreinstellen
  CRCL = TIMER_2_OVERFLOW_LOW; // Nachladeregister voreinstellen
  CRCH = TIMER_2_OVERFLOW_HIGH;// Nachladeregister voreinstellen
  ET2=1;                       // Interrupt Timer2 freigeben
  EAL=1;                   // alle Interrupts erlauben
}

wenn man so schreibt wird dann automatisch denn modus festgelegt?
und und die ganze register werden die dann in der main funktion mit 
werte geladet oder?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tschuldigung,

ich habe vergessen zu schreiben:

void main(void)
{
   HardwareInit();
   while(1)
   {
   }
}

Frohes Basteln!

Matthias

Autor: Stephan Herold (herold)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn so gemacht wird dann brauche ich also keine nachlade wert eingeben?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Modus 0 von Timer2 müsste autoreload sein (siehe Kommentar beim 
define). Es ist allerdings schon ein paar Tage her, dass ich mich mit 
dem 8051 beschäftigt habe.

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.