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