Forum: Mikrocontroller und Digitale Elektronik C515c Timer einstellen


von Michael (Gast)


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 
---------------------------------------------------------- */
/* 
************************************************************************ 
*********  */

von R. W. (quakeman)


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

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.