
Zitat von
liggi
wie sieht das den in c aus???
mfg liggi
Ist doch klar - gut sieht das aus.
Möglicherweise ist das eine Antwort:
Code:
/* =================================================================================
Target MCU : ATmega16
Target Hardware : RNControl
Target cpu-frequ. : 16 MHz, externer Quarzoszillator
===================================================================================
Enthaltene Routinen:
void TMR_0_init( void ) // ISR Timer0 initialisieren
SIGNAL(SIG_OUTPUT_COMPARE0) // Timer0 ISR, Zeitmarke hochzählen
int main(void)
================================================================================ */
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#define MCU = ATMega16
// Mit Quarz 16 Mhz-CPU
#define F_CPU 16000000
/* beachte: volatile! und Vorzeichenlos */
volatile uint16_t Izeit_1; /* Timer läuft hoch
Die Interruptroutine läuft mit 10 kHz */
/* ============================================================================== */
/* === Initialisierung fuer Timer mega16(32) ================================== */
void TMR_0_init( void )
{ //Initialisiere 8-Bit-Timer auf 10 kHz
TCCR0 |= (1<<CS01 | 1<<CS00); // Prescaler 1/64 / Clock <- CPU
TCCR0 |= (1<<WGM01 | 0<<WGM00); // Timer im CTC-Mode
OCR0 = 25; // Preset 25 für 100µs bei 16Mhz
TIMSK |= (1<<OCIE0); // Compare Match IRQ
}
/* ============================================================================== */
/* === Nicht unterbrechbare ISR für timer ====================================== */
/* Diese Routine zählt hoch im Takt 10 kHz. */
SIGNAL(SIG_OUTPUT_COMPARE0)
{
{
if (Izeit_1 <= 10000)
Izeit_1 ++; //Zeitstand Interupt-Timer läuft von 1 .. 10 000
else
Izeit_1 = 0;
}
{ // von hier bis Ende (LED2 toggeln) nur Testphase
if (Izeit_1 == 1)
PORTC ^= (1<<PC2); //LED3 toggeln alle Sekunde
}
PORTC ^= (1<<PC1); //LED2 toggeln jeden Interrupt
}
/* ============================================================================== */
// ------------------------------------------------------------------
/*### Hauptschleife ###*/
int main(void)
DDRC |= 0xFF; //11111111 -> Ausgänge
TMR_0_init(); //Initialisiere den Timer0-Interrupt (10 kHz)
sei(); //Globalen Interrupt freigeben
for(;;) {
// Dieses Programm toggelt Ausgänge PC1 und PC2
}
}
. . . aber wenns nicht deine Frage war - dann stell die Frage doch präzise.
Lesezeichen