Atmel 89S8252

Gast #254535
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
Gast #254536
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

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