Timer1 und _delay_ms

OP #1659336
Lesenswert?
• ▲
▼
Hallo,
hängt die Funktion _delay_ms() irgendwie mit dem Timer zusammen?
1
void delay_ms(int delay) {
2
        int i;
3
        for (i=0;i<=delay;i++) {
4
                _delay_ms(1);
5
        }
6
}
7

8
int main(void) 
9
{
10

11
int i=0;
12

13
sei();
14

15
DDRD |= 0b11110000;           //Port D 4 mit 7 als Ausgang
16
DDRB |= 0xFF;               //Port B komplett Ausgang
17

18

19
uart_init(UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
20
  
21

22
MCUCR |= (1<<ISC11) | (1<<ISC01);  //Interrupts enable
23
GICR |= (1<<INT1) | (1<<INT0);
24

25
TCCR1A |= (1<<COM1A0) | (1<<COM1B0);  //Toggle OCA/B on Compare Match
26
TCCR1B |= (1<<CS10) | (1<<CS12) | (1<<WGM12);     //Prescaler 1024
27
OCR1A = 78;
28
OCR1B = 78;
29
TIMSK |= (1<<OCIE1A) | (1<<OCIE1B);  //Timer Itnerrupt enable
30

31

32
while(1)
33
{
34
  i++;
35
  char test[20] = "";
36
  delay_ms(100);
37
  PORTB ^= (1<<PB4);
38
  PORTD ^= (1<<PD7);
39
  uart_puts("hallo\n");  
40
}
41
return 0;
42
}
Wenn ich die TIMSK Zeile auskommentiere erhalte ich im Terminal "hallo", 
ansonsten nicht.
Grüße
Martin
Gast #1659416
Lesenswert?
• ▲
▼
Dein Code ist unvollständig. Abgesehen von der Funktion uart_init und 
den Header-Includes fehlt die Implementation des 
Timer-Interrupt-Handlers. Letztere wäre interessant, weil da 
wahrscheinlich der Fehler ist.
Gast #1659449
Lesenswert?
• ▲
▼
Martin Uxxxxxx schrieb:

> aber einen Timer Interrupt Handler habe ich gar nicht

Dann ist das das Problem. Einen Interrupt darfst du nicht einschalten, 
wenn du keinen Handler dafür hast.

> - im Interrupt wird doch hardwaremäßig der Pin getoggelt,

Nein, im Interrupt wird die ISR aufgerufen, sonst nichts. Wenn du den 
Timer hardwaremäßig einen OC-Pin toggeln lassen willst, kannst du das 
tun, aber das hat nichts mit dem Interrupt zu tun.

> inwiefern kommt da eine ISR ins Spiel?

Wenn ein Interrupt ausgelöst wird, wird eine ISR aufgerufen. Das ist der 
Zweck von Interrupts.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.