Code:
if(!(i2c_start(SLAVE_MoCo+I2C_WRITE))) //Slave bereit zum schreiben?
{ //
i2cdmy = i2c_write (0x01); // Buffer Startadresse 01 setzen
i2cdmy = i2c_write (byte1); // zum Schreiben. 01 {0, 10}
i2cdmy = i2c_write (byte2); //
i2cdmy = i2c_write (byte3); //
i2c_stop(); // Zugriff beenden
} //
else // Melde jetzt: Kein Byte geschrieben
{ // und Fehlerblinken
uputs0("\r\n\tKein I2C-Schreiben möglich.\r\n"); //
i2cerr = 0b00000010; // i2c-write nicht möglich
for(i=0; i<2; i++) { // Fehlermeldung: LED i-fach blinken
SetBit(PORTC, 2); // LED EIN, HELL
waitms(3); //
ClrBit(PORTC, 2); // LED AUS, Dunkel
} // Ende if(!(i2c_start(SLAVE_MoCo+I2C_WRITE)))
// Schreiben an Slave ist erledigt oder nicht - dann Fehlermeldung
das sieht dann in der *.lls so aus (und da drin stehen dann wirklich auch die entsprechenden Zeilen mit dem Quellcode ! ! !) :
Code:
if(!(i2c_start(SLAVE_MoCo+I2C_WRITE))) //Slave bereit zum schreiben?
1d38: 82 e8 ldi r24, 0x82 ; 130
1d3a: 0e 94 6d 00 call 0xda ; 0xda <i2c_start>
1d3e: 88 23 and r24, r24
1d40: d9 f5 brne .+118 ; 0x1db8 <I2CTST01+0x10c>
{ //
i2cdmy = i2c_write (0x01); // Buffer Startadresse 01 setzen
1d42: 81 e0 ldi r24, 0x01 ; 1
1d44: 0e 94 c6 00 call 0x18c ; 0x18c <i2c_write>
i2cdmy = i2c_write (byte1); // zum Schreiben. 01 {0, 10}
1d48: 80 2f mov r24, r16
1d4a: 0e 94 c6 00 call 0x18c ; 0x18c <i2c_write>
i2cdmy = i2c_write (byte2); //
1d4e: 81 2f mov r24, r17
1d50: 0e 94 c6 00 call 0x18c ; 0x18c <i2c_write>
i2cdmy = i2c_write (byte3); //
1d54: 8f 2d mov r24, r15
1d56: 0e 94 c6 00 call 0x18c ; 0x18c <i2c_write>
Terminates the data transfer and releases the I2C bus
*************************************************************************/
void i2c_stop(void)
{
/* send stop condition */
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
1d5a: 60 92 bc 00 sts 0x00BC, r6
// wait until stop condition is executed and bus released
while(TWCR & (1<<TWSTO));
1d5e: 80 91 bc 00 lds r24, 0x00BC
1d62: 84 fd sbrc r24, 4
1d64: fc cf rjmp .-8 ; 0x1d5e <I2CTST01+0xb2>
i2c_stop(); // Zugriff beenden
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
uputs0("\t3 Bytes an Slave\t"); // Melde: Bytes wurden geschrieben an
1d66: 85 e1 ldi r24, 0x15 ; 21
1d68: 94 e0 ldi r25, 0x04 ; 4
1d6a: 0e 94 b1 01 call 0x362 ; 0x362 <uputs0_>
uputs0i (SLAVE_MoCo+I2C_WRITE); // Slaveadresse
1d6e: 82 e8 ldi r24, 0x82 ; 130
1d70: 90 e0 ldi r25, 0x00 ; 0
1d72: 0e 94 b7 0b call 0x176e ; 0x176e <uputs0i>
uputs0(" =>\t"); //
1d76: 88 e2 ldi r24, 0x28 ; 40
1d78: 94 e0 ldi r25, 0x04 ; 4
1d7a: 0e 94 b1 01 call 0x362 ; 0x362 <uputs0_>
uputs0i(byte1); uputs0(" ");
1d7e: 80 2f mov r24, r16
1d80: 90 e0 ldi r25, 0x00 ; 0
1d82: 0e 94 b7 0b call 0x176e ; 0x176e <uputs0i>
1d86: 8f e2 ldi r24, 0x2F ; 47
1d88: 94 e0 ldi r25, 0x04 ; 4
1d8a: 0e 94 b1 01 call 0x362 ; 0x362 <uputs0_>
uputs0i(byte2); uputs0(" ");
1d8e: 81 2f mov r24, r17
1d90: 90 e0 ldi r25, 0x00 ; 0
1d92: 0e 94 b7 0b call 0x176e ; 0x176e <uputs0i>
1d96: 8f e2 ldi r24, 0x2F ; 47
1d98: 94 e0 ldi r25, 0x04 ; 4
1d9a: 0e 94 b1 01 call 0x362 ; 0x362 <uputs0_>
uputs0i(byte3); uputs0(" ");
1d9e: 8f 2d mov r24, r15
1da0: 90 e0 ldi r25, 0x00 ; 0
1da2: 0e 94 b7 0b call 0x176e ; 0x176e <uputs0i>
1da6: 8f e2 ldi r24, 0x2F ; 47
1da8: 94 e0 ldi r25, 0x04 ; 4
1daa: 0e 94 b1 01 call 0x362 ; 0x362 <uputs0_>
uputs0("\r\n"); // Zeilenvorschub
1dae: 87 e4 ldi r24, 0x47 ; 71
1db0: 91 e0 ldi r25, 0x01 ; 1
1db2: 0e 94 b1 01 call 0x362 ; 0x362 <uputs0_>
1db6: 1c c0 rjmp .+56 ; 0x1df0 <I2CTST01+0x144>
} //
else // Melde jetzt: Kein Byte geschrieben
{ // und Fehlerblinken
uputs0("\r\n\tKein I2C-Schreiben möglich.\r\n"); //
1db8: 89 e5 ldi r24, 0x59 ; 89
1dba: 94 e0 ldi r25, 0x04 ; 4
1dbc: 0e 94 b1 01 call 0x362 ; 0x362 <uputs0_>
i2cerr = 0b00000010; // i2c-write nicht möglich
1dc0: 30 92 3f 0f sts 0x0F3F, r3
1dc4: 20 e0 ldi r18, 0x00 ; 0
for(i=0; i<2; i++) { // Fehlermeldung: LED i-fach blinken
SetBit(PORTC, 2); // LED EIN, HELL
1dc6: 42 9a sbi 0x08, 2 ; 8
1dc8: c6 01 movw r24, r12
1dca: 01 97 sbiw r24, 0x01 ; 1
1dcc: f1 f7 brne .-4 ; 0x1dca <I2CTST01+0x11e>
1dce: c6 01 movw r24, r12
1dd0: 01 97 sbiw r24, 0x01 ; 1
1dd2: f1 f7 brne .-4 ; 0x1dd0 <I2CTST01+0x124>
1dd4: c6 01 movw r24, r12
1dd6: 01 97 sbiw r24, 0x01 ; 1
1dd8: f1 f7 brne .-4 ; 0x1dd6 <I2CTST01+0x12a>
waitms(3); //
ClrBit(PORTC, 2); // LED AUS, Dunkel
1dda: 42 98 cbi 0x08, 2 ; 8
1ddc: 8f e2 ldi r24, 0x2F ; 47
1dde: 90 e0 ldi r25, 0x00 ; 0
1de0: f6 01 movw r30, r12
1de2: 31 97 sbiw r30, 0x01 ; 1
1de4: f1 f7 brne .-4 ; 0x1de2 <I2CTST01+0x136>
// ============================================================================= =
// ============================================================================= =
//### Programm pausieren lassen !! Der Pausenwert ist nur experimentell !
void waitms(uint16_t ms) //
{ //
for(; ms>0; ms--)
1de6: 01 97 sbiw r24, 0x01 ; 1
1de8: d9 f7 brne .-10 ; 0x1de0 <I2CTST01+0x134>
} //
else // Melde jetzt: Kein Byte geschrieben
{ // und Fehlerblinken
uputs0("\r\n\tKein I2C-Schreiben möglich.\r\n"); //
i2cerr = 0b00000010; // i2c-write nicht möglich
for(i=0; i<2; i++) { // Fehlermeldung: LED i-fach blinken
1dea: 2f 5f subi r18, 0xFF ; 255
1dec: 22 30 cpi r18, 0x02 ; 2
1dee: 59 f7 brne .-42 ; 0x1dc6 <I2CTST01+0x11a>
} // Ende if(!(i2c_start(SLAVE_MoCo+I2C_WRITE)))
// Schreiben an Slave ist erledigt oder nicht - dann Fehlermeldung
Lesezeichen