Anh Falleaf có viết:
Code:
Các bạn lưu ý rằng, F nói trường hợp nâng cao, thì chúng ta hoàn toàn có quyền sử dụng mạng Multi Master. Khi bạn setup chip ở chế độ Slave, thì nó thụ động. Nhưng hãy thử nghĩ, tôi làm slave cho mạng này, và làm master của một mạng khác, vậy thì có được không? Vì tôi có tới 40 chân chứ không phải 2 chân.
Vậy nếu tôi làm master cho một mạng khác, mà trong đó slave của tôi lại là master của cái mạng mà tôi làm slave . Hoàn toàn được.
Nhưng vấn đề nâng cao ở chỗ nữa, nếu làm như vậy, tôi phải tốn 4 dây để làm 2 mạng. Vấn đề trước đây hình như F đặt ra cho Linh, nhưng Linh chưa giải quyết xong, đó là Multi Master trong một mạng dùng 2 dây thôi.
Vấn đề này F tiếp tục treo ở đây chờ người giải quyết.
Để hiểu thêm về Multi master này em phải đọc thêm ở tài liệu nào vậy anh?
Em nghĩ như thế này được không anh?
Giả sử trên mạng có 2 con Master 1 và 2 , tại 1 thời điểm chỉ có 1 con là Mater , con còn lại là Slave . Em lấy chân A0 đọc tín hiệu kích về , khi nào nó là 0 thì Master1 là master , khi nào A0=1 thì Master 2 là master.
Rồi em thay đoạn code viết trong CCS của 2 con master như sau:
Giả sử mặc định ban đầu A0=0 , tức Master1 là master:
Code:
cho Master1
#use i2c(master, sda=PIN_C4, scl=PIN_C3, force_hw)
..............
void main()
{
set_tris_a(0x01); // A0 là chân nhập
Do
{
if (input(pin_A0))
{
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0x10, force_hw)
// cho master 1 là Slave , nhưng phần này em nghĩ là chỉ đặt đầu
//chương trình không thể đưa ra dây.Nên ở đây em định chèn đoạn
// code assembly để kích thanh ghi như sau:
#asm
em đưa đoạn code assembly để kích thanh ghi SSPSTAT,SSPCON1
và SSPCON2 để đưa master 1 về slave?
#endasm
}
else
{
// em đưa đoạn code assembly để đưa Master 1 thành master
}
............
}While (1)
}
Đối với Master 2 em làm ngược lại. Như vậy đúng không anh?
Em đọc datasheet của Pic 16f877A trang 105 có nói về multi master , nhưng em chưa hiể rõ lắm, mong anh chủ giúp