![]() |
giao tiếp I2C pic6f877 o chay? help!
1 Attachment(s)
mình đang tìm hiểu về giao tiếp i2c! mình viết chương trình gửi dữ liệu từ 1 mater là pic 16f877a xuống 1 slave nhưng mô phỏng o thấy gì hết????
code mater: Code:
#include <16F877A.H> Code:
#include <16F877A.H> state=i2c_isr_state() ; // trả về giá trị 8bit thông báo trang thái của i2c phảy o? hay gì // mong giải thich cụ thể hơn và giá trị state nhận được có y nghĩa như thế nào? vd : state==0????? state>0??? state<0x80???? // tại sao lại so sánh với 0x80?? state>0x80??? các thông số đó liên quan đến truyền ,nhận và bít ACK như thế nào? khi nào mình biết mình nhận đủ 1 byte? còn cả lệnh i2c_pull(); nữa??? mới học đọc các bài trên diễn đàn nhưng vẫn chưa ngộ ra!!!!mong được giúp đỡ! thanks! |
Code:
#if defined __PCH__ Ta so sánh giá với 0x80. Theo mình là vì 0x80 = 128 = 256/2. Vì state có độ lớn 1 byte. Do đó vùng giá trị của nó được chia đôi. 1/2byte giá trị là dành cho i2c_write() và 1/2byte giá trị là dành cho i2c_read(). |
cảm ơn bạn nhưng mình đọc nó nhưng chưa hiểu lắm,mình dùng ccs thôi
bạn có thể làm rõ cho mình vấn đề này dc o! thanks |
Trích:
1) Nếu địa chỉ được nhận thì nhảy vào lệnh if và gán biến i2c_state =0. 2) Nếu bit RW = 1 thì nhảy vào lệnh if và set bit thứ 7 của i2c_state, tức là i2c_state = 0x80. 3) Sau đó hàm trả về giá trị của i2c_state. Sau đó tăng giá trị của i2c_state thêm 1. Nếu lần truyền tiếp theo chỉ truyền dữ liệu thì sẽ không nhảy vào lệnh if nào hết. Chỉ thực hiện bước thứ 3 thôi. |
Múi giờ GMT. Hiện tại là 07:14 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam