![]() |
|
Tài trợ cho PIC Vietnam |
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 |
![]() |
#1 |
Đệ tử 4 túi
Tham gia ngày: May 2009
Bài gửi: 74
: |
giao tiếp I2C pic6f877 o chay? help!
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> #fuses XT,NOWDT,NOPROTECT,NOLVP #use Delay(Clock=4000000) #define SLAVE_ADDRESS 0x10 #use i2c(master, sda=PIN_C4, scl=PIN_C3) void write_I2C(int8 a) { i2c_start(); i2c_write(SLAVE_ADDRESS); i2c_write(a); i2c_stop(); } void main() { int8 value; value = 0; while(true){ write_I2C(value); output_b(value); value++; delay_ms(100); } } Code:
#include <16F877A.H> #fuses XT,NOWDT,NOPROTECT,NOLVP #use delay(Clock=4000000) #use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0x10) int8 value; #INT_SSP void i2c_isr() { int8 state; int8 address; state = i2c_isr_state(); if(state == 0) address = i2c_read(); else if(state < 0x80) value = i2c_read(); } void main() { enable_interrupts(GLOBAL); enable_interrupts(INT_SSP); set_tris_b(0x00); while(true){ output_b(value); } } 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! |
![]() |
![]() |
|
|