-
-
Erfahrener Benutzer
Roboter-Spezialist
Hallo Klucky
Beim Mega 128 gibt es kein CTS1 Flag mehr, heißt jetzt WGM12.
also
TCCR1B|=(1<<CS10)|(1<<CS12)| (1<<WGM12);
OCR1=15625; ist beim MEGA 128 ein 16 BIT Register, also
OCR1A=15625;
SIGNAL(SIG_OUTPUT_COMPARE) gibts beim Mega 128 nicht, also
SIGNAL(SIG_OUTPUT_COMPARE1A) sonst stimmt der Inerrupt einsprung
nicht mehr.
In deiner INT Routine SIGNAL(SIG_OUTPUT_COMPARE1A)
{
cli();
/*Timer anhalten*/
TCCR1B&=~((1<<CS10)|(1<<CS12));
byte_timer=1;
}
schaltest du mit cli(); die Interrupts aus, macht keinen Sinn, da GCC das automatisch macht. Beim verlassen der INT Routine wird es aber wieder eingeschaltet, auch in deinem Fall, also aufpassen.
Deine Abfage while(byte_timer=0){} geht so nicht, vergleiche immer mit == , also while(byte_timer==0){}. Zudem muß die Variable byte_timer mit volatile deklariert werden, sonst wird sie weg optimiert.
volatile BYTE byte_timer;
MFG
Dieter
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen