Witam
Poniżej fragment z listingu kompilatora (uC==ATMega8):
byte SPI_TRX(char cData=0) { SPDR = cData; // Start transmission 104: 8f b9 out 0x0f, r24 ; 15 while (!(SPSR & (1<<SPIF))); // Wait for transmission complete 106: 77 9b sbis 0x0e, 7 ; 14 108: fe cf rjmp .-4 ; 0x106 <_Z7SPI_TRXc+0x2>
return SPDR; 10a: 8f b1 in r24, 0x0f ; 15 } 10c: 99 27 eor r25, r25 10e: 08 95 ret
00000110 <_Z7RS_znakh>:void RS_znak(byte data) { 110: 48 2f mov r20, r24 112: 21 e0 ldi r18, 0x01 ; 1 114: 30 e0 ldi r19, 0x00 ; 0 while (!(UCSRA&(1<<UDRE))); // Wait for empty transmit buffer 116: 8b b1 in r24, 0x0b ; 11 118: 99 27 eor r25, r25 11a: 55 e0 ldi r21, 0x05 ; 5 11c: 96 95 lsr r25 11e: 87 95 ror r24 120: 5a 95 dec r21 122: e1 f7 brne .-8 ; 0x11c <_Z7RS_znakh+0xc>
124: 82 27 eor r24, r18 126: 93 27 eor r25, r19 128: 80 fd sbrc r24, 0 12a: f5 cf rjmp .-22 ; 0x116 <_Z7RS_znakh+0x6>UDR=data; // Put data into buffer, sends the data 12c: 4c b9 out 0x0c, r20 ; 12 12e: 08 95 ret
Czy ktoś mi może wytłumaczyć, dlaczego pierwsza funkcja kompiluje się normalnie, a druga do testowania jednego bitu robi takie kombinacje?
Jak już kiedyś wspominałem, robię na pracę magisterską generator DDS -