Al primo link, operand r dovrebbe essere indicazione di usare un registro interno della MCU, "+r" read/write su registro
= Write-only operand, usually used for all output operands.
+ Read-write operand
& Register should be used for output only
"cp %0, %1" : /* No outputs */ : "r" (counter), "r" (pwmval): );
Istruzione cp fa un confronto ed in base a tale confronto setta il carry bit C (mi pare)
la ror fa rotazione (shift) ma usa anche il carry bit, credo che se la cp ha settato il carry, quel bit a 0 o 1 a seconda del confronto ti viene poi shiftato dentro a sendbyte al bit numero 7 e nel carry ci porta il bit 0 di sendbyte.
I percento dovrebbero essere posizionali, il primo %0 prende il primo parametro (counter) %1 il secondo.
Un pò come i % nella printf() del C
P.S. non conosco l'argomento, ho letto i link. Non sono sicuro di quello che affermo. ![]()
Per le istruzioni assembly del 328 meglio leggere questo: