Hallo Leute,
ich würde gerne wissen wieviele Takte der ATMega8 braucht um einen
Sprung auszuführen.
Ich habe in C eine Funktion geschrieben, die Bits senden soll. Das
Listing sieht folgendermasen aus:
1 | 00000146 <senden>:
|
2 |
|
3 | while(1){
|
4 |
|
5 | // zaehler1DauerPattern=4;
|
6 |
|
7 | asm volatile (
|
8 | 146: 50 91 3f 01 lds r21, 0x013F
|
9 | 14a: 40 91 40 01 lds r20, 0x0140
|
10 | 14e: 30 91 3d 01 lds r19, 0x013D
|
11 | 152: 20 91 3e 01 lds r18, 0x013E
|
12 | 156: 80 91 41 01 lds r24, 0x0141
|
13 | 15a: 90 91 42 01 lds r25, 0x0142
|
14 | 15e: 32 bb out 0x12, r19 ; 18
|
15 | 160: 42 bb out 0x12, r20 ; 18
|
16 | 162: 42 bb out 0x12, r20 ; 18
|
17 | 164: 32 bb out 0x12, r19 ; 18
|
18 | 166: 80 93 41 01 sts 0x0141, r24
|
19 | 16a: 90 93 42 01 sts 0x0142, r25
|
20 |
|
21 |
|
22 | :[zaehler1DauerPattern] "+r" (zaehler1DauerPattern),[zaehler2DauerPattern] "+r" (zaehler2DauerPattern): [txen_l_txd_h] "r" (txen_l_txd_h), [txen_l_txd_l] "r" (txen_l_txd_l),[txen_h_txd_h] "r" (txen_h_txd_h), [txen_h_txd_l] "r" (txen_h_txd_l), [addrPORTD] "I" (_SFR_IO_ADDR (PORTD))
|
23 | );
|
24 |
|
25 | wdt_reset();
|
26 | 16e: a8 95 wdr
|
27 | 170: ea cf rjmp .-44 ; 0x146 <senden>
|
Er sendet kontinuirlich 4 Bits. Zwischen den Packeten sind immer Pausen,
weil er Zeit für den Rücksprung braucht. Allerdings messe ich zwischen
den Bitpacketen viel mehr als 10 Takte. Woran liegt das?
Danke und Gruß
Yamamoto