![]() |
|
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 |
![]() |
#11 |
Đệ tử 3 túi
Tham gia ngày: Jun 2006
Bài gửi: 51
: |
Alo
Chào các bạn!!
Mình gặp trục trặc khi đọc dữ liệu từ Slave về. Đây là đoạn code sử dụng cho 2 con PIC 18F877A. Master: Yêu cầu Slave nhận dữ liệu liên tục (cách nhau 500ms) và nó sẽ hiển thị giá trị nhận được lên Port_b. Dùng leds để quan sát. 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) int8 read_I2C() { int8 value; i2c_start(); i2c_write(SLAVE_ADDRESS + 1); value = i2c_read(); i2c_stop(); return value; } void main() { int8 value; set_tris_b(0x00); while(1){ value = read_I2C(); output_b(value); delay_ms(500); } } 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 = 0x01; #INT_SSP void i2c_isr() { int8 state; int8 address; state = i2c_isr_state(); if(state >= 0x80){ i2c_write(value); value++; } } void main() { enable_interrupts(GLOBAL); enable_interrupts(INT_SSP); set_tris_b(0x00); while(1){ output_b(value); } } thay đổi nội dung bởi: hoanf, 15-09-2006 lúc 12:40 PM. |
![]() |
![]() |
|
|