Forum: Mikrocontroller und Digitale Elektronik Atmel 89S8252


von Chris (Gast)


Lesenswert?

Hallo!
Ich möchte den Zählerstands des Timers ausgeben. Ist der Quellcode
soweit richtig?

#include <stdio.h>
#include <LCDIO.h>
#include <REG8252.h>

int stand=0;   //globale Variabeln
//Programmfunktionen:
//Zeigt einmal den Zählerstand in HEX an

void test(void) interrupt TF0_VECTOR    //Interrupt
{
  stand=(TH0*256)+TL0;    //High und Low miteinander verknüpfen
}
//interrupt ENDE

//Main
void main(void)
{
  TMOD=0x10;    //Timer Modus festlegen
  ET0=1;      //Timer 0 Interrupt Enable: 1=Enabled
  TR0=1;      //Timer 0 Run Control Bit
  EA=1;        // Global Interrupt Enable, 0=Disable all interrupts
    do
    {
      clrsc();      //Display leeren
      printf(“%x”,stand);    //Ausgabe des Zählerstands
    }
    while(1);
}
//Main ENDE

von Ralf (Gast)


Lesenswert?

Hi Chris,

wenn mich mein 8051-Wissen nicht trügt, so bekommst du immer den
gleichen Wert, weil der Interrupt immer dann ausgelöst wird, wenn der
Timer von 0xFFFF nach 0x0000 überläuft.

Besser wäre es, wenn du bei jedem Interrupt die Variable "Stand"
inkrementierst.

Die Berechnung, in welchen Abständen der Interrupt erfolgt, berechnest
du m.W. aus der Formel fOSC/12*65536. fOSC ist deine Quarzfrequenz.

Man korrigiere mich bitte, wenn ich falsch liege...

Ralf

von Marco Blum (Gast)


Lesenswert?

Hi,
mit welchem Compiler arbeitest du?
Marco

von Chris (Gast)


Lesenswert?

Ich arbeite mit Keil u2

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
Noch kein Account? Hier anmelden.