Guten Abend,
Habe folgendes Problem. Habe ein Programm geschrieben wo der Timer1 des
ATMEGA8 einen Port toggeln soll, und zwar mit verschiedenen
Impulslängen.
Das funktioniert auch alles soweit bestens, außer dass in meiner main
die Werte nicht übernommen werden, wenn ich z.B. die Pulslänge während
der Laufzeit ändern will. Hier mal mein Code, kann mir einer sagen was
ich falsch mache???
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 | #include <avr/interrupt.h>
|
4 |
|
5 | #define STANDARD 60535;
|
6 |
|
7 | unsigned short LOAD;
|
8 |
|
9 |
|
10 | int main(void)
|
11 | {
|
12 | DDRD = 0x00;
|
13 | PORTD = 0xFF;
|
14 |
|
15 | DDRC |= (1<<PC0);
|
16 | PORTC |= (1<<PC0);
|
17 |
|
18 | TCCR1B = 0x02;
|
19 | TIMSK = 0x04;
|
20 | LOAD = 50000;
|
21 |
|
22 | TCNT1 = LOAD;
|
23 |
|
24 | sei();
|
25 |
|
26 |
|
27 | while(1)
|
28 | {
|
29 | LOAD = 10000;
|
30 | _delay_ms(1000);
|
31 | LOAD = 20000;
|
32 | _delay_ms(1000);
|
33 | }
|
34 |
|
35 | return 0;
|
36 | }
|
37 |
|
38 |
|
39 |
|
40 | ISR(TIMER1_OVF_vect)
|
41 | {
|
42 | if(PORTC & 0x01)
|
43 | TCNT1 = STANDARD;
|
44 | if(!(PORTC & 0x01))
|
45 | TCNT1 = LOAD;
|
46 |
|
47 | PORTC ^= (1<<PC0);
|
48 |
|
49 | }
|