Ich brauch für ein simples Programm eine ganz einfache Delay-Routine,
die nicht besonders genau sein soll, sondern einfach ca. X ms
Verzögerung im Programm hervorrufen soll.
Unten ein kurzes Test-Programm welches einfach im Sekundentakt die LEDs
an P2 blinken lassen soll.
Leider passiert gar nichts.
Werden die beiden Schleifen einfach wegoptimiert und wenn ja, was kann
ich dagegen tun?
Ah und der Controller läuft übrigens mit 1Mhz (12Mhz Quarz, Takt wird
intern aber noch durch 12 geteilt).
1 | #include <at89c5131.h>
|
2 | #include <intrins.h>
|
3 |
|
4 | void delay_ms(int k)
|
5 | {
|
6 | int i=1000;
|
7 |
|
8 | while(--k)
|
9 | {
|
10 | while(--i)
|
11 | {
|
12 | _nop_();
|
13 | }
|
14 |
|
15 | }
|
16 | }
|
17 |
|
18 | int main(void)
|
19 | {
|
20 | while(1)
|
21 | {
|
22 | delay_ms(1000);
|
23 |
|
24 | P2 = 0xFF;
|
25 |
|
26 | delay_ms(1000);
|
27 |
|
28 | P2 = 0;
|
29 | }
|
30 |
|
31 | return 0;
|
32 | }
|