Mình tìm được tài liệu nói về quá trình truyền nhận giữa 2 AVR như sau (Phần người ta hướng dẫn mình đặt sau dấu "//", còn lại là code mình viết theo hướng dẫn):
Nhờ các bác xem giúp em phần trong dấu ?? em phải viết thế nào? Phần code còn lại em đã làm đúng hướng dẫn chưa?


Code:
//Master Receive
//Set:TWEN, TWSTA, TWINT and wait for TWINT
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)));
//Transmit address + R
TWDR = SLA_R;
TWCR = (1<<TWINT)|(1<<TWEN);
//Read data out of TWDR every time TWINT cleared
while (!(TWCR & (1<<TWINT)));
DATA = TWDR;
//After last byte, instead of regular ACK, leave line high
??????????
//Set TWSTO to signal stop
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
//Status registers for arbitration
??????????
//Slave Transmit
//Set address in TWAR, TWEN, TWEA (enable ack)
TWCR = (1<<TWEN)|(1<<TWEA);
TWAR = Slave_Add;
//TWSTA, TWSTO cleared
TWCR = (1<<TWSTA)|(1<<TWSTO);
//When AVR hears address + R, it’ll enter transmit mode
??????????
//Put bytes into TWDR, set TWINT and TWEA to acknowledge
TWDR = DATA;
TWCR = (1<<TWINT)|(1<<TWEA);



Comment