Giao tiếp I2C
1 Attachment(s)
Chào các bạn. Tôi muốn hỏi về giao tiếp I2C viết bằng HTpic cho pic18f2550 Thạch anh 24MHz
Chương trình cho master:
Code:
void I2Cinit(void)
{
SSPSTAT|=0xC0;
SSPCON1=0x28;//master
SSPCON2=0x00;
SSPADD=59;//100KHz
}
void I2Cwrite(int data,int addr)
{
SEN=1;
while(SEN){}
while(ACKSTAT){}//chờ ACK
SSPBUF=(addr<<1)|0;//addr=4
while(ACKSTAT||BF){}
SSPBUF=data;
while(ACKSTAT){}
PEN=1;
while(PEN){}
I2Cinit();
}
Chương trình cho slave:
Code:
void I2Cinit(void)
{
SSPSTAT|=0xC0;
SSPCON1=0x36;//slave không ngắt startstop
SSPCON2=0x00;
SSPADD=(4<<1)|0;//addr=4
SSPIE=1;
SSPIF=0;
}
Hiện tại tôi chưa biết viết hàm nhận dữ liệu như nào vì theo tôi biết sau khi nhận đúng địa chỉ nó sẽ ngắt hoặc sau khi nhận dữ liệu xong nó cũng ngắt, vậy là ta nhận dữ liệu từ lần ngắt thứ 2 trở đi là đúng hay sai?
khi chạy thử mô phỏng thì proteus hiện ra như file đính kém, tại xung thứ 9 không có xung ack, vậy là tôi đã định sai địa chỉ hay do lỗi gì vì tối đọc thấy rằng phần cứng sẽ tự động gửi xung ack khi thấy đúng địa chỉ
Thanks
|