Thông báo

Collapse
No announcement yet.

gặp vấn đề gửi dữ liệu từ slave đến master, mình dung pic16f877a

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • gặp vấn đề gửi dữ liệu từ slave đến master, mình dung pic16f877a

    ví dụ mình muốn truyền số 5 từ master đến slave , rồi con slave lại gửi số 5 đó cho con master và con chủ phải hiện giá trị đó ra cổng B,mình viết code rùi mô phổng trên protues nó toàn bị lỗi.
    code của mình đây sửa hộ mình với:
    con master:
    #include <16F877A.H>
    #fuses HS,NOWDT,NOPROTECT,NOLVP
    #use Delay(Clock=20000000)
    #use i2c(master, sda=PIN_C4, scl=PIN_C3)
    int8 value_re1,n;
    void write_I2C(int8 value1,int8 slave_addr)
    {
    i2c_start();
    i2c_write(slave_addr);
    i2c_write(value1);
    i2c_stop();
    }

    void read_I2C()
    {

    i2c_start();
    n=i2c_write(0x11);
    while(n==1)
    {
    i2c_start();
    n=i2c_write(0x11);

    }
    value_re1 = i2c_read();
    i2c_read(1,0);
    i2c_stop();
    }

    void main()
    {
    const int8 slave_addr = 0x10;
    set_tris_b(0x00);
    while(1)
    {
    write_I2C(5,slave_addr);
    delay_ms(10);
    read_I2C();
    output_b(value_re1);
    }
    }
    còn đây là slave:
    #include <16F877A.H>
    #fuses HS,NOWDT,NOPROTECT,NOLVP

    #use delay(Clock=20000000)
    #use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0x10)
    BYTE addr;
    #INT_SSP
    void i2c_isr()
    {
    BYTE incoming, state;
    state = i2c_isr_state();
    if(state < 0x80)
    {
    incoming = i2c_read();
    if(state == 1)
    addr = incoming;

    }
    if(state ==0x80)
    {
    i2c_write(addr);

    }
    }

    void main()
    {
    enable_interrupts(INT_SSP);
    enable_interrupts(GLOBAL);
    set_tris_b(0x00);
    while(1)
    {
    output_b(addr);

    }
    }

  • #2
    Chổ này phải là

    #use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0x10, CW_HARDWARE)
    Mình nhớ là như vậy ... bạn xem thử file help phần I2C xem sao

    Comment

    Về tác giả

    Collapse

    travp Tìm hiểu thêm về travp

    Bài viết mới nhất

    Collapse

    • nguyendinhvan
      Trả lời cho Vấn đề về tốc độ quay
      bởi nguyendinhvan
      Sử dụng động cơ servor, hoặc lắp thêm một cái encoder vào động cơ bước. Encoder sẽ kiểm soát động cơ có quay hoặc đứng im.
      14-12-2025, 19:50
    • Andrea14
      Vấn đề về tốc độ quay
      bởi Andrea14
      Chào mọi người,

      Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
      12-12-2025, 12:42
    • bqviet
      Trả lời cho Đấu tắt điện cho máy tính bảng
      bởi bqviet
      Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
      06-12-2025, 17:17
    Đang tải...
    X