Trước hết, bạn đã chọn tốc độ là 100 kHz. Theo bảng 22-36 trong datasheet của dsPIC30F2010 (phiên bản DS70118G), thời gian bus rỗi tối thiểu là 4.7 us. Với code cho master hiện thời của bạn, tôi cho rằng thời gian này có thể bị vi phạm.
Đối với slave, bạn xem lại giá trị địa chỉ được nạp vào thanh ghi I2CADD (giá trị mà bạn đang dùng là 7-bit địa chỉ được dịch trái 1 bit và kết hợp với bit R/W, chứ không phải là 7-bit địa chỉ chính xác). Chú ý rằng các địa chỉ 7 bit hợp lệ nằm trong phạm vi 0x04 - 0x77.
Thân,
|