mikrocontroller.net

Forum: Projekte & Code XC888/866 Timer modus 2


Autor: Sharon F. (wissenshunger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
guten Tag zusammen
ich versuche ein Port zum blinken zu bringen, mit timer 0 modus 2 als
verzögerungsgeber.das port soll invertieren, nach jedem überlauf (TF0)
wer weiß wie der timer interrupt aussieht.

vielen dank

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[Oberlehrer]
Davon abgesehen das Du im falschem Forum postest, solltest Du erstmal 
selber einen Programm-Ansatz bringen, als hier nach einer kompletten
Lösung zu fragen. Wie willst Du es sonst lernen.
[/Oberlehrer]

Ich gebe Dir trotzdem mal ein Beispiel, zwar nicht für XC866 aber 
anderer 8051.
// Testprogramm TIMER
// Beispiel: LED blinkt im o.5s Takt bei f=11.0592 MHz

#include "reg51.h"   // Register des 8051MCs
#define LED P0_7

// Timer 0 - Zeitbasis
// Timer0: Reload Wert für T0 T=1/(fosz/12)*(65536-(TH0*256+TL0))
// RELOAD (16bit) = -(0.01 * FREQ_OSC / 12 - 65536);
// RELOAD-Wert für 10ms = 0xDC00 (56320) bei FOSZ 11.059200 MHz
#define TH0Reload 0xDC
#define TL0Reload 0x00

static unsigned char int_delay = 0;

// ********************************************************************
// Timer 0 Interrupt
// Routine wird alle 10ms aufgerufen
// ********************************************************************
void TIMER0ISR (void) interrupt 1 {
  TH0  = TH0Reload; // Update MSB
  TL0  = TL0Reload; // Update LSB
  int_delay++;
  if (int_delay == 50) {
    // LED blinkt im Sekundentakt (500ms an, 500ms aus)
    // nur Bsp., anpassen!
    LED = !LED;
    int_delay = 0;
  }
}

// ********************************************************************
// Grund-Initialisierung
// ********************************************************************
void init (void) {
  // Timer 0 initialisieren
  TMOD = 0x01;          // 0000 0001B    Timer 0: Mode 1 (16-Bit Zähler)
  TH0  = TH0Reload;   // Reloadwert Timer 0
  TL0  = TL0Reload;
  TR0  = 1;             // Timer 0 starten
  // Interruptsystem
  ET0  = 1;             // Timer 0, Interruptfreigabe
  EA   = 1;             // generelle Interruptfreigabe
}

// ********************************************************************
// Hauptprogramm
// ********************************************************************
void main (void) {
  init();
  while(1);
}

Autor: Sharon F. (wissenshunger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dies habe ich gemancht aber P1 geht ein uns aus und dann nix

# include <XC888CLM.h>



  void T01_vInit(void)

{
  TMOD   =  0x02;         //  TMOD für Timer 0 Modus 2
  TL0    =  0x00;
  TH0    =  0x11;       //  Reloadwert
  ET0    =  1;         //  Enable Timer 0 interrupt
  EA    =  1;
  TR0    =  1;       //  Start Timer 0
  TF0     =  0;
}
  void T01_viTmr0(void) interrupt 1 using 0    // Timer 0 Interrupt
{
   unsigned int ueberl;
  for (ueberl=0; ueberl<500; ueberl=ueberl+50)
    {
      while (TF0==0);
      TR0    =  0;
     P1_DATA=!(P1_DATA);

}

}


 int main ()

{
  SFR_PAGE(_pp0, noSST);   // Change to page 0
  P1_DIR  =  0xFF;     //  Festlegen von P1 als Ausgang
  P1_DATA =  0xFF;     //  Initialisieren des Aungangs auf High

  CMCON  =  0x12;         //  load Clock Control Register (12Mhz)

 T01_vInit();

 while(1);

}

was mache ich da falsch?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> TR0    =  0;

Du hälst den Timer an. Da kommt er 1x und dann nie wieder in die 
Interrupt-Routine.

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.