www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C515c Timer einstellen


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich soll den Timer0 auf 20ms Offset einstellen. Leider habe ich noch 
nicht viel mit µC Programmierung gemacht... Könnte mir bitte jemand 
helfen?

Hier der Code:


#ifdef HAUPTPROGRAMM
#define CTRL_EXTERN
#else
#define CTRL_EXTERN extern
#endif
/* --- Extern eingebundene Assemblerfunktionen 
------------------------------------- */
extern void WATCHDOG (void);/* ist immer extern */
/* --- INCLUDES 
-------------------------------------------------------------------- */
#include <stdio.h> /* standard I/O .h-file */
#include <string.h> /* String Verarbeitung */
#include <REG515C.H> /* Register des uC C515C */
/* --- Definitionen 
---------------------------------------------------------------- */
#define TRUE 1
#define FALSE 0
/* --- initialize the Watch Dog Time 
----------------------------------------------- */
#define WDTREL_INIT 0x80; /* Watch Dog auf 0.63 s */
/* --- initialize the Timer 0 
------------------------------------------------------ */
#define TIMER0_L 0x?? /* Timer Offset fuer 20 ms */
#define TIMER0_H 0x??
/* --- initialize the serial interface 
--------------------------------------------- */
#define SCON_INIT 0x50 /* SCON: mode 1, 8-bit UART, enable rcvr */
#define TMOD_INIT 0x21 /* TMOD: timer 1:Mode.2, Timer0:Mode 1 */
#define TH1_INIT 212 /* TH1: reload value for 1200 baud @ 10MHz */
#define PCON_INIT 0x00 /* Vorteiler Bit = 0 */
#define ADCON0_INIT 0 /* Auswahl AD-Kanal 0 */
/* --- globale Programmsteuerung 
--------------------------------------------------- */
#define ZEITSCHLEIFE_MAX 25 /* 25 Timer 0 Aufrufe fuer 0,5 Sek. */
/* --- Unterprogramme 
-------------------------------------------------------------- */
CTRL_EXTERN void TIMER0 (void);
CTRL_EXTERN void DATEN_AUSGABE (void);
CTRL_EXTERN void AD_INPUT (void);
CTRL_EXTERN void BERECHNEN (void);
/* --- Globale Variablen 
----------------------------------------------------------- */
CTRL_EXTERN unsigned char zeitschleife;
CTRL_EXTERN unsigned short ad_wert;
CTRL_EXTERN unsigned long ad_wert_u;
/* --- Globale Konstanten 
---------------------------------------------------------- */
/* 
************************************************************************ 
*********  */

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was genau meinst du mit 20ms Offset?
Willst du, daß der Timer0 genau 20ms lang zählt bis er einen Überlauf 
bekommt?

Falls es das ist, sollte dein Problem relativ simpel sein. Der C515C 
müsste eigentlich noch ein Controller sein, welcher 12-Zyklen pro Takt 
benötigt. Wenn du diesen dann mit 12MHz betreibst bekommst du eine 
Taktzeit von genau 1µs heraus. Wenn du den Timer0 nun laufen lässt zählt 
dieser mit eben genau 1µs pro Takt hoch. Wenn du den Timer0 nun mit 
45536 (65536-20000) lädst bevor du ihn startest, zählt er genau 20.000 
Takte (oder µs) hoch bevor er überläuft. Diesen Überlauf kannst du 
entweder per Interrupt oder Polling auf das TF0 Flag abfragen. Dadurch 
hast du einen Zeitintervall von genau 20ms realisiert.

Die Initialisierung des Timer0 dafür würde ungefähr so aussehen:

TMOD = 1;  // T0: 16Bit Timer, T1 interessiert hier nicht
TL0 = 0xE0;  // T0 20ms Überlaufrate bei 12MHz
TH0 = 0xB1;
TR0 = 1;  // T0 starten

Ich denke ab hier solltest du dich selber etwas weiter schlau machen. 
Denn das fertige Programm wird dir hier niemand schreiben. 
Eigeninitiative ist gefragt. :)

Ciao,
     Rainer

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.