hallo,
ich verstehe etwas nicht und bräuchte Hilfe…
Aufbau:
zwei Board Arduino uno, verbunden mit GND, und PIN8 ( bit0 PORTB )
einer sendet eine 0 auf pin 8, der andere empfängt...
nun zähle ich auf beiden Seiten die Schleifendurchläufe ( 2 x 8 bit )
und bekomme extrem unterschiedliche Werte heraus :
Sender äussere Schleife 150, innere 250
Empf. äussere Schleife 146, innere 145
beide Bords UNO R3 mit 16MHz - selber Hersteller
die Schleifen sind doch identisch programmiert ? ich verstehe das
gerade nicht mehr, die Unterschiede sind doch recht groß oder nicht ?
hier Sender:
void loop(){
asm volatile (
"reset: \n\t"
" sbis %[lese], 0 \n\t"
" rjmp reset \n\t"
" cli \n\t"
" sbi %[portdir], 0 \n\t"
" cbi %[port], 0 \n\t"
" ldi r17, 150 \n\t"
"lp2: ldi r16, 250 \n\t"
"lp1: sbic %[lese] , 0 \n\t"
" rjmp fertig \n\t"
" dec r16 \n\t"
" brne lp1 \n\t"
" dec r17 \n\t"
" brne lp2 \n\t"
"fertig: \n\t"
" sbi %[port], 0 \n\t"
" cbi %[portdir], 0 \n\t"
" sbi %[port], 0 \n\t"
" sei \n\t"
"end: \n\t"
: [antwort] "+r" (aa)
: [portdir] "I" (_SFR_IO_ADDR(DDRB)),
[port] "I" (_SFR_IO_ADDR(PORTB)),
[lese] "I" (_SFR_IO_ADDR(PINB))
:"r16", "r17", "r18"
);
//Serial.println(aa);
delay(2500);
}
hier Empfänger:
void loop(){
asm volatile (
"warte: \n\t"
" sbic %[lese], 0 \n\t"
" rjmp warte \n\t"
" cli \n\t"
" ldi r17, 0 \n\t"
"lp2: ldi r16, 0 \n\t"
"lp1: sbic %[lese], 0 \n\t"
" rjmp fertig \n\t"
" inc r16 \n\t"
" brne lp1 \n\t"
" inc r17 \n\t"
" brne lp2 \n\t"
"fertig: \n\t"
" sei \n\t"
" mov %1, r17 \n\t"
" mov %2, r16 \n\t"
: "+r" (aa), "+r" (bb), "+r" (cc)
: [portdir] "I" (_SFR_IO_ADDR(DDRB)),
[port] "I" (_SFR_IO_ADDR(PORTB)),
[lese] "I" (_SFR_IO_ADDR(PINB))
:
);
Serial.println(bb);
Serial.println(cc);
Serial.println();
}
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.