#include "sfr_r813.h" void PORT_Config(void); void TimerC_Initial(void); void TimerC_Start(void); void TimerC_Stop(void); void TimerCCompare0_Initial(void); void TimerCCompare0_Aktiv(void); void TimerCCompare0_Inaktiv(void); unsigned char intZA; unsigned int intZZ; #pragma interrupt INT_Timer_C //vector 27 Timer c #pragma interrupt INT_Comp_0 //vector 28 Timer c, Compare 0 void main(void) { //1 = Schreibschutz für wichtige SFR aufheben prc0 = 1; //Anschluss festlegen cm13 = 1; // 1 = 'main clock' ist an XIN-XOUT Pins angeschlossen cm15 = 1; // 1 = 'XIN-XOUT drive capacity' HIGH */ cm05 = 0; // 0 = 'main clock stop bit' (XIN-XOUT) ON */ // d.h. Pins XIN-XOUT nicht abschalten */ //Taktrate festlegen cm16 = 0; cm17 = 0; cm06 = 0; // 0 = 'CPU clock division' durch cm16 und cm17 bestimmt // cm16=0 und cm17=0 => kein Teilung des Taktes //kurz warten bis externe Taktquelle stabil läuft asm("nop"); asm("nop"); asm("nop"); asm("nop"); //CPU Takt auf gerade festgelegte externe Taktquelle umschalten ocd2 = 0; // 0 = 'main clock' als CPU clock auswählen //Schreibschutz für wichtige SFR wieder einschalten prc0 = 0; asm("FSET I"); //Interrupt enable intZA = 0; intZZ = 0; PORT_Config(); pd1 = 3; TimerC_Initial(); TimerCCompare0_Initial(); TimerC_Start(); TimerCCompare0_Aktiv(); while(1) { asm("nop"); } } void PORT_Config(void) { pd1 = 0xFF; //Pin10 Output } //TimerC Interrupt void INT_Timer_C(void) { TimerC_Stop(); //Timer C count start flag -> start TimerC_Start(); //Timer C count start flag -> start } //Compare0 Interrupt von TimerC void INT_Comp_0(void) { intZA++; intZZ++; // pd1 = 255-intZA; TimerCCompare0_Inaktiv(); TimerCCompare0_Aktiv(); if (intZZ == 1024) { TimerCCompare0_Inaktiv(); pd1 = 0x55; } } void TimerC_Initial(void) { tcc00 = 0; //count stop tcc01 = 0; //count source f1 tcc02 = 0; //count source f1 tcc12 = 0; //set TC register to 0x0000 at compare 1 match tcc13 = 1; //compare 0 output tcc14 = 1; //compare 0 output mode tcc15 = 0; //-"- tcc16 = 0; //compare 1 output mode tcc17 = 0; /* tcc12 = 1; //set TC register to 0x0000 at compare 1 match tcc13 = 1; //compare 0 output tcc14 = 0; //compare 0 output mode tcc15 = 0; //-"- tcc16 = 0; //compare 1 output mode tcc17 = 0; //-"- tcout = 0x00; //Timer C output control register: disable output tm0 = 0x0FFF; //capture and compare 0 register tm1 = 0xFFFF; //compare 1 register tc = 0x0000; //timer C register*/ tcic = 7; //Interrupt priority level for Timer C = 7 cmp1ic = 4; ir_tcic = 0; //Interrupt request flag clear ir_cmp1ic = 0; } void TimerC_Start(void) { tcc00 = 1; //Timer C count start flag -> start } void TimerC_Stop(void) { tcc00 = 0; //Timer C count start flag -> stop } void TimerCCompare0_Initial(void) { tm0 = 30000; //Compare-Wert } void TimerCCompare0_Aktiv(void) { int3ic=1; tcc13 = 1; } void TimerCCompare0_Inaktiv(void) { tcc13 = 0; }