PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp USB, CAN, I2C, SPI, USART...

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 03-08-2012, 01:24 AM   #1
vakk
Đệ tử 1 túi
 
Tham gia ngày: Sep 2010
Bài gửi: 17
:
Giao tiếp I2C

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
Hình Kèm Theo
File Type: png I2C.png (104.1 KB, 4 lần tải)
vakk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 01:28 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam